#!/bin/bash usage() { [ -n "$1" ] && { echo $1 echo } echo "Usage:" echo "$0 [-csv ] [-f] [-q] get|set" echo "Using Input CSV file given by -csv argument, either get all channel info, or set all channel info." echo "If not given, the file config.csv in the working directory is chosen" echo "Setting -f (force) will call the RPCs, without it, only print what would be sent" echo "Setting -q (quiet) will only output the CSV and errors" echo "" exit -1 } log() { [ $QUIET -eq 1 ] && return echo "# $*" } doget() { echo "# Generated on $(date)" echo "# Device,IPv4,Chan,Name,TimeSpec(UTC)" while IFS=, read -r dev ip chan name timespec do [ "${dev:0:1}" == "#" ] && continue cmd="mos --port ws://$ip/rpc call TimeSpec.Get '{\"idx\": $chan }'" log "$cmd" SPEC=$(eval $cmd | awk '/spec/ { print $2 }' | sed -e 's,",,g') echo "$dev,$ip,$chan,$name,$SPEC" done < $CONFIG } doset() { # Device,IPv4,Chan,Name,TimeSpec(UTC) while IFS=, read -r dev ip chan name timespec do [ "${dev:0:1}" == "#" ] && continue cmd="mos --port ws://$ip/rpc call TimeSpec.Clear '{\"idx\": $chan }'" log "$cmd" [ $FORCE -ne 0 ] && { eval $cmd } cmd="mos --port ws://$ip/rpc call TimeSpec.Add '{\"idx\": $chan, \"spec\": \"$timespec\" }'" log "$cmd" [ $FORCE -ne 0 ] && { eval $cmd } done < $CONFIG } VERB="get" CONFIG="config.csv" FORCE=0 QUIET=0 while [ $# -ne 0 ]; do case $1 in -f) FORCE=1 ;; -q) QUIET=1 ;; -csv) shift CONFIG=$1 ;; get) VERB="get" ;; set) VERB="set" ;; *) usage "Unknown commandline flag '$1'" ;; esac shift done [ ! -r $CONFIG ] && { echo "Cannot open file '$CONFIG'" exit -2 } case $VERB in get) doget ;; set) doset ;; *) echo "Unknown verb: $VERB" exit -3; ;; esac