This turned out to be incredibly easy after having got my head around Openwhisk's simple trigger; action; rule model.
So I migrated my Python app to Openwhisk entirely rather than use the Bluemix Python buildpack or Bluemix Docker containers neither of which were appropriate to this task's simple needs.
I include a summary below. I wrote a more verbose version here.
As an added bonus I was able to remove a good deal of my own code and instead use Slack for notifications. As it was so simple to do, I include it in this answer.
The program
Openwhisk Python actions are python 2.7.
File sitemonitor.py
:
def main(inDict):
inTimeout = inDict.get('timeout', '4')
// A few function calls omitted for brevity
if state.errorCount == 0:
return {'text': "All sites OK"}
else:
return { 'text' : state.slackMessage }
main
takes a dictionary and returns a dictionary
Setting up the job
Create the sitemonitor
action
timeout
is a parameter specific to my app only.
$ wsk action create sitemonitor sitemonitor.py # default timeout of 4 seconds
or give the action a different timeout in a default parameter
$ wsk action update sitemonitor sitemonitor.py --param timeout 2 # seconds
Create the Slack package action monitorSlack
wsk package bind /whisk.system/slack monitorSlack \
--param url 'https://hooks.slack.com/services/...' \
--param username 'monitor-bot' \
--param channel '#general'
Find the Incoming Webhook URL from your Slack Team account
Create the composed monitor2slack
action
$ wsk action create monitor2slack --sequence sitemonitor,monitorSlack/post
Create the trigger
It will fire automatically every other hour
$ wsk trigger create monitor2hrs \
--feed /whisk.system/alarms/alarm \
--param cron '0 0 */2 * * *'
$ wsk trigger fire monitor2hrs # fire manually to test
Create the rule
$ wsk rule create monitorsites monitor2hrs monitor2slack
... and Openwhisk will do the rest.
References
Openwhisk documentation : very good
People at the #openwhisk
channel in the the Slack dW Open
Team were very helpful.