wmtools/pingclock.nim

69 lines
1.4 KiB
Nim

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)
outputJSON(data)
last_ping = ping
loop = not stoploop
if loop:
sleep(time_secs * 1000)
if isMainModule:
main()