forked from Sysdeploy/collectd-btrfs
Add the main code
This commit is contained in:
parent
5468e2828a
commit
4fa406be18
38
btrfs_plugin.py
Normal file
38
btrfs_plugin.py
Normal 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)
|
Loading…
Reference in New Issue
Block a user