Help
RSS
API
Feed
Maltego
Contact
Domain > nezha.gazy.top
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2021-09-20
104.26.1.10
(
ClassC
)
2025-12-02
64.64.230.238
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: nginx/1.20.1Date: Tue, 02 Dec 2025 03:39:50 GMTContent-Type: text/htmlContent-Length: 169Connection: keep-aliveLocation: https://nezha.gazy.top/ html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>nginx/1.20.1/center>/body>/html>
Port 443
HTTP/1.1 200 OKServer: nginx/1.20.1Date: Tue, 02 Dec 2025 03:39:50 GMTContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-alive !DOCTYPE html>html langzh-CN>head> title>监控面板/title> meta charsetutf-8> meta http-equivX-UA-Compatible contentIEedge> meta nameviewport contentwidthdevice-width, initial-scale1.0> link relshortcut icon typeimage/png href/static/logo.svg /> link relstylesheet hrefhttps://unpkg.com/bootstrap@3.4.1/dist/css/bootstrap.min.css> link relstylesheet hrefhttps://unpkg.com/bootstrap@3.4.1/dist/css/bootstrap-theme.min.css> link relstylesheet href/static/theme-server-status/css/main.css?v20240724> link relstylesheet href/static/theme-server-status/css/dark.css?v20240724> link relstylesheet href/static/theme-server-status/css/light.css?v20240407> link relstylesheet hrefhttps://unpkg.com/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css> link relstylesheet hrefhttps://unpkg.com/font-logos@0.17.0/assets/font-logos.css> link relstylesheet hrefhttps://unpkg.com/flag-icons@7.2.3/css/flag-icons.min.css> link relstylesheet hrefhttps://unpkg.com/semantic-ui@2.4.0/dist/semantic.min.css> script srchttps://unpkg.com/jquery@3.7.1/dist/jquery.min.js>/script> script srchttps://unpkg.com/bootstrap@3.4.1/dist/js/bootstrap.min.js>/script> script srchttps://unpkg.com/vue@2.6.14/dist/vue.min.js>/script> script srchttps://unpkg.com/echarts@5.5.0/dist/echarts.min.js>/script> script src/static/theme-server-status/js/mixin.js?v20240711>/script> /head>body>div idapp> header rolenavigation classnavbar navbar-inverse navbar-fixed-top stylez-index:99999999;> div classcontainer> div classnavbar-header> button data-target.navbar-collapse data-togglecollapse classnavbar-toggle typebutton> span classsr-only>Toggle navigation/span> span classicon-bar>/span> span classicon-bar>/span> span classicon-bar>/span> /button> a href/ classnavbar-brand> img src/static/logo.svg styleheight: 2rem;display: inline-block;> 监控面板 /a> /div> nav idnavbar classnavbar-collapse collapse> ul classnav navbar-nav> li>a href/>i classhome icon>/i>首页/a>/li> template v-ifisMobile> li classdropdown> a data-toggledropdown>i classbi bi-gear-wide-connected styleposition:relative;top:1px;margin-right:3px;font-size:1.1rem;>/i>功能b classcaret>/b>/a> ul classdropdown-menu stylemin-width:100px;> li>a href/service>i classrss icon>/i>服务/a>/li> li>a href/network>i classbi bi-hdd-network icon>/i>网络/a>/li> /ul> /li> /template> template v-else> li>a href/service>i classrss icon>/i>服务/a>/li> li>a href/network>i classbi bi-hdd-network icon>/i>网络/a>/li> /template> li classdropdown> a data-toggledropdown>i classbi bi-incognito styleposition:relative;top:1px;margin-right:3px;font-size:1.2rem;vertical-align:top;>/i>主题b classcaret>/b>/a> ul classdropdown-menu> li v-for(item, index) in adaptedTemplates :keyindex> a @clicktoggleTemplate(item.key)> i :classitem.icon + icon stylefont-size:1em>/i>@#item.name#@ i classcheck icon v-ifpreferredTemplate item.key>/i> /a> /li> li v-ifdefaultTemplate custom> a @clicktoggleTemplate(custom) classitem> i classexpand icon stylefont-size:1em>/i>Custom /a> /li> /ul> /li> /ul> ul classnav navbar-nav navbar-right> li>a href/login>i classsign-in icon>/i>登录/a>/li> /ul> /nav> /div>/header> template v-ifshowGroup> section classcontainer table-responsive content stylemax-width: 95vw v-forgroup in nodesTag> table classtable table-striped table-condensed table-hover> thead> tr classnode-group-tag> th colspan16 styleborder:none;>@#(group.Tag!?group.Tag:默认)#@/th> /tr> tr classnode-group-cell> th classnode-cell status center>状态/th> th classnode-cell name center>名称/th> th classnode-cell os center>系统/th> th classnode-cell location center>位置/th> th classnode-cell uptime center>在线/th> th classnode-cell load center>负载/th> th classnode-cell network center>网络↓|↑/th> th classnode-cell traffic center>流量↓|↑/th> th classnode-cell cpu center>核心/th> th classnode-cell memory center>内存/th> th classnode-cell hdd center>硬盘/th> /tr> /thead> tbody idservers> template v-for(node,index) in group.data> tr :idr+node.ID data-togglecollapse :data-target#rt+node.ID classaccordion-toggle :classindex % 2 0 ? odd: even aria-expandedfalse @clickshowCharts($event, node.ID)> td classnode-cell status center> div classstatus-container> div v-ifnode.online classstatus-icon online>/div> div v-else classstatus-icon offline>/div> /div> /td> td classnode-cell name center>@#node.name#@/td> td classnode-cell os center> i v-ifisWindowsPlatform(node.host.Platform) classwindows icon>/i> i v-else-ifgetFontLogoClass(node.host.Platform) && node.stateuptime > 0 classfl-tux>/i> i v-else :classfl- + getFontLogoClass(node.host.Platform)>/i> span classnode-cell-os-text>@#getPlatformName(node.os)#@/span> /td> td styletext-align: center; classnode-cell location> i :classfi fi- + node.location>/i> span classnode-cell-location-text text-uppercase> @#node.location#@/span> /td> td styletext-align: center; classnode-cell uptime>@#node.uptime#@/td> td styletext-align: center; classnode-cell load>@#node.load#@/td> td styletext-align: center; classnode-cell network>@#node.network#@/td> td styletext-align: center; classnode-cell traffic>@#node.traffic#@/td> td classnode-cell cpu> div :classprogress, node.online ? progress-online : progress-offline> div :stylenode.cpu.style :classnode.cpu.class>small>@#node.cpu.percent#@%/small> /div> /div> /td> td classnode-cell memory> div :classprogress, node.online ? progress-online : progress-offline> div :stylenode.memory.style :classnode.memory.class> small>@#node.memory.percent#@%/small> /div> /div> /td> td classnode-cell hdd> div :classprogress, node.online ? progress-online : progress-offline> div :stylenode.hdd.style :classnode.hdd.class>small>@#node.hdd.percent#@%/small> /div> /div> /td> /tr> tr classexpandRow :classindex % 2 0 ? odd: even> td colspan16> div classaccordian-body collapse :idrt+node.ID> div styledisplay: flex;left-items: center;justify-content: center;flex-direction: column; max-width: 89vw> span classnode-cell-expand> span classnode-cell-expand-label>系统:/span> @#node.host.Platform#@-@#node.host.PlatformVersion#@ span v-ifnode.host.Virtualization>@#node.host.Virtualization#@:/span>@#node.host.Arch#@ /span> span classnode-cell-expand v-ifnode.host.CPU> span classnode-cell-expand-label>CPU:/span> @#node.host.CPU.join(,)#@ (@#node.cpu.percent#@%) /span> span classnode-cell-expand v-ifnode.host.GPU> span classnode-cell-expand-label>GPU:/span> @#node.host.GPU.join(,)#@ (@#parseInt(node.state.GPU >0 ? node.state.GPU : 0)#@%) /span> span classnode-cell-expand> span classnode-cell-expand-label>硬盘:/span> @#formatByteSize(node.state.DiskUsed)#@ / @#formatByteSize(node.host.DiskTotal)#@ (@#node.hdd.percent#@%) /span> span classnode-cell-expand> span classnode-cell-expand-label>内存:/span> @#formatByteSize(node.state.MemUsed)#@ / @#formatByteSize(node.host.MemTotal)#@ (@#node.memory.percent#@%) /span> span v-ifnode.host.SwapTotal > 0 classnode-cell-expand> span classnode-cell-expand-label>交换:/span> @#formatByteSize(node.state.SwapUsed)#@ / @#formatByteSize(node.host.SwapTotal)#@ span>(@#toFixed2(node.state.SwapUsed / node.host.SwapTotal * 100)#@%)/span> /span> span v-else classnode-cell-expand> span classnode-cell-expand-label>交换: OFF/span> /span> span classnode-cell-expand> span classnode-cell-expand-label>流量:/span> i classarrow alternate circle down outline icon stylemargin: 0>/i>@#formatByteSize(node.state.NetInTransfer)#@ i classarrow alternate circle up outline icon stylemargin: 0>/i>@#formatByteSize(node.state.NetOutTransfer)#@ /span> span classnode-cell-expand load> span classnode-cell-expand-label>负载:/span> @#toFixed2(node.state.Load1)#@ / @#toFixed2(node.state.Load5)#@ / @#toFixed2(node.state.Load15)#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>进程数:/span> @#node.state.ProcessCount#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>连接数:/span> TCP @#node.state.TcpConnCount#@ / UDP @#node.state.UdpConnCount#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>启动:/span> @#formatTimestamp(node.host.BootTime)#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>活动:/span> @#new Date(node.lastActive).toLocaleString()#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>在线:/span> @#node.uptime#@ /span> span v-ifnode.state.Temperatures && getTemperature(node.state.Temperatures, sensorList) > 0 @clicktoggleDetailedTemp(node.ID) classnode-cell-expand temp-detail :id`temp-${node.ID}` temp-detail-show0> span classnode-cell-expand-label>温度:/span> span :id`temp-main-${node.ID}` classnode-cell-expand-label> @#getTemperature(node.state.Temperatures, sensorList)#@°C i classbi bi-chevron-double-down>/i> /span> span :id`temp-detail-${node.ID}` classnode-cell-expand-label styledisplay:none> span v-fortemp in node.state.Temperatures :keytemp.Name v-iftemp.Temperature ! 0> @#temp.Name#@ : @#temp.Temperature#@°C /span> i classbi bi-chevron-double-up>/i> /span> /span> span classnode-cell-expand> span classnode-cell-expand-label>版本:/span> @#node.host.Version#@ /span> span classnode-echarts-expand> div classchartbox chartbox-show0 :keynode.ID :ref`chart${node.ID}` stylewidth: 100%; height: auto;>/div> /span> /div> /div> /td> /tr> /template> /tbody>/table> /section> /template> template v-else> section classcontainer table-responsive content stylemax-width: 95vw> table classtable table-striped table-condensed table-hover> thead> tr> th classnode-cell status center>状态/th> th classnode-cell name center>名称/th> th classnode-cell os center>系统/th> th classnode-cell location center>位置/th> th classnode-cell uptime center>在线/th> th classnode-cell load center>负载/th> th classnode-cell network center>网络↓|↑/th> th classnode-cell traffic center>流量↓|↑/th> th classnode-cell cpu center>核心/th> th classnode-cell memory center>内存/th> th classnode-cell hdd center>硬盘/th> /tr> /thead> tbody idservers> template v-for(node,index) in nodesNoTag> tr :idr+node.ID data-togglecollapse :data-target#rt+node.ID classaccordion-toggle :classindex % 2 0 ? odd: even aria-expandedfalse @clickshowCharts($event, node.ID)> td classnode-cell status center> div classstatus-container> div v-ifnode.online classstatus-icon online>/div> div v-else classstatus-icon offline>/div> /div> /td> td classnode-cell name center>@#node.name#@/td> td classnode-cell os center> i v-ifisWindowsPlatform(node.host.Platform) classwindows icon>/i> i v-else-ifgetFontLogoClass(node.host.Platform) && node.stateuptime > 0 classfl-tux>/i> i v-else :classfl- + getFontLogoClass(node.host.Platform)>/i> span classnode-cell-os-text>@#getPlatformName(node.os)#@/span> /td> td styletext-align: center; classnode-cell location> i :classfi fi- + node.location>/i> span classnode-cell-location-text text-uppercase>@#node.location#@/span> /td> td styletext-align: center; classnode-cell uptime>@#node.uptime#@/td> td styletext-align: center; classnode-cell load>@#node.load#@/td> td styletext-align: center; classnode-cell network>@#node.network#@/td> td styletext-align: center; classnode-cell traffic>@#node.traffic#@/td> td classnode-cell cpu> div :classprogress, node.online ? progress-online : progress-offline> div :stylenode.cpu.style :classnode.cpu.class>small>@#node.cpu.percent#@%/small> /div> /div> /td> td classnode-cell memory> div :classprogress, node.online ? progress-online : progress-offline> div :stylenode.memory.style :classnode.memory.class> small>@#node.memory.percent#@%/small> /div> /div> /td> td classnode-cell hdd> div :classprogress, node.online ? progress-online : progress-offline> div :stylenode.hdd.style :classnode.hdd.class>small>@#node.hdd.percent#@%/small> /div> /div> /td> /tr> tr classexpandRow :classindex % 2 0 ? odd: even> td colspan16> div classaccordian-body collapse :idrt+node.ID> div styledisplay: flex;left-items: center;justify-content: center;flex-direction: column; max-width: 89vw> span classnode-cell-expand> span classnode-cell-expand-label>系统:/span> @#node.host.Platform#@-@#node.host.PlatformVersion#@ span v-ifnode.host.Virtualization>@#node.host.Virtualization#@:/span>@#node.host.Arch#@ /span> span classnode-cell-expand v-ifnode.host.CPU> span classnode-cell-expand-label>CPU:/span> @#node.host.CPU.join(,)#@ (@#node.cpu.percent#@%) /span> span classnode-cell-expand v-ifnode.host.GPU> span classnode-cell-expand-label>GPU:/span> @#node.host.GPU.join(,)#@ (@#parseInt(node.state.GPU >0 ? node.state.GPU : 0)#@%) /span> span classnode-cell-expand> span classnode-cell-expand-label>硬盘:/span> @#formatByteSize(node.state.DiskUsed)#@ / @#formatByteSize(node.host.DiskTotal)#@ (@#node.hdd.percent#@%) /span> span classnode-cell-expand> span classnode-cell-expand-label>内存:/span> @#formatByteSize(node.state.MemUsed)#@ / @#formatByteSize(node.host.MemTotal)#@ (@#node.memory.percent#@%) /span> span v-ifnode.host.SwapTotal > 0 classnode-cell-expand> span classnode-cell-expand-label>交换:/span> @#formatByteSize(node.state.SwapUsed)#@ / @#formatByteSize(node.host.SwapTotal)#@ span>(@#toFixed2(node.state.SwapUsed / node.host.SwapTotal * 100)#@%)/span> /span> span v-else classnode-cell-expand> span classnode-cell-expand-label>交换: OFF/span> /span> span classnode-cell-expand> span classnode-cell-expand-label>流量:/span> i classarrow alternate circle down outline icon stylemargin: 0>/i>@#formatByteSize(node.state.NetInTransfer)#@ i classarrow alternate circle up outline icon stylemargin: 0>/i>@#formatByteSize(node.state.NetOutTransfer)#@ /span> span classnode-cell-expand load> span classnode-cell-expand-label>负载:/span> @#toFixed2(node.state.Load1)#@ / @#toFixed2(node.state.Load5)#@ / @#toFixed2(node.state.Load15)#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>进程数:/span> @#node.state.ProcessCount#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>连接数:/span> TCP @#node.state.TcpConnCount#@ / UDP @#node.state.UdpConnCount#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>启动:/span> @#formatTimestamp(node.host.BootTime)#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>活动:/span> @#new Date(node.lastActive).toLocaleString()#@ /span> span classnode-cell-expand> span classnode-cell-expand-label>在线:/span> @#node.uptime#@ /span> span v-ifnode.state.Temperatures && getTemperature(node.state.Temperatures, sensorList) > 0 @clicktoggleDetailedTemp(node.ID) classnode-cell-expand temp-detail :id`temp-${node.ID}` temp-detail-show0> span classnode-cell-expand-label>温度:/span> span :id`temp-main-${node.ID}` classnode-cell-expand-label> @#getTemperature(node.state.Temperatures, sensorList)#@°C i classbi bi-chevron-double-down>/i> /span> span :id`temp-detail-${node.ID}` classnode-cell-expand-label styledisplay:none> span v-fortemp in node.state.Temperatures :keytemp.Name v-iftemp.Temperature ! 0> @#temp.Name#@ : @#temp.Temperature#@°C /span> i classbi bi-chevron-double-up>/i> /span> /span> span classnode-cell-expand> span classnode-cell-expand-label>版本:/span> @#node.host.Version#@ /span> span classnode-echarts-expand> div classchartbox chartbox-show0 :keynode.ID :ref`chart${node.ID}` stylewidth: 100%; height: auto;>/div> /span> /div> /div> /td> /tr> /template> /tbody>/table> /section> /template> div classmodal fade idmapChartBox tabindex-1 roledialog aria-labelledbymapChartTitle aria-hiddentrue> div classmodal-dialog modal-lg modal-dialog-centered> div classmodal-content> div classmodal-header> h4 classmodal-title idmapChartTitle>服务器世界分布图/h4> i classbi bi-x data-dismissmodal aria-labelClose>/i> /div> div classmodal-body> div idmapChart stylewidth:100%;height:auto;>/div> /div> /div> /div> /div> footer> p>监控面板 | Theme ServerStatus | Powered by a target_blank hrefhttps://github.com/naiba/nezha>哪吒监控/a> v0.18.6/p>/footer>aside classtoolbox> span v-ifpageindex && countryMapChartData.length!0 classshowMapChart> i @clickshowMapChart data-togglemodal data-target#mapChartBox classbi bi-geo-alt>/i> /span> span classtoggleView> i v-ifshowGroup @clicktoggleShowGroup classshow-nogroup bi bi-justify>/i> i v-else @clicktoggleShowGroup classshow-group bi bi-view-stacked>/i> /span> span classsetTheme> i v-iftheme light @clicksetTheme(dark) classsetTheme-dark bi bi-moon-fill>/i> i v-else @clicksetTheme(light) classsetTheme-light bi bi-brightness-high-fill>/i> /span> span v-ifshowGoTop classshowGoTop> i @clickgoTop classgoTop bi bi-arrow-up>/i> /span>/aside>/div>script> new Vue({ el: #app, delimiters: @#, #@, data: { page: index, defaultTemplate: server-status, templates: {angel-kanade:AngelKanade,custom:Custom(local),daynight:JackieSung DayNight,default:Default,hotaru:Hotaru,mdui:Neko Mdui,server-status:ServerStatus}, cache: , servers: , nodesTag: , nodesNoTag: , chartDataList: , ws: null, language: zh-CN, countryMap: {}, countryServer: , countryNameMap: {}, countryMapChartData: , countryMapGeoFile: localStorage.getItem(countryMapGeoFile) ? localStorage.getItem(countryMapGeoFile) : nezha.world.geo.json, sensorList: TC0D, TC0H, TC0P, k10temp, k10temp_tctl, coretemp_package_id_0, cpu_thermal_zone, cpu-thermal, soc_thermal, cpu_thermal, ACPI\\ThermalZone\\TZ0__0, ACPI\\ThermalZone\\CPUZ_0, ACPI\\ThermalZone\\TZ00_0, ACPI\\ThermalZone\\TZ001_0, ACPI\\ThermalZone\\THM0_0 }, mixins: mixinsVue, created() { this.servers JSON.parse({\u0022now\u0022:1764646790000,\u0022servers\u0022:{\u0022ID\u0022:1,\u0022CreatedAt\u0022:\u00222021-09-20T17:39:50.520549961\u002b08:00\u0022,\u0022UpdatedAt\u0022:\u00222023-04-15T18:04:53.501309941\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022netcup\u0022,\u0022Tag\u0022:\u0022europe\u0022,\u0022DisplayIndex\u0022:100,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002212.6\u0022,\u0022CPU\u0022:\u0022AMD EPYC-Rome Processor 4 Virtual Core\u0022,\u0022MemTotal\u0022:8339038208,\u0022DiskTotal\u0022:540950134784,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:1748248203,\u0022CountryCode\u0022:\u0022de\u0022,\u0022Version\u0022:\u00220.20.5\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:82.93736501080356,\u0022MemUsed\u0022:809783296,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:517926621184,\u0022NetInTransfer\u0022:991454585,\u0022NetOutTransfer\u0022:51651772,\u0022NetInSpeed\u0022:225581,\u0022NetOutSpeed\u0022:211781,\u0022Uptime\u0022:364,\u0022Load1\u0022:5,\u0022Load5\u0022:3.51,\u0022Load15\u0022:1.61,\u0022TcpConnCount\u0022:3616,\u0022UdpConnCount\u0022:7,\u0022ProcessCount\u0022:128,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222025-05-26T16:36:07.987486233\u002b08:00\u0022},{\u0022ID\u0022:3,\u0022CreatedAt\u0022:\u00220001-01-01T00:00:00Z\u0022,\u0022UpdatedAt\u0022:\u00222023-04-16T20:42:08.029941582\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022BWG\u0022,\u0022Tag\u0022:\u0022US\u0022,\u0022DisplayIndex\u0022:90,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022ubuntu\u0022,\u0022PlatformVersion\u0022:\u002218.04\u0022,\u0022CPU\u0022:\u0022QEMU Virtual CPU version (cpu64-rhel6) 1 Virtual Core\u0022,\u0022MemTotal\u0022:526004224,\u0022DiskTotal\u0022:10483665920,\u0022SwapTotal\u0022:138407936,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022kvm\u0022,\u0022BootTime\u0022:1738743170,\u0022CountryCode\u0022:\u0022us\u0022,\u0022Version\u0022:\u00220.20.5\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0,\u0022MemUsed\u0022:202133504,\u0022SwapUsed\u0022:138379264,\u0022DiskUsed\u0022:8547545088,\u0022NetInTransfer\u0022:234047521583,\u0022NetOutTransfer\u0022:223202792249,\u0022NetInSpeed\u0022:245,\u0022NetOutSpeed\u0022:547,\u0022Uptime\u0022:25903619,\u0022Load1\u0022:0,\u0022Load5\u0022:0.01,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:89,\u0022UdpConnCount\u0022:4,\u0022ProcessCount\u0022:107,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222025-12-02T11:39:49.991979401\u002b08:00\u0022},{\u0022ID\u0022:4,\u0022CreatedAt\u0022:\u00222023-04-15T18:09:02.940189127\u002b08:00\u0022,\u0022UpdatedAt\u0022:\u00222023-08-20T15:50:57.81853287\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Tencent\u0022,\u0022Tag\u0022:\u0022CN\u0022,\u0022DisplayIndex\u0022:10,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022ubuntu\u0022,\u0022PlatformVersion\u0022:\u002218.04\u0022,\u0022CPU\u0022:\u0022Intel(R) Xeon(R) CPU E5-26xx v4 1 Virtual Core\u0022,\u0022MemTotal\u0022:1026633728,\u0022DiskTotal\u0022:26354073600,\u0022SwapTotal\u0022:1073737728,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:1746323659,\u0022CountryCode\u0022:\u0022hk\u0022,\u0022Version\u0022:\u00220.20.5\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:6.896551729674927,\u0022MemUsed\u0022:920453120,\u0022SwapUsed\u0022:520019968,\u0022DiskUsed\u0022:11680448512,\u0022NetInTransfer\u0022:111248534874,\u0022NetOutTransfer\u0022:114469440816,\u0022NetInSpeed\u0022:162669,\u0022NetOutSpeed\u0022:164360,\u0022Uptime\u0022:1984315,\u0022Load1\u0022:0.01,\u0022Load5\u0022:0.05,\u0022Load15\u0022:0.05,\u0022TcpConnCount\u0022:7496,\u0022UdpConnCount\u0022:6,\u0022ProcessCount\u0022:125,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222025-05-27T09:06:14.881646445\u002b08:00\u0022},{\u0022ID\u0022:5,\u0022CreatedAt\u0022:\u00222023-04-15T19:27:08.103458944\u002b08:00\u0022,\u0022UpdatedAt\u0022:\u00222023-04-15T19:27:08.103458944\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Oracle-Phoenix-1\u0022,\u0022Tag\u0022:\u0022US\u0022,\u0022DisplayIndex\u0022:10,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022\u0022,\u0022PlatformVersion\u0022:\u0022\u0022,\u0022CPU\u0022:null,\u0022MemTotal\u0022:0,\u0022DiskTotal\u0022:0,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:0,\u0022CountryCode\u0022:\u0022\u0022,\u0022Version\u0022:\u0022\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0,\u0022MemUsed\u0022:0,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:0,\u0022NetInTransfer\u0022:0,\u0022NetOutTransfer\u0022:0,\u0022NetInSpeed\u0022:0,\u0022NetOutSpeed\u0022:0,\u0022Uptime\u0022:0,\u0022Load1\u0022:0,\u0022Load5\u0022:0,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:0,\u0022UdpConnCount\u0022:0,\u0022ProcessCount\u0022:0,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00220001-01-01T00:00:00Z\u0022},{\u0022ID\u0022:6,\u0022CreatedAt\u0022:\u00222023-04-15T19:28:15.592106753\u002b08:00\u0022,\u0022UpdatedAt\u0022:\u00222023-04-15T19:28:15.592106753\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Oracle-Phoenix-2\u0022,\u0022Tag\u0022:\u0022US\u0022,\u0022DisplayIndex\u0022:10,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022\u0022,\u0022PlatformVersion\u0022:\u0022\u0022,\u0022CPU\u0022:null,\u0022MemTotal\u0022:0,\u0022DiskTotal\u0022:0,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:0,\u0022CountryCode\u0022:\u0022\u0022,\u0022Version\u0022:\u0022\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0,\u0022MemUsed\u0022:0,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:0,\u0022NetInTransfer\u0022:0,\u0022NetOutTransfer\u0022:0,\u0022NetInSpeed\u0022:0,\u0022NetOutSpeed\u0022:0,\u0022Uptime\u0022:0,\u0022Load1\u0022:0,\u0022Load5\u0022:0,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:0,\u0022UdpConnCount\u0022:0,\u0022ProcessCount\u0022:0,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00220001-01-01T00:00:00Z\u0022},{\u0022ID\u0022:7,\u0022CreatedAt\u0022:\u00222023-04-16T20:47:09.280493433\u002b08:00\u0022,\u0022UpdatedAt\u0022:\u00222023-04-16T20:49:46.035100568\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022virmach-2222\u0022,\u0022Tag\u0022:\u0022US\u0022,\u0022DisplayIndex\u0022:10,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022\u0022,\u0022PlatformVersion\u0022:\u0022\u0022,\u0022CPU\u0022:null,\u0022MemTotal\u0022:0,\u0022DiskTotal\u0022:0,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:0,\u0022CountryCode\u0022:\u0022\u0022,\u0022Version\u0022:\u0022\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0,\u0022MemUsed\u0022:0,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:0,\u0022NetInTransfer\u0022:0,\u0022NetOutTransfer\u0022:0,\u0022NetInSpeed\u0022:0,\u0022NetOutSpeed\u0022:0,\u0022Uptime\u0022:0,\u0022Load1\u0022:0,\u0022Load5\u0022:0,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:0,\u0022UdpConnCount\u0022:0,\u0022ProcessCount\u0022:0,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00220001-01-01T00:00:00Z\u0022},{\u0022ID\u0022:8,\u0022CreatedAt\u0022:\u00222023-04-16T21:28:39.974912253\u002b08:00\u0022,\u0022UpdatedAt\u0022:\u00222023-04-16T21:28:39.974912253\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022virmach-sj-0.87\u0022,\u0022Tag\u0022:\u0022US\u0022,\u0022DisplayIndex\u0022:10,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022\u0022,\u0022PlatformVersion\u0022:\u0022\u0022,\u0022CPU\u0022:null,\u0022MemTotal\u0022:0,\u0022DiskTotal\u0022:0,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:0,\u0022CountryCode\u0022:\u0022\u0022,\u0022Version\u0022:\u0022\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0,\u0022MemUsed\u0022:0,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:0,\u0022NetInTransfer\u0022:0,\u0022NetOutTransfer\u0022:0,\u0022NetInSpeed\u0022:0,\u0022NetOutSpeed\u0022:0,\u0022Uptime\u0022:0,\u0022Load1\u0022:0,\u0022Load5\u0022:0,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:0,\u0022UdpConnCount\u0022:0,\u0022ProcessCount\u0022:0,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00220001-01-01T00:00:00Z\u0022},{\u0022ID\u0022:9,\u0022CreatedAt\u0022:\u00222023-08-25T00:17:02.807613785\u002b08:00\u0022,\u0022UpdatedAt\u0022:\u00222023-08-25T00:17:15.948875811\u002b08:00\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Z4\u0022,\u0022Tag\u0022:\u0022CN\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022EnableIPv4\u0022:false,\u0022EnableIpv6\u0022:false,\u0022DDNSDomain\u0022:\u0022redacted\u0022,\u0022DDNSProfile\u0022:\u0022\u0022,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002211.8\u0022,\u0022CPU\u0022:\u0022Intel(R) Celeron(R) J4125 CPU @ 2.00GHz 4 Virtual Core\u0022,\u0022MemTotal\u0022:8164302848,\u0022DiskTotal\u0022:998438670336,\u0022SwapTotal\u0022:7300165632,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022docker\u0022,\u0022BootTime\u0022:1762917891,\u0022CountryCode\u0022:\u0022\u0022,\u0022Version\u0022:\u00220.15.10\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:9.83981692333615,\u0022MemUsed\u0022:5743501312,\u0022SwapUsed\u0022:3080208384,\u0022DiskUsed\u0022:109081550848,\u0022NetInTransfer\u0022:103157487,\u0022NetOutTransfer\u0022:192321424,\u0022NetInSpeed\u0022:108,\u0022NetOutSpeed\u0022:215,\u0022Uptime\u0022:1728899,\u0022Load1\u0022:1.14,\u0022Load5\u0022:1.11,\u0022Load15\u0022:1.16,\u0022TcpConnCount\u0022:1,\u0022UdpConnCount\u0022:0,\u0022ProcessCount\u0022:2,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222025-12-02T11:39:50.116332663\u002b08:00\u0022}}).servers; if(this.showGroup) { this.nodesTag this.groupingData(this.handleNodes(this.servers),Tag); } else { this.nodesNoTag this.handleNodes(this.servers); } this.initCountryMap().then(countryMap > { this.countryMap countryMap; this.countryNameMap this.initCountryNameMap(); this.countryServer this.initCountryServer(); this.countryMapChartData this.initCountryMapChartData(); }) }, mounted() { this.connect(); document.addEventListener(visibilitychange, () > { if (document.visibilityState visible) { setTimeout(() > { if (document.hasFocus()) { this.connect(); } }, 200); } }); }, methods: { initCountryMap() { return fetch(this.staticUrl + /maps/nezha.countrymap.json) .then(response > response.json()) .then(data > { return data; }) }, initCountryNameMap(){ const result {}; for (const item in this.countryMap) { resultthis.countryMapitem.en this.languagezh-CN ? this.countryMapitem.zh : this.countryMapitem.en; } return result; }, initCountryServer() { let count {}; let result ; let exist {}; this.servers.forEach(item > { if (item.Host.CountryCode) { if(this.countryMapGeoFile nezha.world.geo.json || this.countryMapGeoFile nezha.world.antarctica.geo.json) { if(item.Host.CountryCode.toLowerCase() tw || item.Host.CountryCode.toLowerCase() hk || item.Host.CountryCode.toLowerCase() mo) item.Host.CountryCode cn; } if (!existitem.Host.CountryCode) { existitem.Host.CountryCode true; countitem.Host.CountryCode 1; const obj { countryCode: item.Host.CountryCode, count: countitem.Host.CountryCode }; result.push(obj); } else { countitem.Host.CountryCode++; result.find(obj > obj.countryCode item.Host.CountryCode).count countitem.Host.CountryCode; } } }); return result; }, initCountryMapChartData(){ let result ; this.countryServer.forEach(item > { var obj { name: this.languagezh-CN ? this.countryMapitem.countryCode.zh : this.countryMapitem.countryCode.en, value: item.count } result.push(obj); }); return result; }, showMapChart(){ if( this.countryMapChartData.length 0 ) { console.log(init countryMapChartData not complete); return; } const unit this.languagezh-CN ? 台 : servers; const isMobile this.checkIsMobile(); const width isMobile ? 338 : 1102; const height isMobile ? 200 : 500; const backgroundColor this.theme dark ? : ; const inRangeColor this.theme dark ? #D2B206 : #FFDF32; const tooltipBackgroundColor this.theme dark ? #ffffff : #ffffff; const tooltipBorderColor this.theme dark ? #ffffff : #ffffff; const fontSize isMobile ? 10 : 12; const fontColor this.theme dark ? #000000 : #000000; const chartContainer document.getElementById(mapChart); const mapChart echarts.init(chartContainer, , { renderer: canvas, useDirtyRect: false, width: width, height: height, }); fetch(this.staticUrl + /maps/ + this.countryMapGeoFile) .then(response > response.json()) .then(worldMap > { echarts.registerMap(nezha-world-map, worldMap); const option { title: { show: false, }, backgroundColor: backgroundColor, grid: { top: 0, left: 10, right: 10 }, tooltip: { trigger: item, formatter: function (params) { if (params.data && params.data.value > 0) { return params.name + + params.data.value + + unit; } else { return ; } }, backgroundColor: tooltipBackgroundColor, borderColor: tooltipBorderColor, padding: 4,10, textStyle: { fontSize: fontSize, color: fontColor } }, visualMap: { show: false, min: 0, max: 1000, calculable: false, inRange: { color: inRangeColor } }, series: { type: map, map: nezha-world-map, roam: true, label: { show: false, fontSize: 8 }, data: this.countryMapChartData, nameMap: this.countryNameMap, } }; mapChart.setOption(option); }); }, isWindowsPlatform(str) { return str.includes(Windows) }, getPlatformName(str){ if (str.toLowerCase().includes(opensuse)) { return openSUSE; } return str; }, getFontLogoClass(str) { if (almalinux, alpine, aosc, apple, archlinux, archlabs, artix, budgie, centos, coreos, debian, deepin, devuan, docker, elementary, fedora, ferris, flathub, freebsd, gentoo, gnu-guix, illumos, kali-linux, linuxmint, mageia, mandriva, manjaro, nixos, openbsd, opensuse, pop-os, raspberry-pi, redhat, rocky-linux, sabayon, slackware, snappy, solus, tux, ubuntu, void, zorin.indexOf(str) > -1) { return str; } if (str darwin) { return apple; } if (openwrt, linux, immortalwrt.indexOf(str) > -1) { return tux; } if (str amazon) { return redhat; } if (str arch) { return archlinux; } if (str.toLowerCase().includes(opensuse)) { return opensuse; } return ; }, secondToDate(s) { const d Math.floor(s / 3600 / 24); if (d > 0) { return d + 天 } const h Math.floor(s / 3600 % 24); const m Math.floor(s / 60 % 60); const second Math.floor(s % 60); return h + : + (0 + m).slice(-2) + : + (0 + second).slice(-2); }, formatTimestamp(t) { return new Date(t * 1000).toLocaleString() }, formatByteSize(bs) { const x this.readableBytes(bs) return x ! NaN undefined ? x : 0B }, formatPercent(live, used, total) { const percent (this.toFixed2(used / total * 100) || 0) return this.formatPercents(live,percent) }, formatPercents(live,percent) { if (isNaN(percent)) { percent 0; } if (percent 0) { percent 0; } if (percent > 100) { percent 100; } if (!this.cachepercent) { this.cachepercent { class: progress-bar progress-bar-success, style: `width: ${parseInt(percent)+1}%`, percent, } if (percent 80) { this.cachepercent.class progress-bar progress-bar-success } else if (percent 90) { this.cachepercent.class progress-bar progress-bar-warning } else { this.cachepercent.class progress-bar progress-bar-danger } } return this.cachepercent }, readableBytes(bytes) { if (!bytes) { return 0B } const i Math.floor(Math.log(bytes) / Math.log(1024)), sizes B, K, M, G, T, P, E, Z, Y; return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + sizesi; }, connect() { if (this.ws && this.ws.readyState WebSocket.OPEN) { console.log(Closing old WebSocket connection...); this.ws.close(); } const wsProtocol window.location.protocol https: ? wss : ws; this.ws new WebSocket(wsProtocol + :// + window.location.host + /ws); this.ws.onopen function () { console.log(Connection open ...) } this.ws.onmessage (evt) > { let jsonData evt.data const data JSON.parse(jsonData) for (let i 0; i data.servers?.length; i++) { const ns data.serversi; if (!ns.Host) { data.serversi.live false } else { const lastActive new Date(ns.LastActive).getTime() data.serversi.live data.now - lastActive 10 * 1000; } } if(this.showGroup) { this.nodesTag this.groupingData(this.handleNodes(data.servers),Tag); } else { this.nodesNoTag this.handleNodes(data.servers); } } this.ws.onclose () > { setTimeout(() > { this.connect(); }, 5000); }; this.ws.onerror () > { this.ws.close() } }, handleNodes(servers) { let nodes servers?.forEach(server > { let platform server.Host.Platform; if (this.isWindowsPlatform(platform)) { platform windows }else if (platform immortalwrt) { platform openwrt } let node { ID: server.ID, name: server.Name, os: platform, location: server.Host.CountryCode, stateuptime: server.State.Uptime, uptime: this.secondToDate(server.State.Uptime), load: this.toFixed2(server.State.Load1), network: this.getNetworkSpeed(server.State.NetInSpeed, server.State.NetOutSpeed), traffic: this.formatByteSize(server.State.NetInTransfer) + | + this.formatByteSize(server.State.NetOutTransfer), cpu: this.formatPercents(server.live, this.toFixed2(server.State.CPU)), memory: this.formatPercent(server.live, server.State.MemUsed, server.Host.MemTotal), hdd: this.formatPercent(server.live, server.State.DiskUsed, server.Host.DiskTotal), online: server.live, state: server.State, host: server.Host, lastActive: server.LastActive, Tag: server.Tag, } nodes.push(node) }) return nodes; }, getNetworkSpeed(netInSpeed, netOutSpeed) { return this.formatByteSize(netInSpeed) + | + this.formatByteSize(netOutSpeed) }, toggleDetailedTemp(id){ const tempDom document.getElementById(`temp-${id}`); const tempDetailShow tempDom.getAttribute(temp-detail-show); const tempMain document.getElementById(`temp-main-${id}`); const tempDetail document.getElementById(`temp-detail-${id}`); if (tempDetailShow 0){ tempMain.style.display none; tempDetail.style.display inline; tempDom.setAttribute(temp-detail-show, 1); } else { tempMain.style.display inline; tempDetail.style.display none; tempDom.setAttribute(temp-detail-show, 0); } }, getTemperature(temperatureList, sensorList) { const lowerCaseSensorList sensorList.map(sensor > sensor.toLowerCase()); const filtered temperatureList.filter(item > item.Temperature ! 0 && lowerCaseSensorList.includes(item.Name.toLowerCase())); if (filtered.length > 0) { return filtered.reduce((max, current) > { return current.Temperature > max ? current.Temperature : max; }, filtered0.Temperature); } const nonZeroTemps temperatureList.filter(item > item.Temperature ! 0); if (nonZeroTemps.length > 0) { return nonZeroTemps.reduce((max, current) > { return current.Temperature > max ? current.Temperature : max; }, nonZeroTemps0.Temperature); } return 0; }, showCharts(event, id) { const chartContainer this.$refs`chart${id}`0; const chartboxShow chartContainer.getAttribute(chartbox-show); chartContainer.setAttribute(chartbox-show, chartboxShow 0 ? 1 : 0); const isAriaExpandedFalse event.currentTarget.getAttribute(aria-expanded) false; if (!isAriaExpandedFalse) return; const url `/api/v1/monitor/${id}`; fetch(url) .then(response > response.json()) .then(data > { if (data.result) { this.chartDataListid - 1 data.result; this.$nextTick(() > { this.renderCharts(id); }); } else { console.log(this agent (id:+ id + ) has no monitor.); } }) .catch(error > { console.error(Error fetching data:, error); }); }, renderCharts(id, reload false) { if (!this.chartDataListid - 1) return; const chartData this.chartDataListid - 1; const chartContainer this.$refs`chart${id}`0; if (reload) { const existingChart echarts.getInstanceByDom(chartContainer); if (existingChart) existingChart.dispose(); const chartboxShow chartContainer.getAttribute(chartbox-show); if ( chartboxShow 0 ) return; } const MaxTCPPingValue 1000 ? 1000 : 300; const isMobile this.checkIsMobile(); const fontSize isMobile ? 10 : 14; const gridLeft isMobile ? 25 : 36; const gridRight isMobile ? 5 : 20; const legendLeft isMobile ? center : center; const legendTop isMobile ? 5 : 5; const legendPadding isMobile ? 5,0,5,0 : 5,0,5,0; const systemDarkMode window.matchMedia((prefers-color-scheme: dark)).matches ? dark : light; const theme localStorage.getItem(theme) ? localStorage.getItem(theme) : systemDarkMode; const chartTheme theme dark ? dark : default; const fontColor theme dark ? #f1f1f1 : #000000; const backgroundColor theme dark ? : ; const tooltipBackgroundColor theme dark ? #1C1D26 : #ffffff; const tooltipBorderColor theme dark ? #31363B : #ffffff; const chart echarts.init(chartContainer, chartTheme, { renderer: canvas, useDirtyRect: false, width: auto, height: 300, }); const xAxisData chartData0.created_at.map(time > new Date(time).toLocaleString()); const seriesData chartData.map(item > { let loss 0; const data item.avg_delay.map((avgDelay, index) > { if(avgDelay > 0 && avgDelay MaxTCPPingValue){ loss + avgDelay > 0.9 * MaxTCPPingValue ? 1 : 0; return item.created_atindex, avgDelay.toFixed(2); }else{ loss + 1; } }); const lossRate ((loss / item.created_at.length) * 100).toFixed(1); item.monitor_name item.monitor_name.includes(%) ? item.monitor_name : `${item.monitor_name} ${lossRate}%`; return { name: item.monitor_name, type: line, smooth: true, symbol: none, data: data, connectNulls: true }; }); const legendData chartData.map(item > item.monitor_name); const maxLegendsPerRowMobile localStorage.getItem(maxLegendsPerRowMobile) ? localStorage.getItem(maxLegendsPerRowMobile) : 3; const maxLegendsPerRowPc localStorage.getItem(maxLegendsPerRowPc) ? localStorage.getItem(maxLegendsPerRowPc) : 6; const autoIncrement Math.floor((legendData.length - 1) / (isMobile ? maxLegendsPerRowMobile : maxLegendsPerRowPc)) * (isMobile ? 20 : 28) const height 300 + autoIncrement; const gridTop 40 + autoIncrement; const legendIcon isMobile ? rect : ; const itemWidth isMobile ? 10 : 25; const itemHeight isMobile ? 10 : 14; chart.resize({ width: auto, height: height }); const option { backgroundColor: backgroundColor, title: { show: false }, tooltip: { trigger: axis, backgroundColor: tooltipBackgroundColor, borderColor: tooltipBorderColor, textStyle: { fontSize: fontSize, color: fontColor } }, legend: { data: legendData, show: true, icon: legendIcon, textStyle: { fontSize: fontSize, color: fontColor }, top: legendTop, bottom: 0, left: legendLeft, padding: legendPadding, itemWidth: itemWidth, itemHeight: itemHeight, }, xAxis: { type: time, data: xAxisData, axisLabel: { textStyle: { fontSize: fontSize } } }, yAxis: { type: value, axisLabel: { textStyle: { fontSize: fontSize } } }, dataZoom: { type: slider, start: 0, end: 100 } , series: seriesData, textStyle: { fontSize: fontSize, color: fontColor }, grid: { top: gridTop, left: gridLeft, right: gridRight } }; chart.setOption(option); }, reloadCharts() { this.servers.forEach(node > { const id node.ID; const chartData this.chartDataListid - 1; if (chartData) { this.renderCharts(id,true); } }); } } })/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]