#!/bin/bash
# Copyright 2015 The Vanadium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# Starts an instance of measured and required services.
#
# mounttabled is started locally at IPADDR:PORT, mounting itself to the global
# mounttable at $GLOBAL_MT/users/$USER/$PREFIX/$DEVID. syncbased is started in
# the local mounttable at $PREFIX/$DEVID/syncbased.
# measured is started, creating a syncgroup published at the local syncbased as
# reached through the global mounttable:
# $GLOBAL_MT/users/$USER/$PREFIX/$DEVID/$PREFIX/$DEVID/syncbased
# Once the syncgroup is joined, sync is configured to use either the global or
# the local mounttable (unless the local mounttable IPADDR:PORT changes).
# measured drops most permissions on prefixes in the syncgroup. Full admin
# permissions are granted to $ADMIN (as a blessing extension of the same
# default blessing as the one running this script).

set -eu

source "${JIRI_ROOT}/experimental/projects/sensorlog_lite/src/v.io/x/sensorlog_lite/scripts/runner_lib.sh"

# Must be run with V23_CREDENTIALS set or through the agent.
# Optional environment variables: SL_PREFIX, SL_DEVID, SL_ADMIN, SL_IPADDR_PORT, SL_USER, SL_GLOBAL_MT, SL_TMPDIR
function main() {
  local -r PREFIX="${SL_PREFIX:-sl/measured}"
  local -r DEVID="${SL_DEVID:-$(gen_uuid)}"
  local -r ADMIN="${SL_ADMIN:-sl/client}"
  local -r NAME="${PREFIX}/${DEVID}"
  local -r IPADDR_PORT="${SL_IPADDR_PORT:-$(dig $(hostname) +short):8707}"
  local -r USER="${SL_USER:-$(get_user_email)}"
  local -r GLOBAL_MT="${SL_GLOBAL_MT:-/ns.dev.v.io:8101}"
  local -r TMPDIR="${SL_TMPDIR:-sltmp}/${NAME}"

  mkdir -p "${TMPDIR}"
  trap "kill_child_processes; exit 1" ERR EXIT
  run_mounttabled "${NAME}" "${IPADDR_PORT}" "${GLOBAL_MT}/users/${USER}"
  run_syncbased "/${IPADDR_PORT}" "${NAME}" "${TMPDIR}"
  run_measured "/${IPADDR_PORT}" "${NAME}" "${DEVID}" "${ADMIN}" \
      "${GLOBAL_MT}/users/${USER}/${NAME}/${NAME}/syncbased" \
      "${GLOBAL_MT}/users/${USER}"
  # Wait for signal.
  while true; do
    sleep 10
  done
}

main "$@"
