diff --git a/dnsmonitor.py b/dnsmonitor.py index d60e32c..12251d4 100644 --- a/dnsmonitor.py +++ b/dnsmonitor.py @@ -93,139 +93,150 @@ def scalepoints(points): maxcanv = h * scl return sclpoint, maxcanv -def movepoints(points, insert): +def movepoints(points, insertq, restarts, insertr): i = 1 tmp = points[0] tmp2 = 0 - points[0] = insert - while i < 15: - if i == 14: + points[0] = insertq + while i < len(points): + if i == len(points) - 1: points[i] = tmp else: tmp2 = points[i] points[i] = tmp tmp = tmp2 i += 1 - return points + i = 1 + tmp3 = restarts[0] + tmp4 = False + restarts[0] = insertr + while i < len(restarts): + if i == len(restarts) - 1: + restarts[i] = tmp3 + else: + tmp4 = restarts[i] + restarts[i] = tmp3 + tmp3 = tmp4 + i += 1 + return points, restarts -def getdata(prev, flaunch): - data = str(urllib.request.urlopen("http://10.0.0.28:4500/metrics").read()).split("\\n") - count = 0 - i = 0 +def parsedata(prev, flaunch): try: + data = str(urllib.request.urlopen("http://10.0.0.28:4500/metrics").read()).split("\\n") + count = 0 + i = 0 while data[i] != "# TYPE blocky_query_total counter": i += 1 + i += 1 + while True: + if data[i] == "# HELP blocky_request_duration_ms Request duration distribution": + break + else: + count += int(re.sub('blocky_query_total{.*?} ', '', data[i])) + i += 1 except: if flaunch == True: return -1 else: - return -1, 0 - i += 1 - while True: - if data[i] == "# HELP blocky_request_duration_ms Request duration distribution": - break - else: - try: - count += int(re.sub('blocky_query_total{.*?} ', '', data[i])) - except: - if flaunch == True: - return -1 - else: - return -1, 0 - i += 1 + return 0, -1 if flaunch == True: return count else: return count, count - prev -def drawres32(sclpo, maxcanv, failture): - with canvas(device) as draw: - d1 = 1 - d2 = device.width - 66 - now = datetime.datetime.now() - while d1 < 15: - draw.line((d2 + 10, 31 - sclpo[d1 - 1], d2, 31 - sclpo[d1]), fill="white") - d1 += 1 - d2 -= 10 - draw.text((device.width - 53, device.height - 19), now.strftime("%H:%M"), font=regfont, fill="white") - draw.text((0, 0), str(maxcanv), font=smafont, fill="white") - draw.text((0, device.height / 2 - 4), str(int(maxcanv / 2)), font=smafont, fill="white") - draw.text((0, device.height - 9), "0", font=smafont, fill="white") - #draw.text((0, device.height - 14), "\uf011", font=icons, fill="white") - if failture: - draw.text((device.width - 50, 0), "\uf071", font=icons, fill="white") - -def drawres64(sclpo, maxcanv, failture, restart): - with canvas(device) as draw: - d1 = 1 - d2 = device.width - 10 - now = datetime.datetime.now() - while d1 < 15: - draw.line((d2 + 10, 47 - sclpo[d1 - 1], d2, 47 - sclpo[d1]), fill="white") - d1 += 1 - d2 -= 10 - draw.text((device.width - 53, device.height - 19), now.strftime("%H:%M"), font=regfont, fill="white") - draw.text((0, 0), str(maxcanv), font=smafont, fill="white") - draw.text((0, (device.height - 19) / 2 - 2), str(int(maxcanv / 2)), font=smafont, fill="white") - draw.text((0, device.height - 26), "0", font=smafont, fill="white") - #draw.text((0, device.height - 14), "\uf011", font=icons, fill="white") - if failture: - draw.text((2, device.height - 14), "\uf071", font=icons, fill="white") - if restart: - draw.text((22, device.height - 14), "\uf021", font=icons, fill="white") +def drawout(sclpo, maxcanv, failture, restart): + match device.height: + case 32: + with canvas(device) as draw: + d1 = 1 + d2 = device.width - 66 + now = datetime.datetime.now() + while d1 < len(sclpo): + draw.line((d2 + 10, 31 - sclpo[d1 - 1], d2, 31 - sclpo[d1]), fill="white") + d1 += 1 + d2 -= 10 + draw.text((device.width - 53, device.height - 19), now.strftime("%H:%M"), font=regfont, fill="white") + draw.text((0, 0), str(maxcanv), font=smafont, fill="white") + draw.text((0, device.height / 2 - 4), str(int(maxcanv / 2)), font=smafont, fill="white") + draw.text((0, device.height - 9), "0", font=smafont, fill="white") + if failture: + draw.text((device.width - 50, 0), "\uf071", font=icons, fill="white") + if restart: + draw.text((device.width - 30, 0), "\uf021", font=icons, fill="white") + case 64: + with canvas(device) as draw: + d1 = 1 + d2 = device.width - 10 + now = datetime.datetime.now() + while d1 < len(sclpo): + draw.line((d2 + 10, 47 - sclpo[d1 - 1], d2, 47 - sclpo[d1]), fill="white") + d1 += 1 + d2 -= 10 + draw.text((device.width - 53, device.height - 19), now.strftime("%H:%M"), font=regfont, fill="white") + draw.text((0, 0), str(maxcanv), font=smafont, fill="white") + draw.text((0, (device.height - 19) / 2 - 2), str(int(maxcanv / 2)), font=smafont, fill="white") + draw.text((0, device.height - 26), "0", font=smafont, fill="white") + if failture: + draw.text((2, device.height - 14), "\uf071", font=icons, fill="white") + if restart: + draw.text((22, device.height - 14), "\uf021", font=icons, fill="white") + case _: + with canvas(device) as draw: + draw.text((0,0), "Display not supported", font=smafont, fill="white") +def getdata(oldtotal): + total, query = parsedata(oldtotal, False) + if query == -1: + return oldtotal, 0, True, False + if total < oldtotal: + return total, 0, False, True + return total, query, False, False def main(): - print("Blocky Graph Monitor for OLED v1.4") + print("Blocky Graph Monitor for OLED v0.5 B") print("(C) Nikopol 2024") today_last_time = "NaN" last_hrs = "NaN" + i = 0 failture = False restart = False - resticker = 0 + rstate = False device.contrast(0) - points = [0] * 15 - total = getdata(0, True) + pointsmap = [0] * 15 + restartmap = [False] * len(pointsmap) + total = parsedata(0, True) if total == -1: failture = True while True: now = datetime.datetime.now() today_time = now.strftime("%H:%M") hrs = now.strftime("%H") - if today_time != today_last_time: + #if today_time != today_last_time: + if 1: today_last_time = today_time - if hrs != last_hrs: - #if 1: + #if hrs != last_hrs: + if 1: last_hrs = hrs - if resticker > 0: - resticker = resticker + 1 - elif resticker >= 15: - resticker = 0 - restart = False - total, query = getdata(total, False) + total, query, failture, rstate = getdata(total) + #rstate = True print(total) - print(query) - if total == -1: - failture = True - else: - failture = False - if query < 0: - restart = True - query = 0 - resticker = 1 - points = movepoints(points, query) - sclpo, maxcanv = scalepoints(points) - if device.height == 32: - drawres32(sclpo, maxcanv, failture) - else: - drawres64(sclpo, maxcanv, failture, restart) - - + print(query) + pointsmap, restartmap = movepoints(pointsmap, query, restartmap, rstate) + sclpo, maxcanv = scalepoints(pointsmap) + restart = False + while i < len(restartmap): + print(restartmap[i]) + if restartmap[i] == True: + restart = True + i += 1 + i = 0 + drawout(sclpo, maxcanv, failture, restart) time.sleep(1) if __name__ == "__main__": try: + print("\n".join(sys.argv)) device = get_device() regfont = make_font("TerminusTTF-4.49.3.ttf", 22) smafont = make_font("TerminusTTF-4.49.3.ttf", 12)