forked from langhuihui/monibuca
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprometheus.go
88 lines (83 loc) · 4.75 KB
/
prometheus.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package m7s
import "github.com/prometheus/client_golang/prometheus"
type prometheusDesc struct {
CPUUsage *prometheus.Desc
Memory struct {
Total, Used, Usage, Free *prometheus.Desc
}
Disk struct {
Total, Used, Usage, Free *prometheus.Desc
}
Net struct {
SendSpeed, ReceiveSpeed *prometheus.Desc
}
BPS, FPS, StreamCount, SubscribeCount, PullCount, PushCount, RecordCount, TransformCount *prometheus.Desc
}
func (d *prometheusDesc) init() {
d.CPUUsage = prometheus.NewDesc("cpu_usage", "CPU usage", nil, nil)
d.Memory.Total = prometheus.NewDesc("memory_total", "Memory total", nil, nil)
d.Memory.Used = prometheus.NewDesc("memory_used", "Memory used", nil, nil)
d.Memory.Usage = prometheus.NewDesc("memory_usage", "Memory usage", nil, nil)
d.Memory.Free = prometheus.NewDesc("memory_free", "Memory free", nil, nil)
d.Disk.Total = prometheus.NewDesc("disk_total", "Disk total", nil, nil)
d.Disk.Used = prometheus.NewDesc("disk_used", "Disk used", nil, nil)
d.Disk.Usage = prometheus.NewDesc("disk_usage", "Disk usage", nil, nil)
d.Disk.Free = prometheus.NewDesc("disk_free", "Disk free", nil, nil)
d.Net.SendSpeed = prometheus.NewDesc("net_send_speed", "Net send speed", []string{"name"}, nil)
d.Net.ReceiveSpeed = prometheus.NewDesc("net_receive_speed", "Net receive speed", []string{"name"}, nil)
d.BPS = prometheus.NewDesc("bps", "Bytes Per Second", []string{"streamPath", "pluginName", "trackType"}, nil)
d.FPS = prometheus.NewDesc("fps", "Frames Per Second", []string{"streamPath", "pluginName", "trackType"}, nil)
d.StreamCount = prometheus.NewDesc("stream_count", "Stream count", nil, nil)
d.SubscribeCount = prometheus.NewDesc("subscribe_count", "Subscribe count", nil, nil)
d.PullCount = prometheus.NewDesc("pull_count", "Pull count", nil, nil)
d.PushCount = prometheus.NewDesc("push_count", "Push count", nil, nil)
d.RecordCount = prometheus.NewDesc("record_count", "Record count", nil, nil)
d.TransformCount = prometheus.NewDesc("transform_count", "Transform count", nil, nil)
}
func (s *Server) Describe(ch chan<- *prometheus.Desc) {
desc := s.prometheusDesc
ch <- desc.BPS
ch <- desc.FPS
ch <- desc.CPUUsage
ch <- desc.Memory.Total
ch <- desc.Memory.Used
ch <- desc.Memory.Usage
ch <- desc.Memory.Free
ch <- desc.Disk.Total
ch <- desc.Disk.Used
ch <- desc.Disk.Usage
ch <- desc.Disk.Free
ch <- desc.Net.SendSpeed
ch <- desc.StreamCount
ch <- desc.SubscribeCount
ch <- desc.PullCount
ch <- desc.PushCount
ch <- desc.RecordCount
ch <- desc.TransformCount
}
func (s *Server) Collect(ch chan<- prometheus.Metric) {
if s.lastSummary != nil {
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.CPUUsage, prometheus.GaugeValue, float64(s.lastSummary.CpuUsage))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Memory.Total, prometheus.GaugeValue, float64(s.lastSummary.Memory.Total))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Memory.Used, prometheus.GaugeValue, float64(s.lastSummary.Memory.Used))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Memory.Usage, prometheus.GaugeValue, float64(s.lastSummary.Memory.Usage))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Memory.Free, prometheus.GaugeValue, float64(s.lastSummary.Memory.Free))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Disk.Total, prometheus.GaugeValue, float64(s.lastSummary.HardDisk.Total))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Disk.Used, prometheus.GaugeValue, float64(s.lastSummary.HardDisk.Used))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Disk.Usage, prometheus.GaugeValue, float64(s.lastSummary.HardDisk.Usage))
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Disk.Free, prometheus.GaugeValue, float64(s.lastSummary.HardDisk.Free))
for _, net := range s.lastSummary.NetWork {
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Net.SendSpeed, prometheus.GaugeValue, float64(net.SentSpeed), net.Name)
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.Net.ReceiveSpeed, prometheus.GaugeValue, float64(net.ReceiveSpeed), net.Name)
}
}
s.Call(func() error {
for stream := range s.Streams.Range {
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.BPS, prometheus.GaugeValue, float64(stream.VideoTrack.AVTrack.BPS), stream.StreamPath, stream.Plugin.Meta.Name, "video")
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.FPS, prometheus.GaugeValue, float64(stream.VideoTrack.AVTrack.FPS), stream.StreamPath, stream.Plugin.Meta.Name, "video")
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.BPS, prometheus.GaugeValue, float64(stream.AudioTrack.AVTrack.BPS), stream.StreamPath, stream.Plugin.Meta.Name, "audio")
ch <- prometheus.MustNewConstMetric(s.prometheusDesc.FPS, prometheus.GaugeValue, float64(stream.AudioTrack.AVTrack.FPS), stream.StreamPath, stream.Plugin.Meta.Name, "audio")
}
return nil
})
}