summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/lvm/charts.go
blob: 20db6615e3c86770448b256c7ba7f138acfb7319 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// SPDX-License-Identifier: GPL-3.0-or-later

package lvm

import (
	"fmt"

	"github.com/netdata/netdata/go/go.d.plugin/agent/module"
)

const (
	prioLVDataPercent = 2920 + iota
	prioLVMetadataPercent
)

var lvThinPoolChartsTmpl = module.Charts{
	lvDataSpaceUtilizationChartTmpl.Copy(),
	lvMetadataSpaceUtilizationChartTmpl.Copy(),
}

var (
	lvDataSpaceUtilizationChartTmpl = module.Chart{
		ID:       "lv_%s_vg_%s_lv_data_space_utilization",
		Title:    "Logical volume space allocated for data",
		Units:    "percentage",
		Fam:      "lv space usage",
		Ctx:      "lvm.lv_data_space_utilization",
		Type:     module.Area,
		Priority: prioLVDataPercent,
		Dims: module.Dims{
			{ID: "lv_%s_vg_%s_data_percent", Name: "utilization", Div: 100},
		},
	}
	lvMetadataSpaceUtilizationChartTmpl = module.Chart{
		ID:       "lv_%s_vg_%s_lv_metadata_space_utilization",
		Title:    "Logical volume space allocated for metadata",
		Units:    "percentage",
		Fam:      "lv space usage",
		Ctx:      "lvm.lv_metadata_space_utilization",
		Type:     module.Area,
		Priority: prioLVMetadataPercent,
		Dims: module.Dims{
			{ID: "lv_%s_vg_%s_metadata_percent", Name: "utilization", Div: 100},
		},
	}
)

func (l *LVM) addLVMThinPoolCharts(lvName, vgName string) {
	charts := lvThinPoolChartsTmpl.Copy()

	for _, chart := range *charts {
		chart.ID = fmt.Sprintf(chart.ID, lvName, vgName)
		chart.Labels = []module.Label{
			{Key: "lv_name", Value: lvName},
			{Key: "vg_name", Value: vgName},
			{Key: "volume_type", Value: "thin_pool"},
		}
		for _, dim := range chart.Dims {
			dim.ID = fmt.Sprintf(dim.ID, lvName, vgName)
		}
	}

	if err := l.Charts().Add(*charts...); err != nil {
		l.Warning(err)
	}
}