#!/usr/bin/env python import sys import json _BITS = [] def _bit(idx, name): def wrapper(func): _BITS.append([idx, name, func]) return func return wrapper @_bit(6, 'mem') def _mem(): with open('/proc/meminfo') as meminfo_fp: attrs = {} for line in meminfo_fp.readlines(): parts = line.split(':', 2) attrs[parts[0].strip()] = parts[1].strip() avail = int(attrs['MemAvailable'].split()[0]) total = int(attrs['MemTotal'].split()[0]) used = int(((total - avail) / total) * 100) color = None if used > 75: color = '#ff0000' if used < 25: color = '#00ff00' return 'M:{}%'.format(used), color def _print_line(message): sys.stdout.write(message + '\n') sys.stdout.flush() def _read_line(): try: line = sys.stdin.readline().strip() if not line: sys.exit(3) return line except KeyboardInterrupt: sys.exit() def main(bits=_BITS): _print_line(_read_line()) _print_line(_read_line()) while True: line, prefix = _read_line(), '' if line.startswith(','): line, prefix = line[1:], ',' loaded = json.loads(line) for idx, name, func in bits: value, color = func() record = dict(full_text=str(value), name=name) if color is not None: record.update(dict(color=color)) loaded.insert(idx, record) _print_line(prefix+json.dumps(loaded)) if __name__ == '__main__': main()