52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
#!/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()
|