import std/os import std/osproc import std/re import strutils import base const host: string = "web.wilde.cloud" const cmd: string = "ping -4 -c 1 " & host const time_secs: int = 4 let ping_re = re(r"time=[0-9.]+") proc get_ping(): float = var ping: float = -1 let cmdOut = execCmdEx(cmd) let lines = splitLines(cmdOut.output) let ping_line = lines[1] let bounds = findBounds(ping_line, ping_re) if bounds.first > 0: let png = ping_line[bounds.first+5..bounds.last] ping = parseFloat(png) return ping proc getObject(ping: float): Info = let pingstr = split($ping,".") let niceping = pingstr[0] & "." & pingstr[1][0] var text = "🏓 " & niceping & " ms" var col = foreground if ping < 0: text = "❌ No Pong" col = yellow else: case ping: of 0..100: col = foreground of 101..400: col = yellow of 401..1000: col = alert else: col = red var data = newInfo() data.title = "Ping Clock:" data.full_text = text data.color = col data.border = blue data.background = black data.selected_background = blue data.selected_color = white return data proc main() = var last_ping: float = 0 while loop: let ping = get_ping() if ping != last_ping: let data = getObject(ping) let output = outputJSON(data) if output == data.full_text: main() last_ping = ping loop = not stoploop if loop: sleep(time_secs * 1000) if isMainModule: main()