Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import terminal, sequtils, tables, strutils
- from os import sleep
- import redis, dashing, asyncdispatch
- var
- keys: RedisList
- diff: Table[RedisString, RedisString]
- proc renderRedis() {.async.} =
- ## Poll Redis for new keys and add the keys to our `diff`
- let redisClient = await openAsync()
- # Clear our diff table
- clear diff
- while true:
- var oldKeys: RedisList
- shallowCopy(oldKeys, keys)
- # Get all keys
- keys = await redisClient.keys("*")
- for key in keys:
- if not oldKeys.contains(key):
- #Add the new key into the diff
- let val = await redisClient.get(key)
- discard diff.hasKeyOrPut(key, val)
- await sleepAsync(2000)
- proc render() {.async.} =
- ## Build our Tiles and display them
- var
- latestKeys, curKeys: Table[RedisString, RedisString]
- allKeys = Tile(kind: Log, title: "Current Keys", border_color:"f00", color:"0ff")
- latestDiff = Tile(kind: Text, title: "Latest Changes", border_color:"00f", color:"fff")
- cleared: bool
- while true:
- erase_screen()
- cleared = false
- latestDiff.text = ""
- # If we have new keys in the diff, then clear our list of latest keys
- if diff.len != latestKeys.len:
- curKeys.clear()
- cleared = true
- # For each new key, add it to our total list and log it
- for key in diff.keys:
- if not latestKeys.contains(key):
- latestKeys[key] = diff[key]
- allKeys.add_log(key)
- curKeys[key] = diff[key]
- # Build our text from the most recent keys
- for key in curKeys.keys:
- latestDiff.text = block:
- if not cleared:
- latestDiff.text & "\r\n" & key
- else:
- key
- # Build our tile display
- var ui = Tile(kind: Hsplit, border_color:"fff", items: @[
- allKeys, latestDiff
- ])
- # Render our tile display
- ui.display()
- # Wait a second before getting new results
- await sleepAsync 3000
- set_cursor_at(0, terminal_height() - 1)
- when isMainModule:
- asyncCheck renderRedis()
- asyncCheck render()
- runForever()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement