master
go 78 lines 1.69 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package clickhouse
4
5 import (
6 "errors"
7 "strconv"
8
9 "github.com/netdata/netdata/go/plugins/pkg/web"
10 )
11
12 const querySystemMetrics = `
13 SELECT
14 metric,
15 value
16 FROM
17 system.metrics FORMAT CSVWithNames
18 `
19
20 func (c *Collector) collectSystemMetrics(mx map[string]int64) error {
21 req, err := web.NewHTTPRequest(c.RequestConfig)
22 if err != nil {
23 return err
24 }
25 req.URL.RawQuery = makeURLQuery(querySystemMetrics)
26
27 px := "metrics_"
28 var metric string
29 var n int
30
31 err = c.doHTTP(req, func(column, value string, lineEnd bool) {
32 switch column {
33 case "metric":
34 metric = value
35 case "value":
36 if !wantSystemMetrics[metric] {
37 return
38 }
39 n++
40 if v, err := strconv.ParseInt(value, 10, 64); err == nil {
41 mx[px+metric] = v
42 }
43 }
44 })
45 if err != nil {
46 return err
47 }
48 if n == 0 {
49 return errors.New("no system metrics data returned")
50 }
51
52 return nil
53 }
54
55 var wantSystemMetrics = map[string]bool{
56 "Query": true,
57 "TCPConnection": true,
58 "HTTPConnection": true,
59 "MySQLConnection": true,
60 "PostgreSQLConnection": true,
61 "InterserverConnection": true,
62 "MemoryTracking": true,
63 "QueryPreempted": true,
64 "ReplicatedFetch": true,
65 "ReplicatedSend": true,
66 "ReplicatedChecks": true,
67 "ReadonlyReplica": true,
68 "PartsTemporary": true,
69 "PartsPreActive": true,
70 "PartsActive": true,
71 "PartsDeleting": true,
72 "PartsDeleteOnDestroy": true,
73 "PartsOutdated": true,
74 "PartsWide": true,
75 "PartsCompact": true,
76 "DistributedSend": true,
77 "DistributedFilesToInsert": true,
78 }