ref: 5ddcb59618def30c1e17a651b29c9722dca82df2
dir: /monitor/
#!/bin/rc $argv0 = $0 fn usage { echo 'Usage: '$argv0' [-o] [-s svcfs]' >[1=2] exits 'usage' } svcfs=() order=1 while(~ $1 -*){ switch($1){ case -o; order=2 case * ~ $#* 1 && usage switch($1){ case -s; svcfs=(-s $2) case *; usage } shift } shift } ! ~ $#* 0 && usage # TODO: Authdom goes in first line of tuple, consider that as well fn update { for(f in `{svc/query $svcfs . status ok grep service}){ name=`{echo f | sed 's/.*service=//;s/ address=.*//'} address=`{echo f | sed 's/.*address=tcp!//;s/ .*//'} entry=$name^'/'^$address ~ $order 2 && entry=$address^'.'^$name test -f '/srv/'^$entry || srv $address $entry } for(f in `{svc/query $svcfs . status down | grep services}){ name=`{echo f | sed 's/.*service=//;s/ address=.*//'} address=`{echo f | sed 's/.*address=tcp!//;s/ .*//'} entry='/srv/'^$name^'.'^$address ~ $order 2 && entry='/srv/'^$address^'.'^$name test -f $entry && rm $entry } } fn watch { while(1){ update sleep 30 # Not the best way to watch for a service coming up. At worst it can take a full minute } }