Zabbix 7.0 is so fast that in a small environment such as What’s up, home? it gets bored. Very bored.
What does Zabbix do when it gets bored? It uses its new Selenium-based Browser item type and plays some Rock-Paper-Scissors against this blog site.
But how does that work?
The idea is simple. My website hosts a very simple PHP script which returns back a random value of “Rock”, “Paper” or “Scissors”. Likewise, my Zabbix Selenium test picks up a random word out of those. Then, the Selenium test checks both answers and gets back the result.
So, in all seriousness, this blog post demonstrates you how the new Browser item type can react to different responses.
Backend code
Here’s the PHP script in all its g(l)ory:
<html> <head> <title>Whatsuphome.fi :: rock-paper-scissors</title> </head> <body> <p> <?php $choices = ["Rock", "Scissors", "Paper"]; $random_choice = $choices[array_rand($choices)]; echo $random_choice; ?> </p> </body> </html>
Nothing to call home about in that script: array with three choices, pick a random choice, print the result, done.
Zabbix side
I created a new Browser type item like this:
… and here’s the script part I just hammered in, so there might or might not be bugs. I really did not test this very thoroughly.
var browser = new Browser(Browser.chromeOptions()); const moves = ["Rock", "Scissors", "Paper"]; const zabbixMove = moves[Math.floor(Math.random() * moves.length)]; try { browser.navigate("https://whatsuphome.fi/rps.php"); var opponentMove = browser.findElement("xpath", "//p").getText(); if (zabbixMove === opponentMove) { var winner = "Draw"; } else if ( (zabbixMove === "Rock" && opponentMove === "Scissors") || (zabbixMove === "Scissors" && opponentMove === "Paper") || (zabbixMove === "Paper" && opponentMove === "Rock") ) { var winner="Zabbix"; } else { var winner="Opponent"; } } finally { return ("Winner is " + winner + ". Zabbix move was " + zabbixMove + " and opponent move was " + opponentMove); }
That’s it! From now on my Zabbix will play the game once per hour, although for this blog post I did manually click the Execute now button a few times. Again, here’s the same screenshot that was also in the beginning of this blog post.
Happy gaming!