diff --git a/i3bar_pingclock.nim b/i3bar_pingclock.nim index 440c34c..c2057b4 100644 --- a/i3bar_pingclock.nim +++ b/i3bar_pingclock.nim @@ -4,35 +4,52 @@ import std/re import strutils import i3bar_base -const host: string = "8.8.8.8" +const host: string = "web.wilde.cloud" const cmd: string = "ping -c 1 " & host const time_secs: int = 4 -let ping_re = re(r"time=[0-9.]+\sms") +let ping_re = re(r"time=[0-9.]+") -proc get_pingms(): string = +proc get_ping(): float = 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 ping = ping_line[bounds.first+5..bounds.last] - return "🏓 " & ping - return "❌ No Pong" + return parseFloat(ping) + return -1 + +proc getObject(ping: float): i3barData = + var text = "🏓 " & $ping & " 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 -proc getObject(ping: string): i3barData = let data = i3barData( - full_text: ping, - color: foreground, - border: lightblue, + full_text: text, + color: col, + border: blue, + background: black ) return data proc main() = - var last_ping = "" + var last_ping: float = 0 while true: - let ping = get_pingms() + let ping = get_ping() if ping != last_ping: let data = getObject(ping) outputJSON(data)