import std/[json, options, tables, sequtils, parseutils] import std/[marshal, cgi, os, httpclient, times] import mustache import types, utils const templateOverview = staticRead "templates/overview.tpl" proc main() = var leaseFile = "./dnsmasq.lease" if getEnv("LEASE_PATH") != "": leaseFile = getEnv("LEASE_PATH") if not fileExists(leaseFile): echo "Lease file not found!" quit() let (duid, leases) = parseLeaseFile(leaseFile) case getRequestURI() of "": stdout.write("Content-type: text/plain\n\n") stdout.write("Not called from cgi?") of "/": var tplLeases = newSeq[Table[string, string]]() for lease in leases: var element : Table[string, string]; if not lease.hostname.isSome: element["HOSTNAME"] = "-" else: element["HOSTNAME"] = lease.hostname.get if lease.type == v4: element["MAC_ADDRESS"] = lease.macAddress element["IP4_ADDRESS"] = lease.address element["IP6_ADDRESS"] = "-" else: element["MAC_ADDRESS"] = "-" element["IP4_ADDRESS"] = "-" element["IP6_ADDRESS"] = lease.address let time = (lease.expiry - now()).toParts element["EXPIRY_TIME"] = $time[Days] & "d " & $time[Hours] & "h " & $time[Minutes] & "m" tplLeases.add(element) let context = newContext() context["PAGE"] = "Overview" context["LEASES"] = tplLeases stdout.write("Content-type: text/html\n\n") stdout.write(templateOverview.render(context)) of "/json": stdout.write("Content-type: application/json\n\n") stdout.write($$leases) main()