Skip to content

Commit adbbe86

Browse files
authored
feat(inputs.lvm): Add sync_percent for lvm_logical_vol (#17024)
1 parent 2117aea commit adbbe86

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

plugins/inputs/lvm/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ volume (lv):
9090
- fields
9191
- size
9292
- data_percent
93-
- meta_percent
93+
- metadata_percent
94+
- sync_percent
9495

9596
## Example Output
9697

plugins/inputs/lvm/lvm.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ func (lvm *LVM) gatherVolumeGroups(acc telegraf.Accumulator) error {
165165
func (lvm *LVM) gatherLogicalVolumes(acc telegraf.Accumulator) error {
166166
args := []string{
167167
"--reportformat", "json", "--units", "b", "--nosuffix",
168-
"-o", "lv_name,vg_name,lv_size,data_percent,metadata_percent",
168+
"-o", "lv_name,vg_name,lv_size,data_percent,metadata_percent,sync_percent",
169169
}
170170
out, err := lvm.runCmd(lvm.LVSBinary, args)
171171
if err != nil {
@@ -208,10 +208,20 @@ func (lvm *LVM) gatherLogicalVolumes(acc telegraf.Accumulator) error {
208208
return err
209209
}
210210

211+
// Only provided if sync in progress, default completed
212+
if lv.SyncPercent == "" {
213+
lv.SyncPercent = "100.0"
214+
}
215+
syncPercent, err := strconv.ParseFloat(lv.SyncPercent, 32)
216+
if err != nil {
217+
return err
218+
}
219+
211220
fields := map[string]interface{}{
212221
"size": size,
213222
"data_percent": dataPercent,
214223
"metadata_percent": metadataPercent,
224+
"sync_percent": syncPercent,
215225
}
216226

217227
acc.AddFields("lvm_logical_vol", fields, tags)
@@ -273,6 +283,7 @@ type lvsReport struct {
273283
Size string `json:"lv_size"`
274284
DataPercent string `json:"data_percent"`
275285
MetadataPercent string `json:"metadata_percent"`
286+
SyncPercent string `json:"sync_percent"`
276287
} `json:"lv"`
277288
} `json:"report"`
278289
}

plugins/inputs/lvm/lvm_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,21 @@ func TestGather(t *testing.T) {
5858
"size": uint64(121899057152),
5959
"data_percent": 0.36000001430511475,
6060
"metadata_percent": 1.3300000429153442,
61+
"sync_percent": 100.0,
6162
}
6263
acc.AssertContainsTaggedFields(t, "lvm_logical_vol", lvsFields, lvsTags)
64+
65+
lvsTags2 := map[string]string{
66+
"name": "lv",
67+
"vol_group": "vg",
68+
}
69+
lvsFields2 := map[string]interface{}{
70+
"size": uint64(200000000000000),
71+
"data_percent": 0.0,
72+
"metadata_percent": 0.0,
73+
"sync_percent": 39.4900016784668,
74+
}
75+
acc.AssertContainsTaggedFields(t, "lvm_logical_vol", lvsFields2, lvsTags2)
6376
}
6477

6578
// Used as a helper function that mock the exec.Command call
@@ -103,7 +116,8 @@ func TestHelperProcess(_ *testing.T) {
103116
"report": [
104117
{
105118
"lv": [
106-
{"lv_name":"thinpool", "vg_name":"docker", "lv_size":"121899057152", "data_percent":"0.36", "metadata_percent":"1.33"}
119+
{"lv_name":"thinpool", "vg_name":"docker", "lv_size":"121899057152", "data_percent":"0.36", "metadata_percent":"1.33", "sync_percent":""},
120+
{"lv_name":"lv", "vg_name":"vg", "lv_size":"200000000000000", "data_percent":"", "metadata_percent":"", "sync_percent":"39.49"}
107121
]
108122
}
109123
]

0 commit comments

Comments
 (0)