hlfw.ca

registry

ref: 5ddcb59618def30c1e17a651b29c9722dca82df2
dir: /monitor/

View raw version
#!/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
	}
}