Skip to content
Snippets Groups Projects
Commit 64eea242 authored by Nico's avatar Nico Committed by root
Browse files

add json output

parent 2395f4ac
No related branches found
No related tags found
No related merge requests found
......@@ -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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment