master
go 189 lines 5.54 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package rethinkdb
4
5 import (
6 "fmt"
7 "strings"
8
9 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
10 )
11
12 const (
13 prioClusterServersStatsRequest = collectorapi.Priority + iota
14 prioClusterClientConnections
15 prioClusterActiveClients
16 prioClusterQueries
17 prioClusterDocuments
18
19 prioServerStatsRequestStatus
20 prioServerClientConnections
21 prioServerActiveClients
22 prioServerQueries
23 prioServerDocuments
24 )
25
26 var clusterCharts = collectorapi.Charts{
27 clusterServersStatsRequestChart.Copy(),
28 clusterClientConnectionsChart.Copy(),
29 clusterActiveClientsChart.Copy(),
30 clusterQueriesChart.Copy(),
31 clusterDocumentsChart.Copy(),
32 }
33
34 var (
35 clusterServersStatsRequestChart = collectorapi.Chart{
36 ID: "cluster_cluster_servers_stats_request",
37 Title: "Cluster Servers Stats Request",
38 Units: "servers",
39 Fam: "servers",
40 Ctx: "rethinkdb.cluster_servers_stats_request",
41 Priority: prioClusterServersStatsRequest,
42 Dims: collectorapi.Dims{
43 {ID: "cluster_servers_stats_request_success", Name: "success"},
44 {ID: "cluster_servers_stats_request_timeout", Name: "timeout"},
45 },
46 }
47 clusterClientConnectionsChart = collectorapi.Chart{
48 ID: "cluster_client_connections",
49 Title: "Cluster Client Connections",
50 Units: "connections",
51 Fam: "connections",
52 Ctx: "rethinkdb.cluster_client_connections",
53 Priority: prioClusterClientConnections,
54 Dims: collectorapi.Dims{
55 {ID: "cluster_client_connections", Name: "connections"},
56 },
57 }
58 clusterActiveClientsChart = collectorapi.Chart{
59 ID: "cluster_active_clients",
60 Title: "Cluster Active Clients",
61 Units: "clients",
62 Fam: "clients",
63 Ctx: "rethinkdb.cluster_active_clients",
64 Priority: prioClusterActiveClients,
65 Dims: collectorapi.Dims{
66 {ID: "cluster_clients_active", Name: "active"},
67 },
68 }
69 clusterQueriesChart = collectorapi.Chart{
70 ID: "cluster_queries",
71 Title: "Cluster Queries",
72 Units: "queries/s",
73 Fam: "queries",
74 Ctx: "rethinkdb.cluster_queries",
75 Priority: prioClusterQueries,
76 Dims: collectorapi.Dims{
77 {ID: "cluster_queries_total", Name: "queries", Algo: collectorapi.Incremental},
78 },
79 }
80 clusterDocumentsChart = collectorapi.Chart{
81 ID: "cluster_documents",
82 Title: "Cluster Documents",
83 Units: "documents/s",
84 Fam: "documents",
85 Ctx: "rethinkdb.cluster_documents",
86 Priority: prioClusterDocuments,
87 Dims: collectorapi.Dims{
88 {ID: "cluster_read_docs_total", Name: "read", Algo: collectorapi.Incremental},
89 {ID: "cluster_written_docs_total", Name: "written", Mul: -1, Algo: collectorapi.Incremental},
90 },
91 }
92 )
93
94 var serverChartsTmpl = collectorapi.Charts{
95 serverStatsRequestStatusChartTmpl.Copy(),
96 serverConnectionsChartTmpl.Copy(),
97 serverActiveClientsChartTmpl.Copy(),
98 serverQueriesChartTmpl.Copy(),
99 serverDocumentsChartTmpl.Copy(),
100 }
101
102 var (
103 serverStatsRequestStatusChartTmpl = collectorapi.Chart{
104 ID: "server_%s_stats_request_status",
105 Title: "Server Stats Request Status",
106 Units: "status",
107 Fam: "srv status",
108 Ctx: "rethinkdb.server_stats_request_status",
109 Priority: prioServerStatsRequestStatus,
110 Dims: collectorapi.Dims{
111 {ID: "server_%s_stats_request_status_success", Name: "success"},
112 {ID: "server_%s_stats_request_status_timeout", Name: "timeout"},
113 },
114 }
115 serverConnectionsChartTmpl = collectorapi.Chart{
116 ID: "server_%s_client_connections",
117 Title: "Server Client Connections",
118 Units: "connections",
119 Fam: "srv connections",
120 Ctx: "rethinkdb.server_client_connections",
121 Priority: prioServerClientConnections,
122 Dims: collectorapi.Dims{
123 {ID: "server_%s_client_connections", Name: "connections"},
124 },
125 }
126 serverActiveClientsChartTmpl = collectorapi.Chart{
127 ID: "server_%s_active_clients",
128 Title: "Server Active Clients",
129 Units: "clients",
130 Fam: "srv clients",
131 Ctx: "rethinkdb.server_active_clients",
132 Priority: prioServerActiveClients,
133 Dims: collectorapi.Dims{
134 {ID: "server_%s_clients_active", Name: "active"},
135 },
136 }
137 serverQueriesChartTmpl = collectorapi.Chart{
138 ID: "server_%s_queries",
139 Title: "Server Queries",
140 Units: "queries/s",
141 Fam: "srv queries",
142 Ctx: "rethinkdb.server_queries",
143 Priority: prioServerQueries,
144 Dims: collectorapi.Dims{
145 {ID: "server_%s_queries_total", Name: "queries", Algo: collectorapi.Incremental},
146 },
147 }
148 serverDocumentsChartTmpl = collectorapi.Chart{
149 ID: "server_%s_documents",
150 Title: "Server Documents",
151 Units: "documents/s",
152 Fam: "srv documents",
153 Ctx: "rethinkdb.server_documents",
154 Priority: prioServerDocuments,
155 Dims: collectorapi.Dims{
156 {ID: "server_%s_read_docs_total", Name: "read", Algo: collectorapi.Incremental},
157 {ID: "server_%s_written_docs_total", Name: "written", Mul: -1, Algo: collectorapi.Incremental},
158 },
159 }
160 )
161
162 func (c *Collector) addServerCharts(srvUUID, srvName string) {
163 charts := serverChartsTmpl.Copy()
164
165 for _, chart := range *charts {
166 chart.ID = fmt.Sprintf(chart.ID, srvUUID)
167 chart.Labels = []collectorapi.Label{
168 {Key: "sever_uuid", Value: srvUUID},
169 {Key: "sever_name", Value: srvName},
170 }
171 for _, dim := range chart.Dims {
172 dim.ID = fmt.Sprintf(dim.ID, srvUUID)
173 }
174 }
175
176 if err := c.Charts().Add(*charts...); err != nil {
177 c.Warningf("failed to add chart for '%s' server: %v", srvName, err)
178 }
179 }
180
181 func (c *Collector) removeServerCharts(srvUUID string) {
182 px := fmt.Sprintf("server_%s_", srvUUID)
183 for _, chart := range *c.Charts() {
184 if strings.HasPrefix(chart.ID, px) {
185 chart.MarkRemove()
186 chart.MarkNotCreated()
187 }
188 }
189 }