#!/usr/bin/python3 import os import shlex import socket SECONDS = 1 MINUTES = 60 * SECONDS HOURS = 60 * MINUTES DAYS = 24 * HOURS COLLECTD_SOCKET = os.environ.get('COLLECTD_SOCKET', '/run/collectd/socket') COLLECTD_INTERVAL = int(os.environ.get('COLLECTD_INTERVAL', 365 * DAYS)) def parse_os_release(): data = {} with open('/etc/os-release', encoding='utf-8') as f: for line in f: line = line.split('#')[0].strip() if not line: continue key, __, value = shlex.split(line)[0].partition('=') if not key or not value: continue data[key] = value return data def get_values(): osinfo = parse_os_release() if 'PRETTY_NAME' in osinfo: yield 'name', osinfo['PRETTY_NAME'] if 'VERSION_ID' in osinfo and 'ID' in osinfo: yield osinfo['ID'], osinfo['VERSION_ID'] yield 'kernel', os.uname().release def main(): hostname = socket.getfqdn() sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect(COLLECTD_SOCKET) with sock: for valtype, value in get_values(): identifier = f'{hostname}/version-{value}/version-{valtype}' line = f'PUTVAL "{identifier}" interval={COLLECTD_INTERVAL} N:1\n' sock.send(line.encode('utf-8')) if __name__ == '__main__': main()