master
go 68 lines 2.12 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package rabbitmq
4
5 import (
6 "fmt"
7
8 "github.com/netdata/netdata/go/plugins/pkg/web"
9 "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/oldmetrix"
10 )
11
12 func (c *Collector) collectNodes(mx map[string]int64) error {
13 req, err := web.NewHTTPRequestWithPath(c.RequestConfig, urlPathAPINodes)
14 if err != nil {
15 return fmt.Errorf("failed to create node stats request: %w", err)
16 }
17
18 var resp []apiNodeResp
19
20 if err := c.webClient().RequestJSON(req, &resp); err != nil {
21 return err
22 }
23
24 for _, node := range resp {
25 c.cache.getNode(node).seen = true
26
27 px := fmt.Sprintf("node_%s_", node.Name)
28
29 mx[px+"avail_status_running"] = oldmetrix.Bool(node.Running)
30 mx[px+"avail_status_down"] = oldmetrix.Bool(!node.Running)
31
32 if node.OsPid == "" {
33 continue
34 }
35
36 for _, v := range []string{"clear", "detected"} {
37 mx[px+"network_partition_status_"+v] = 0
38 }
39 mx[px+"network_partition_status_clear"] = oldmetrix.Bool(len(node.Partitions) == 0)
40 mx[px+"network_partition_status_detected"] = oldmetrix.Bool(len(node.Partitions) > 0)
41
42 mx[px+"mem_alarm_status_clear"] = oldmetrix.Bool(!node.MemAlarm)
43 mx[px+"mem_alarm_status_triggered"] = oldmetrix.Bool(node.MemAlarm)
44 mx[px+"disk_free_alarm_status_clear"] = oldmetrix.Bool(!node.DiskFreeAlarm)
45 mx[px+"disk_free_alarm_status_triggered"] = oldmetrix.Bool(node.DiskFreeAlarm)
46
47 mx[px+"fds_available"] = node.FDTotal - node.FDUsed
48 mx[px+"fds_used"] = node.FDUsed
49 mx[px+"mem_available"] = node.MemLimit - node.MemUsed
50 mx[px+"mem_used"] = node.MemUsed
51 mx[px+"sockets_available"] = node.SocketsTotal - node.SocketsUsed
52 mx[px+"sockets_used"] = node.SocketsUsed
53 mx[px+"procs_available"] = node.ProcTotal - node.ProcUsed
54 mx[px+"procs_used"] = node.ProcUsed
55 mx[px+"disk_free_bytes"] = node.DiskFree
56 mx[px+"run_queue"] = node.RunQueue
57 mx[px+"uptime"] = node.Uptime / 1000 // ms to seconds
58
59 for _, peer := range node.ClusterLinks {
60 c.cache.getNodeClusterPeer(node, peer).seen = true
61
62 mx[px+"peer_"+peer.Name+"_cluster_link_recv_bytes"] = peer.RecvBytes
63 mx[px+"peer_"+peer.Name+"_cluster_link_send_bytes"] = peer.SendBytes
64 }
65 }
66
67 return nil
68 }