Add the main code

This commit is contained in:
Peter Šurda 2023-06-07 21:31:51 +08:00
parent 5468e2828a
commit 4fa406be18
Signed by untrusted user: PeterSurda
GPG Key ID: 3E47497CF67ABB95

38
btrfs_plugin.py Normal file
View File

@ -0,0 +1,38 @@
import collectd
import btrfs
PLUGIN = 'btrfs'
TYPE_STATS = "stats"
mount_paths = []
def configure_callback(conf):
"""
Populate mount_paths
"""
global mount_paths
mount_paths = [path for path in btrfs.utils.mounted_filesystem_paths()]
collectd.info("btrfs: config done. mount_paths: {}".format(mount_paths))
def read_callback():
"""Read Btrfs device information and dispatch values to collectd."""
metric = collectd.Values()
metric.plugin = PLUGIN
for path in mount_paths:
try:
with btrfs.FileSystem(path) as fs:
for device in list(fs.devices()):
stats = fs.dev_stats(device.devid)
dev_info = fs.dev_info(device.devid)
metric.plugin_instance = dev_info.path
for counter, value in stats.counters.items():
metric.type_instance = counter
metric.dispatch(TYPE_STATS, [value])
except Exception as e:
collectd.error("btrfs: read_callback: {}".format(e))
collectd.info("btrfs: read done")
if __name__ != "__main__":
# Register callbacks
collectd.register_config(configure_callback)
collectd.register_read(read_callback)