master
go 86 lines 1.83 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 //go:build cgo
4
5 package db2
6
7 import (
8 "context"
9 "fmt"
10 "strconv"
11 )
12
13 func (c *Collector) collectTableInstances(ctx context.Context) error {
14 if c.MaxTables <= 0 {
15 return nil
16 }
17
18 var currentTable, currentSchema, key string
19 err := c.doQuery(ctx, queryTableInstances, func(column, value string, lineEnd bool) {
20 switch column {
21 case "TABSCHEMA":
22 currentSchema = value
23 case "TABNAME":
24 currentTable = value
25 key = fmt.Sprintf("%s.%s", currentSchema, currentTable)
26
27 if !c.allowTable(key) {
28 key = ""
29 return
30 }
31
32 if _, exists := c.tables[key]; !exists {
33 c.tables[key] = &tableMetrics{name: key}
34 }
35 c.mx.tables[key] = tableInstanceMetrics{}
36 case "DATA_OBJECT_P_SIZE":
37 if key != "" {
38 if v, err := strconv.ParseInt(value, 10, 64); err == nil {
39 metrics := c.mx.tables[key]
40 metrics.DataSize = v
41 c.mx.tables[key] = metrics
42 }
43 }
44 case "INDEX_OBJECT_P_SIZE":
45 if key != "" {
46 if v, err := strconv.ParseInt(value, 10, 64); err == nil {
47 metrics := c.mx.tables[key]
48 metrics.IndexSize = v
49 c.mx.tables[key] = metrics
50 }
51 }
52 case "LONG_OBJECT_P_SIZE":
53 if key != "" {
54 if v, err := strconv.ParseInt(value, 10, 64); err == nil {
55 metrics := c.mx.tables[key]
56 metrics.LongObjSize = v
57 c.mx.tables[key] = metrics
58 }
59 }
60 case "ROWS_READ":
61 if key != "" {
62 if v, err := strconv.ParseInt(value, 10, 64); err == nil {
63 metrics := c.mx.tables[key]
64 metrics.RowsRead = v
65 c.mx.tables[key] = metrics
66 }
67 }
68 case "ROWS_WRITTEN":
69 if key != "" {
70 if v, err := strconv.ParseInt(value, 10, 64); err == nil {
71 metrics := c.mx.tables[key]
72 metrics.RowsWritten = v
73 c.mx.tables[key] = metrics
74 }
75 }
76 }
77
78 if lineEnd {
79 key = ""
80 currentTable = ""
81 currentSchema = ""
82 }
83 })
84
85 return err
86 }