#!/bin/rc

# mklocalreg REGNAME PORT
# make and export local static registry

switch($1){
case ''
	echo choose a name for this registry
	REGNAME=`{read}
 	echo choose a port to serve this registry on
	PORT=`{read}
case *
	REGNAME=$1
	switch($2){
		case ''
			echo choose a port for registry $REGNAME
			PORT=`{read}
		case *
			PORT=$2
	}
}

rfork ns
if (! test -d /tmp/grid/localreg) mkdir /tmp/grid/localreg
DIR=/tmp/grid/localreg/$REGNAME
mkdir $DIR
touch $DIR/new
touch $DIR/index

# registry/new file needs to be world writable. 
# note the potential for vandalism by spamming someone else's reg/new.

chmod 666 $DIR/new

echo starting registry listener
aux/listen1 -tv tcp!*!$PORT /bin/exportfs -r $DIR >/tmp/grid/log/reg$REGNAME &
NODEADDR=`{cat /tmp/grid/info/nodeaddr}
echo reg$REGNAME:$NODEADDR:$PORT:$DIR >>/tmp/grid/info/exports
echo $NODEADDR:$PORT:$DIR >/tmp/grid/svcout/$REGNAME
touch /tmp/grid/info/reg$REGNAME

echo tcp!127.0.0.1!$PORT >/tmp/grid/registries/$REGNAME
srv tcp!127.0.0.1!$PORT $REGNAME
sleep 1
g/local mntgen /g/r/$REGNAME
sleep 1
g/local mount /srv/$REGNAME /g/r/$REGNAME/r
touch /tmp/grid/info/reg$REGNAME
echo `{date} mklocalreg $REGNAME $PORT >>/tmp/grid/log/log

# update registry index every minute as long as there is an active session
while (test -e /tmp/grid/info/gridsession){
	DATA=`{cat $DIR/new}
	if (~ $DATA ??*) echo $DATA >>$DIR/index
	echo '' >/$DIR/new
	chmod 666 /$DIR/new
	sleep 60
} &

echo registry service started - dont forget to g/tellreg $REGNAME to your attached registries
