From 64eea242bb702338056a88d30b51a1226bc2a2e9 Mon Sep 17 00:00:00 2001 From: nrb <freifunk@nicoboehr.de> Date: Sun, 3 Jan 2021 10:51:45 +0100 Subject: [PATCH] add json output --- update_checker.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/update_checker.py b/update_checker.py index b787fa0..cafa736 100755 --- a/update_checker.py +++ b/update_checker.py @@ -10,9 +10,11 @@ import requests import argparse import datetime import logging +import time ap = argparse.ArgumentParser() ap.add_argument("--raw", type=argparse.FileType("r", encoding="utf-8"), required=True) +ap.add_argument("--json", default=None, type=argparse.FileType('w'), help="Output a JSON file instead of printing to stdout") ap.add_argument("--debug", action="store_true", help="Output tons of debug messages") args = ap.parse_args() @@ -105,7 +107,7 @@ json.dump(allFirmwareDownloads,open("firmwareDownloads.json","w"),sort_keys=True data = json.load(args.raw) -updateEvents = [] +updateEvents = {} for download in allFirmwareDownloads: try: r = LogRecord(download) @@ -124,9 +126,34 @@ for download in allFirmwareDownloads: hostname = d["nodeinfo"]["hostname"] hardware_model = getHardwareModelFromEntry(d) if currentRelease < r.release: - print("%s (%s) %s -> %s Segment %i %s status %s @ %s" % (mac, filterNonAscii(hostname), currentRelease, r.release, r.segment, hardware_model, status, r.date)) + if mac in updateEvents: + updateEvents[mac]["download_count"] += 1 + updateEvents[mac]["last_date"] = r.date + else: + updateEvents[mac] = { + "mac": mac, + "hostname": hostname, + "from_release": currentRelease, + "to_release": r.release, + "segment": r.segment, + "model": hardware_model, + "status": status, + "date": r.date, + "last_date": r.date, + "download_count": 1 + } else: # raw.json only contains data from 14 days - do not print message if we encounter older log entries download_ts = datetime.datetime.strptime(r.date, "%d/%b/%Y:%H:%M:%S %z]") if (datetime.datetime.now(tz=datetime.timezone.utc) - download_ts) < datetime.timedelta(days=14): logging.info("%s %s with agent %s seems not to be a node @ %s"%(r.ipv6,mac,r.agent,r.date)) + +if not args.json: + for event in updateEvents.values(): + print("%s (%s) %s -> %s Segment %i %s status %s @ %s" % (event["mac"], filterNonAscii(event["hostname"]), event["from_release"], event["to_release"], event["segment"], event["model"], event["status"], event["date"])) +else: + outJson = { + "timestamp": time.time(), + "update_events": list(updateEvents.values()) + } + json.dump(outJson, args.json) -- GitLab