master
go 112 lines 3.49 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package haproxy
4
5 import (
6 "fmt"
7
8 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
9 )
10
11 var charts = collectorapi.Charts{
12 chartBackendCurrentSessions.Copy(),
13 chartBackendSessions.Copy(),
14
15 chartBackendResponseTimeAverage.Copy(),
16
17 chartBackendQueueTimeAverage.Copy(),
18 chartBackendCurrentQueue.Copy(),
19 }
20
21 var (
22 chartBackendCurrentSessions = collectorapi.Chart{
23 ID: "backend_current_sessions",
24 Title: "Current number of active sessions",
25 Units: "sessions",
26 Fam: "backend sessions",
27 Ctx: "haproxy.backend_current_sessions",
28 }
29 chartBackendSessions = collectorapi.Chart{
30 ID: "backend_sessions",
31 Title: "Sessions rate",
32 Units: "sessions/s",
33 Fam: "backend sessions",
34 Ctx: "haproxy.backend_sessions",
35 }
36 )
37
38 var (
39 chartBackendResponseTimeAverage = collectorapi.Chart{
40 ID: "backend_response_time_average",
41 Title: "Average response time for last 1024 successful connections",
42 Units: "milliseconds",
43 Fam: "backend responses",
44 Ctx: "haproxy.backend_response_time_average",
45 }
46 chartTemplateBackendHTTPResponses = collectorapi.Chart{
47 ID: "backend_http_responses_proxy_%s",
48 Title: "HTTP responses by code class for <code>%s</code> proxy",
49 Units: "responses/s",
50 Fam: "backend responses",
51 Ctx: "haproxy.backend_http_responses",
52 Type: collectorapi.Stacked,
53 Dims: collectorapi.Dims{
54 {ID: "haproxy_backend_http_responses_1xx_proxy_%s", Name: "1xx", Algo: collectorapi.Incremental},
55 {ID: "haproxy_backend_http_responses_2xx_proxy_%s", Name: "2xx", Algo: collectorapi.Incremental},
56 {ID: "haproxy_backend_http_responses_3xx_proxy_%s", Name: "3xx", Algo: collectorapi.Incremental},
57 {ID: "haproxy_backend_http_responses_4xx_proxy_%s", Name: "4xx", Algo: collectorapi.Incremental},
58 {ID: "haproxy_backend_http_responses_5xx_proxy_%s", Name: "5xx", Algo: collectorapi.Incremental},
59 {ID: "haproxy_backend_http_responses_other_proxy_%s", Name: "other", Algo: collectorapi.Incremental},
60 },
61 }
62 )
63
64 var (
65 chartBackendQueueTimeAverage = collectorapi.Chart{
66 ID: "backend_queue_time_average",
67 Title: "Average queue time for last 1024 successful connections",
68 Units: "milliseconds",
69 Fam: "backend queue",
70 Ctx: "haproxy.backend_queue_time_average",
71 }
72 chartBackendCurrentQueue = collectorapi.Chart{
73 ID: "backend_current_queue",
74 Title: "Current number of queued requests",
75 Units: "requests",
76 Fam: "backend queue",
77 Ctx: "haproxy.backend_current_queue",
78 }
79 )
80
81 var (
82 chartTemplateBackendNetworkIO = collectorapi.Chart{
83 ID: "backend_network_io_proxy_%s",
84 Title: "Network traffic for <code>%s</code> proxy",
85 Units: "bytes/s",
86 Fam: "backend network",
87 Ctx: "haproxy.backend_network_io",
88 Type: collectorapi.Area,
89 Dims: collectorapi.Dims{
90 {ID: "haproxy_backend_bytes_in_proxy_%s", Name: "in", Algo: collectorapi.Incremental},
91 {ID: "haproxy_backend_bytes_out_proxy_%s", Name: "out", Algo: collectorapi.Incremental, Mul: -1},
92 },
93 }
94 )
95
96 func newChartBackendHTTPResponses(proxy string) *collectorapi.Chart {
97 return newBackendChartFromTemplate(chartTemplateBackendHTTPResponses, proxy)
98 }
99
100 func newChartBackendNetworkIO(proxy string) *collectorapi.Chart {
101 return newBackendChartFromTemplate(chartTemplateBackendNetworkIO, proxy)
102 }
103
104 func newBackendChartFromTemplate(tpl collectorapi.Chart, proxy string) *collectorapi.Chart {
105 c := tpl.Copy()
106 c.ID = fmt.Sprintf(c.ID, proxy)
107 c.Title = fmt.Sprintf(c.Title, proxy)
108 for _, d := range c.Dims {
109 d.ID = fmt.Sprintf(d.ID, proxy)
110 }
111 return c
112 }