A Redis Monitor
Description
An Xbasic code example implementing a Redis Monitor program.
The redis-cli.exe program can be used to monitor all traffic on a Redis instance if after you start it you type the command 'MONITOR'.
Monitor is an asynchronous command on the Redis client just like BLPOP, BRPOP and SUBSCRIBE, so it is possible to build the a Redis MONITOR in Xbasic as well
Create a script with the code below, and run it. When the XDialog is up, perform redis examples from the earlier sections on the local instance, you will see all the traffic show up in the dialog.
dim redis as extension::RedisClient = extension::RedisClient::CreateClient() redis.CreateListener("monitor","MONITOR") dim messages as c ui_modeless_dlg_box("monitor_handler",<<%dlg% {title=Monitor} REDIS Monitor; [%M%.100,20messages]; %dlg%,<<%code% if a_dlg_button = "quit" then a_dlg_button = "" ui_modeless_dlg_close("monitor_handler") else if word(a_dlg_button,1,":") = "note" then messages = messages + crlf() + substr(a_dlg_button,6) a_dlg_button = "" else if a_dlg_button = "close" then a_dlg_button = "" ui_modeless_dlg_close("monitor_handler") else if a_dlg_button = "" then a_dlg_button = "" dim srv as extension::Listener srv = extension::Listener::Get("monitor") srv.Close() end if %code%) thread_create("Monitor_thread",<<%code% dim redis as extension::RedisClient = extension::RedisClient::CreateClient() dim srv as extension::Listener srv = extension::Listener::Get("monitor") while .not. srv.Closed() dim event as extension::ListenerEvent event = srv.Read() ui_dlg_event("monitor_handler","note:"+event.data) end while ui_dlg_event("monitor_handler","close") %code%)