Compare commits

...
6 Commits
Author SHA1 Message Date
xykt dbfea9a00b 对历史延迟图表进行了相关修复/美化工作 (#321)
* Update network.html

修复以下问题:
- 延迟默认最高300ms,超过后默认抹平
- 曲线上有很多ping值为0的无效散点,导致毛刺很多,干扰效果
- 图标的y轴比例失调,上方大片留白,大大降低了有效显示区域
- 默认只显示最近不到半小时左右的延迟表现,想看全天需要拖动,影响效果
- 曲线不显示极大极小值,不够直观

* Update config.go

修复了以下问题:
- 延迟默认最高300ms,超过后默认抹平
- 曲线上有很多ping值为0的无效散点,导致毛刺很多,干扰效果
- 图标的y轴比例失调,上方大片留白,大大降低了有效显示区域
- 默认只显示最近不到半小时左右的延迟表现,想看全天需要拖动,影响效果
- 曲线不显示极大极小值,不够直观
2024-02-19 13:52:43 +08:00
github-actions[bot] e8b208edfa update contributors[no ci] 2024-02-18 12:00:59 +00:00
Ko no dio 7d38634933 feat: add index on monitor history (#320) 2024-02-18 20:00:36 +08:00
github-actions[bot] 5bd4b57cbf update contributors[no ci] 2024-02-14 05:12:49 +00:00
Ko no dioandLvGJ fdb2fd8839 fix: revert service html and block service in backend (#318)
Co-authored-by: LvGJ <[email protected]>
2024-02-14 13:12:24 +08:00
github-actions[bot] f3fac9325c update contributors[no ci] 2024-02-13 15:09:58 +00:00
8 changed files with 39 additions and 28 deletions
+3 -3
View File
@@ -77,6 +77,9 @@ You can change the dashboard language in the settings page (`/setting`) after th
<a href="https://github.com/uubulb" title="UUBulb"> <a href="https://github.com/uubulb" title="UUBulb">
<img src="https://avatars.githubusercontent.com/u/35923940?v=4" width="50;" alt="UUBulb"/> <img src="https://avatars.githubusercontent.com/u/35923940?v=4" width="50;" alt="UUBulb"/>
</a> </a>
<a href="https://github.com/lvgj-stack" title="Ko no dio">
<img src="https://avatars.githubusercontent.com/u/38449861?v=4" width="50;" alt="Ko no dio"/>
</a>
<a href="https://github.com/hhhkkk520" title="Kris"> <a href="https://github.com/hhhkkk520" title="Kris">
<img src="https://avatars.githubusercontent.com/u/52115472?v=4" width="50;" alt="Kris"/> <img src="https://avatars.githubusercontent.com/u/52115472?v=4" width="50;" alt="Kris"/>
</a> </a>
@@ -140,9 +143,6 @@ You can change the dashboard language in the settings page (`/setting`) after th
<a href="https://github.com/KorenKrita" title="KorenKrita"> <a href="https://github.com/KorenKrita" title="KorenKrita">
<img src="https://avatars.githubusercontent.com/u/22239339?v=4" width="50;" alt="KorenKrita"/> <img src="https://avatars.githubusercontent.com/u/22239339?v=4" width="50;" alt="KorenKrita"/>
</a> </a>
<a href="https://github.com/lvgj-stack" title="Ko no dio">
<img src="https://avatars.githubusercontent.com/u/38449861?v=4" width="50;" alt="Ko no dio"/>
</a>
<a href="https://github.com/techotaku" title="Ian Li"> <a href="https://github.com/techotaku" title="Ian Li">
<img src="https://avatars.githubusercontent.com/u/1948179?v=4" width="50;" alt="Ian Li"/> <img src="https://avatars.githubusercontent.com/u/1948179?v=4" width="50;" alt="Ian Li"/>
</a> </a>
+5
View File
@@ -118,6 +118,11 @@ func (p *commonPage) service(c *gin.Context) {
var statsStore map[uint64]model.CycleTransferStats var statsStore map[uint64]model.CycleTransferStats
copier.Copy(&stats, singleton.ServiceSentinelShared.LoadStats()) copier.Copy(&stats, singleton.ServiceSentinelShared.LoadStats())
copier.Copy(&statsStore, singleton.AlertsCycleTransferStatsStore) copier.Copy(&statsStore, singleton.AlertsCycleTransferStatsStore)
for k, service := range stats {
if !service.Monitor.EnableShowInService {
delete(stats, k)
}
}
return []interface { return []interface {
}{ }{
stats, statsStore, stats, statsStore,
+1 -1
View File
@@ -147,7 +147,7 @@ func (c *Config) Read(path string) error {
c.Location = "Asia/Shanghai" c.Location = "Asia/Shanghai"
} }
if c.MaxTCPPingValue == 0 { if c.MaxTCPPingValue == 0 {
c.MaxTCPPingValue = 300 c.MaxTCPPingValue = 1000
} }
if c.AvgPingCount == 0 { if c.AvgPingCount == 0 {
c.AvgPingCount = 2 c.AvgPingCount = 2
+14 -12
View File
@@ -1,20 +1,22 @@
package model package model
const ( import (
Cycle = iota "time"
Hour
Day "gorm.io/gorm"
Week
Month
) )
// MonitorHistory 历史监控记录 // MonitorHistory 历史监控记录
type MonitorHistory struct { type MonitorHistory struct {
Common ID uint64 `gorm:"primaryKey"`
MonitorID uint64 CreatedAt time.Time `gorm:"index;<-:create;index:idx_server_id_created_at_monitor_id_avg_delay"`
ServerID uint64 UpdatedAt time.Time `gorm:"autoUpdateTime"`
AvgDelay float32 // 平均延迟,毫秒 DeletedAt gorm.DeletedAt `gorm:"index"`
Up uint64 // 检查状态良好计数 MonitorID uint64 `gorm:"index:idx_server_id_created_at_monitor_id_avg_delay"`
Down uint64 // 检查状态异常计数 ServerID uint64 `gorm:"index:idx_server_id_created_at_monitor_id_avg_delay"`
AvgDelay float32 `gorm:"index:idx_server_id_created_at_monitor_id_avg_delay"` // 平均延迟,毫秒
Up uint64 // 检查状态良好计数
Down uint64 // 检查状态异常计数
Data string Data string
} }
-2
View File
@@ -61,7 +61,6 @@
</section> </section>
<section class="monitor-container"> <section class="monitor-container">
{{range $service := .Services}} {{range $service := .Services}}
{{if $service.Monitor.EnableShowInService}}
<section class="monitor-info-container"> <section class="monitor-info-container">
<div class="monitor-state"> <div class="monitor-state">
<span class="monitor-state-dot {{className (divU64 $service.CurrentUp (addU64 $service.CurrentUp $service.CurrentDown))}}"></span> <span class="monitor-state-dot {{className (divU64 $service.CurrentUp (addU64 $service.CurrentUp $service.CurrentDown))}}"></span>
@@ -83,7 +82,6 @@
</div> </div>
</section> </section>
{{end}} {{end}}
{{end}}
</section> </section>
{{if .CycleTransferStats}} {{if .CycleTransferStats}}
<h2 class="mdui-m-t-5 mdui-text-center">{{tr "CycleTransferStats"}}</h2> <h2 class="mdui-m-t-5 mdui-text-center">{{tr "CycleTransferStats"}}</h2>
+14 -6
View File
@@ -30,7 +30,7 @@
const initData = JSON.parse('{{.Servers}}').servers; const initData = JSON.parse('{{.Servers}}').servers;
let MaxTCPPingValue = {{.MaxTCPPingValue}}; let MaxTCPPingValue = {{.MaxTCPPingValue}};
if (MaxTCPPingValue == null) { if (MaxTCPPingValue == null) {
MaxTCPPingValue = 300; MaxTCPPingValue = 1000;
} }
new Vue({ new Vue({
el: '#app', el: '#app',
@@ -77,7 +77,7 @@
}, },
dataZoom: [ dataZoom: [
{ {
start: 94, start: 0,
end: 100 end: 100
} }
], ],
@@ -87,7 +87,7 @@
}, },
yAxis: { yAxis: {
type: 'value', type: 'value',
boundaryGap: [0, '100%'] boundaryGap: false
}, },
series: [], series: [],
}, },
@@ -178,11 +178,13 @@
let loss = 0; let loss = 0;
let data = []; let data = [];
for (let j = 0; j < monitorInfo.result[i].created_at.length; j++) { for (let j = 0; j < monitorInfo.result[i].created_at.length; j++) {
avgDelay = monitorInfo.result[i].avg_delay[j]; avgDelay = Math.round(monitorInfo.result[i].avg_delay[j]);
if (avgDelay > 0.9 * MaxTCPPingValue) { if (avgDelay > 0.9 * MaxTCPPingValue) {
loss += 1 loss += 1
} }
data.push([monitorInfo.result[i].created_at[j], avgDelay]); if (avgDelay > 0) {
data.push([monitorInfo.result[i].created_at[j], avgDelay]);
}
} }
lossRate = ((loss / monitorInfo.result[i].created_at.length) * 100).toFixed(1); lossRate = ((loss / monitorInfo.result[i].created_at.length) * 100).toFixed(1);
legendName = monitorInfo.result[i].monitor_name +" "+ lossRate + "%"; legendName = monitorInfo.result[i].monitor_name +" "+ lossRate + "%";
@@ -192,7 +194,13 @@
type: 'line', type: 'line',
smooth: true, smooth: true,
symbol: 'none', symbol: 'none',
data: data data: data,
markPoint: {
data: [
{ type: 'max', symbol: 'pin', name: 'Max', itemStyle: { color: '#f00' } },
{ type: 'min', symbol: 'pin', name: 'Min', itemStyle: { color: '#0f0' } }
]
}
}); });
} }
this.option.title.text = monitorInfo.result[0].server_name; this.option.title.text = monitorInfo.result[0].server_name;
+1 -2
View File
@@ -18,7 +18,6 @@
</thead> </thead>
<tbody> <tbody>
{{range $service := .Services}} {{range $service := .Services}}
{{if $service.Monitor.EnableShowInService}}
<tr> <tr>
<td class="ui center aligned">{{$service.Monitor.Name}}</td> <td class="ui center aligned">{{$service.Monitor.Name}}</td>
<td class="ui center aligned"> <td class="ui center aligned">
@@ -34,7 +33,7 @@
class="delay-today {{className (divU64 $service.CurrentUp (addU64 $service.CurrentUp $service.CurrentDown))}}"></i> class="delay-today {{className (divU64 $service.CurrentUp (addU64 $service.CurrentUp $service.CurrentDown))}}"></i>
{{statusName (divU64 $service.CurrentUp (addU64 $service.CurrentUp $service.CurrentDown))}} {{statusName (divU64 $service.CurrentUp (addU64 $service.CurrentUp $service.CurrentDown))}}
</td> </td>
</tr> {{end}} {{end}} </tr> {{end}}
</tbody> </tbody>
</table> </table>
+1 -2
View File
@@ -15,7 +15,7 @@
</thead> </thead>
<tbody id="servers"> <tbody id="servers">
<template v-for="service in services"> <template v-for="service in services">
<tr v-if="service.enableShow === 'true'"> <tr>
<td class="node-cell center"> <td class="node-cell center">
<div class="delay-today"> <div class="delay-today">
<i class="delay-today" :class="service.health.className"></i> <i class="delay-today" :class="service.health.className"></i>
@@ -137,7 +137,6 @@
delay: '{{$service.Delay}}'.replaceAll("[","").replaceAll("]","").split(" "), delay: '{{$service.Delay}}'.replaceAll("[","").replaceAll("]","").split(" "),
up: '{{$service.Up}}'.replaceAll("[","").replaceAll("]","").split(" "), up: '{{$service.Up}}'.replaceAll("[","").replaceAll("]","").split(" "),
down: '{{$service.Down}}'.replaceAll("[","").replaceAll("]","").split(" "), down: '{{$service.Down}}'.replaceAll("[","").replaceAll("]","").split(" "),
enableShow: '{{$service.Monitor.EnableShowInService}}',
}) })
{{end}} {{end}}
// @formatter:on // @formatter:on