We needed servers at Online, but there was no availability! So they came to ask me if I had some kind of magic solution…

A bit of bash, a notify (in this case Slack), and here we go!

Dirty way

To get alerted via Slack, you need to create an incoming-webhook , which will generate a link.

For an XC 2016 series server:

text="DISPO : https://www.online.net/fr/serveur-dedie/dedibox-xc"; json="{\"channel\": \"#infra\", \"text\": \"$text\"}" ; while true ; do curl --silent https://www.online.net/fr/serveur-dedie  | grep '<button class="btn btn--primary js-order-dedibox"' | grep -i 'xc 2016' | grep -i 'victime' || curl -s -d "payload=$json" "https://hooks.slack.com/services/XXX/XXXX/XXXX/XXXX" ; sleep 5 ; done

The curl only fires if a server is actually available.

Clean way

Just some code formatting:

#!/bin/bash

webhook="https://hooks.slack.com/services/XXX/XXXX/XXXX/XXXX"
url="https://www.online.net/fr/serveur-dedie/XXXXX"
text="DISPO : $url"
channel="test"
json="{\"channel\": \"#$channel\", \"text\": \"$text\"}"
server="XC 2016"

while true
    do curl --silent https://www.online.net/fr/serveur-dedie | \
    grep '<button class="btn btn--primary js-order-dedibox"' | \
    grep -i "$server" | grep -i 'victime' || \
    curl -s -d "payload=$json" "$webhook" ; \
    sleep 5 ; \
done

You can also go the extra mile by filtering on region and disk type.

Pig mode

Because, why not?

text="DISPO https://www.online.net/fr/serveur-dedie/dedibox-xc"; json="{\"channel\": \"#test\", \"text\": \"$text\"}" ; while true ; do curl --silent https://www.online.net/fr/serveur-dedie/dedibox-xc | egrep -io '<option value="\w+">ssd / france / dc2</option>' && curl -s -d "payload=$json" "https://hooks.slack.com/services/XXX/XXXX/XXXX" ; sleep 5 ; done

Next step: simulate an order?