diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a71be2c187e795cd5a499fcd91b0e6f3f3f7c53c..2eb7da69dbeb8bdeaa1fbab8fc7e4053480a716f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -54,10 +54,10 @@ test:all:
     - sudo cp build/clmcservice-SNAPSHOT.tar.gz /var/lib/lxc/test-runner/rootfs/vagrant/build
     - sudo lxc-attach -n test-runner -- pip3 install /vagrant/build/clmctest-SNAPSHOT.tar.gz
     - sudo lxc-attach -n test-runner -- pip3 install /vagrant/build/clmcservice-SNAPSHOT.tar.gz
-    - sudo lxc-attach -n test-runner -- pytest -s --pyargs clmctest.scripts
-    - sudo lxc-attach -n test-runner -- pytest -s --pyargs clmcservice.tests  
-    - sudo lxc-attach -n test-runner -- pytest -s --pyargs clmctest.inputs
-    - sudo lxc-attach -n test-runner -- pytest -s --pyargs clmctest.monitoring
+    - sudo lxc-attach -n test-runner -- pytest -s --tb=short -rfp --pyargs clmctest.scripts
+    - sudo lxc-attach -n test-runner -- pytest -s --tb=short -rfp --pyargs clmcservice.tests  
+    - sudo lxc-attach -n test-runner -- pytest -s --tb=short -rfp --pyargs clmctest.inputs
+    - sudo lxc-attach -n test-runner -- pytest -s --tb=short -rfp --pyargs clmctest.monitoring
   when: on_success      
   
 clean:
diff --git a/Vagrantfile b/Vagrantfile
index 89e39b315456fb4aebeab186932e679dc8df9089..a45ee26605c74dce29f9e5269e3fac7a3611b409 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -17,6 +17,21 @@ sed -i s/10.0.3/172.40.231/g /etc/default/lxc-net
 sed -i s/#LXC_DHCP_CONFILE/LXC_DHCP_CONFILE/g /etc/default/lxc-net
 service lxc-net restart
 
+# enable NTP
+# use network time to make sure we are synchronised
+echo "Disabling timesyncd..."
+timedatectl set-ntp no
+until timedatectl | grep -m 1 "Network time on: no";
+do
+  echo "Waiting for timesyncd to turn off.."
+  sleep 1
+done
+apt-get install ntp
+echo "timesync set to ntpd"
+
+# set timezone to London
+timedatectl set-timezone Europe/London
+
 SCRIPT
 
 Vagrant.configure("2") do |config|
diff --git a/Vagrantfile.libvirt b/Vagrantfile.libvirt
index 8f6a30b3af0d432db0c9ddc79398017f900942cd..39076c5073a7310c1b195df9c801a4ef559ab955 100644
--- a/Vagrantfile.libvirt
+++ b/Vagrantfile.libvirt
@@ -17,6 +17,21 @@ sed -i s/10.0.3/172.40.231/g /etc/default/lxc-net
 sed -i s/#LXC_DHCP_CONFILE/LXC_DHCP_CONFILE/g /etc/default/lxc-net
 service lxc-net restart
 
+# enable NTP
+# use network time to make sure we are synchronised
+echo "Disabling timesyncd..."
+timedatectl set-ntp no
+until timedatectl | grep -m 1 "Network time on: no";
+do
+  echo "Waiting for timesyncd to turn off.."
+  sleep 1
+done
+apt-get install ntp
+echo "timesync set to ntpd"
+
+# set timezone to London
+timedatectl set-timezone Europe/London
+
 SCRIPT
 
 Vagrant.configure("2") do |config|
diff --git a/scripts/clmc-agent/configure.sh b/scripts/clmc-agent/configure.sh
index 35226d643103e9fbcdf2c5799c371f33ded9791d..9f98a51303b1e363a9dbf125c6c775742cf82849 100755
--- a/scripts/clmc-agent/configure.sh
+++ b/scripts/clmc-agent/configure.sh
@@ -47,23 +47,23 @@ INFLUXDB_URL=$8
 DATABASE_NAME=$9
 
 TELEGRAF_CONF_DIR="/etc/telegraf"
-TELEGRAF_CONF_FILE=$TELEGRAF_CONF_DIR"/telegraf.conf"
-TELEGRAF_INCLUDE_CONF_DIR=$TELEGRAF_CONF_DIR"/telegraf.d"
-TELEGRAF_OUTPUT_CONF_FILE=$TELEGRAF_INCLUDE_CONF_DIR"/telegraf_output.conf"
+TELEGRAF_CONF_FILE=${TELEGRAF_CONF_DIR}"/telegraf.conf"
+TELEGRAF_INCLUDE_CONF_DIR=${TELEGRAF_CONF_DIR}"/telegraf.d"
+TELEGRAF_OUTPUT_CONF_FILE=${TELEGRAF_INCLUDE_CONF_DIR}"/telegraf_output.conf"
 
 #cat ${TELEGRAF_OUTPUT_CONF_FILE}
 
 # Replace template parameters on general configuration
-sed -i 's/$LOCATION/'$LOCATION'/g' $TELEGRAF_CONF_FILE
-sed -i 's/$SFC_ID/'$SFC_ID'/g' $TELEGRAF_CONF_FILE
-sed -i 's/$SFC_ID_INSTANCE/'$SFC_ID_INSTANCE'/g' $TELEGRAF_CONF_FILE
-sed -i 's/$SF_ID/'$SF_ID'/g' $TELEGRAF_CONF_FILE
-sed -i 's/$SF_ID_INSTANCE}}/'$SF_ID_INSTANCE'/g' $TELEGRAF_CONF_FILE
-sed -i 's/$IP_ENDPOINT_ID/'$IP_ENDPOINT_ID'/g' $TELEGRAF_CONF_FILE
-sed -i 's/$SR_ID/'$SR_ID'/g' $TELEGRAF_CONF_FILE
+sed -i 's/${LOCATION}/'${LOCATION}'/g' ${TELEGRAF_CONF_FILE}
+sed -i 's/${SFC_ID}/'${SFC_ID}'/g' ${TELEGRAF_CONF_FILE}
+sed -i 's/${SFC_ID_INSTANCE}/'${SFC_ID_INSTANCE}'/g' ${TELEGRAF_CONF_FILE}
+sed -i 's/${SF_ID}/'${SF_ID}'/g' ${TELEGRAF_CONF_FILE}
+sed -i 's/${SF_ID_INSTANCE}/'${SF_ID_INSTANCE}'/g' ${TELEGRAF_CONF_FILE}
+sed -i 's/${IP_ENDPOINT_ID}/'${IP_ENDPOINT_ID}'/g' ${TELEGRAF_CONF_FILE}
+sed -i 's/${SR_ID}/'${SR_ID}'/g' ${TELEGRAF_CONF_FILE}
 
 echo "Telegraf Output Configuration File: ${TELEGRAF_OUTPUT_CONF_FILE}"
 
 # Replace parameters in output configuration file
-sed -i 's|$INFLUXDB_URL|'$INFLUXDB_URL'|g' $TELEGRAF_OUTPUT_CONF_FILE
-sed -i 's/$DATABASE_NAME/'$DATABASE_NAME'/g' $TELEGRAF_OUTPUT_CONF_FILE
\ No newline at end of file
+sed -i 's|${INFLUXDB_URL}|'${INFLUXDB_URL}'|g' ${TELEGRAF_OUTPUT_CONF_FILE}
+sed -i 's/${DATABASE_NAME}/'${DATABASE_NAME}'/g' ${TELEGRAF_OUTPUT_CONF_FILE}
\ No newline at end of file
diff --git a/scripts/clmc-agent/configure_template.sh b/scripts/clmc-agent/configure_template.sh
deleted file mode 100755
index 136a266f7d7116671c51ff362e7645eaa9c59aaf..0000000000000000000000000000000000000000
--- a/scripts/clmc-agent/configure_template.sh
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/bash
-#/////////////////////////////////////////////////////////////////////////
-#//
-#// (c) University of Southampton IT Innovation Centre, 2017
-#//
-#// Copyright in this software belongs to University of Southampton
-#// IT Innovation Centre of Gamma House, Enterprise Road,
-#// Chilworth Science Park, Southampton, SO16 7NS, UK.
-#//
-#// This software may not be used, sold, licensed, transferred, copied
-#// or reproduced in whole or in part in any manner or form or in or
-#// on any media by any person other than in accordance with the terms
-#// of the Licence Agreement supplied with the software, or otherwise
-#// without the prior written consent of the copyright owners.
-#//
-#// This software is distributed WITHOUT ANY WARRANTY, without even the
-#// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-#// PURPOSE, except where stated in the Licence Agreement supplied with
-#// the software.
-#//
-#//      Created By :            Michael Boniface
-#//      Created Date :          18/12/2017
-#//      Created for Project :   FLAME
-#//
-#/////////////////////////////////////////////////////////////////////////
-
-TELEGRAF_CONF_DIR="/etc/telegraf"
-TELEGRAF_CONF_FILE=$TELEGRAF_CONF_DIR"/telegraf.conf"
-TELEGRAF_INCLUDE_CONF_DIR=$TELEGRAF_CONF_DIR"/telegraf.d"
-TELEGRAF_OUTPUT_CONF_FILE=$TELEGRAF_INCLUDE_CONF_DIR"/telegraf_output.conf"
-
-echo "Checking Telegraf installation"
-
-# Check the target telegraf directory exists
-if [ ! -d "$TELEGRAF_CONF_DIR" ]; then
-    echo "Error: Telegraf conf directory does not exist on target machine. Check that telegraf is installed "$TELEGRAF_CONF_DIR
-    exit 1
-fi
-
-# Check the target telegraf directory exists
-if [ ! -d $TELEGRAF_INCLUDE_CONF_DIR ]; then
-    echo "Error: Telegraf conf include directory does not exist on target machine. Check that telegraf is installed "$TELEGRAF_INCLUDE_CONF_DIR
-    exit 1
-fi
-
-# Copy configuration
-echo "Telegraf general config file: " $TELEGRAF_CONF_FILE
-(cat <<'EOF'
-[global_tags]
-  location="$LOCATION"
-  sfc="$SFC_ID"
-  sfc_i="$SFC_ID_INSTANCE"
-  sf="$SF_ID"
-  sf_i="$SF_ID_INSTANCE"
-  ipendpoint="$IP_ENDPOINT_ID"
-  sr="$SR_ID"
-[agent]
-  interval = "10s"
-  round_interval = true
-  metric_buffer_limit = 1000
-  flush_buffer_when_full = true
-  collection_jitter = "0s"
-  flush_interval = "10s"
-  flush_jitter = "0s"
-  debug = false
-  quiet = false
-  logfile = "/var/log/telegraf/telegraf.log"
-  hostname = ""
-EOF
-) > $TELEGRAF_CONF_FILE  
-
-echo "Telegraf output config file: " $TELEGRAF_OUTPUT_CONF_FILE
-(cat <<'EOF'
-[[outputs.influxdb]]
-  urls = ["$INFLUXDB_URL"]
-  database = "$DATABASE_NAME"
-  precision = "s"
-  timeout = "5s"
-EOF
-) > $TELEGRAF_OUTPUT_CONF_FILE
diff --git a/scripts/clmc-agent/install.sh b/scripts/clmc-agent/install.sh
index d82b94450ed6227446432ac230142169416866dc..93bdd81496e09e78c28c417dd143d2c27b89fad7 100755
--- a/scripts/clmc-agent/install.sh
+++ b/scripts/clmc-agent/install.sh
@@ -32,7 +32,9 @@ apt-get install wget -y
 
 echo "Installing Telegraf agent"
 
-TELEGRAF_VERSION=1.7.0~5618bb0-0
+TELEGRAF_VERSION=1.8.0~2736fa0-0
+#TELEGRAF_VERSION=1.7.0~5618bb0-0
+
 TELEGRAF_CHECKSUM=dc24932fa1aef9392582880c077dd2493b9f2c66babd7733a0654540bbb5003b
 
 # Install telegraf
@@ -40,7 +42,7 @@ TELEGRAF_CHECKSUM=dc24932fa1aef9392582880c077dd2493b9f2c66babd7733a0654540bbb500
 
 # load the runtime configuration for the artefact repository
 if [ ! -f ${REPO_ROOT}/reporc ]; then
-    echo "Cannot download FLIPS binaries as reporc file containing artefact repository credentials does not exist within user's home folder"
+    echo "Cannot download telegraf binary: reporc file containing artefact repository credentials does not exist in ${REPO_ROOT}/reporc"
     exit 1
 fi
 source ${REPO_ROOT}/reporc
@@ -48,10 +50,11 @@ source ${REPO_ROOT}/reporc
 wget --user ${REPO_USER} --password ${REPO_PASS} https://flame-nexus.it-innovation.soton.ac.uk/repository/flame-general/it-innovation/telegraf/${TELEGRAF_VERSION}/telegraf-${TELEGRAF_VERSION}.deb -O telegraf-${TELEGRAF_VERSION}.deb
 
 
-#sha256sum telegraf_${TELEGRAF_VERSION}_amd64.deb | grep $TELEGRAF_CHECKSUM > /dev/null
-#if [ $? == 1 ]; then
-#	echo "Telegraf download failed checksum"
-#	exit 1
-#fi
 dpkg -i telegraf-${TELEGRAF_VERSION}.deb
 
+# add telegraf to run as root for systemctl input plugin
+# this should not be required as the "systemctl status" command is available to no priviledged users
+# issued raised 
+sed -i s/User=telegraf/User=root/g /lib/systemd/system/telegraf.service
+systemctl daemon-reload
+systemctl restart telegraf.service
\ No newline at end of file
diff --git a/scripts/clmc-agent/telegraf.conf b/scripts/clmc-agent/telegraf.conf
index 6c5aed64e2cd00cfc227434bf25eca387d5fa6ae..07ac73a4dcf6a067a099ce629d9fc4f81bfb1ed2 100644
--- a/scripts/clmc-agent/telegraf.conf
+++ b/scripts/clmc-agent/telegraf.conf
@@ -33,19 +33,19 @@
 # Global tags can be specified here in key="value" format.
 [global_tags]
   # location of the data centre
-  location="$LOCATION"
+  location="${LOCATION}"
   # media service template id
-  sfc="$SFC_ID"
+  sfc="${SFC_ID}"
   # media service instance
-  sfc_i="$SFC_ID_INSTANCE"
+  sfc_i="${SFC_ID_INSTANCE}"
   # service function type
-  sf="$SF_ID"
+  sf="${SF_ID}"
   # service function instance id
-  sf_i="$SF_ID_INSTANCE"
+  sf_i="${SF_ID_INSTANCE}"
   # ipendpoint id aka surrogate instance
-  ipendpoint="$IP_ENDPOINT_ID"
+  ipendpoint="${IP_ENDPOINT_ID}"
   # the service router providing access to the network
-  sr="$SR_ID"
+  sr="${SR_ID}"
 
 # Configuration for telegraf agent
 [agent]
diff --git a/scripts/clmc-agent/telegraf_output.conf b/scripts/clmc-agent/telegraf_output.conf
index e77f2476c1d3d8ff330580fb5a8b33350041adf8..7521ac34a05a0c8f7ccdc166a772fbd2d0ee5544 100644
--- a/scripts/clmc-agent/telegraf_output.conf
+++ b/scripts/clmc-agent/telegraf_output.conf
@@ -29,9 +29,9 @@
   # Multiple urls can be specified but it is assumed that they are part of the same
   # cluster, this means that only ONE of the urls will be written to each interval.
   # urls = ["udp://127.0.0.1:8089"] # UDP endpoint example
-  urls = ["$INFLUXDB_URL"] # required
+  urls = ["${INFLUXDB_URL}"] # required
   # The target database for metrics (telegraf will create it if not exists)
-  database = "$DATABASE_NAME" # required
+  database = "${DATABASE_NAME}" # required
   # Precision of writes, valid values are "ns", "us" (or "µs"), "ms", "s", "m", "h".
   # note: using second precision greatly helps InfluxDB compression
   precision = "s"
diff --git a/scripts/clmc-service/install-clmc-service.sh b/scripts/clmc-service/install-clmc-service.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c1d93d99b34af7389ea81ec26868cbd19142f304
--- /dev/null
+++ b/scripts/clmc-service/install-clmc-service.sh
@@ -0,0 +1,126 @@
+#!/bin/bash
+
+# Get command line parameters
+if [ "$#" -ne 3 ]; then
+    echo "Error: illegal number of arguments: "$#
+    echo "Usage: install.sh INFLUX_URL DATABASE_NAME REPORT_PERIOD"
+    exit 1 
+fi
+
+INFLUX_URL=$1
+DATABASE_NAME=$2
+REPORT_PERIOD=$3
+
+## CLMC-SERVICE
+## ----------------------------------------------------------------------------------
+echo "----> Configuring virtualenvwrapper"
+export WORKON_HOME=$HOME/.virtualenvs
+source /usr/local/bin/virtualenvwrapper.sh
+
+# check the mkvirtualenv with a return value of 1 if version comes back correctly
+mkvirtualenv --version
+if [ $? -ne 1 ] ; then
+        echo "Failed: installing virtualenvwrapper"
+		exit 1
+fi
+
+# create CLMC virtual environment - and check
+echo "----> Making CLMC Python environment"
+mkvirtualenv CLMC
+if [ $? -ne 0 ] ; then
+        echo "Failed: creating CLMC python environment"
+		exit 1
+fi
+
+# switch the CLMC environment - and check
+echo "----> Switching to use CLMC python environment"
+workon CLMC
+if [ $? -ne 0 ] ; then
+        echo "Failed: switching to CLMC python environment"
+		exit 1
+fi
+
+# install tox - and check
+echo "----> Installing TOX"
+pip3 install tox
+tox --version
+if [ $? -ne 0 ] ; then
+        echo "Failed: installing tox"
+		exit 1
+fi
+
+# navigate to the clmc-webservice - and check
+echo "----> Moving to CLMC webservice"
+cd ${REPO_ROOT}/src/service
+if [ $? -ne 0 ] ; then
+        echo "Failed: could not find clmc-webservice"
+		exit 1
+fi
+
+# running tests using tox
+echo "----> Running tox"
+TOX_OUTPUT="$(tox)"
+# check if tox output contains the 'congratulations :)' bit for tests passed
+if [[ $TOX_OUTPUT != *"congratulations :)"* ]]; then
+  echo $TOX_OUTPUT
+  echo "CLMC service unit tests failed."
+  exit 1
+fi
+echo "----> Tox execution of unit tests passed successfully"
+
+# install the service
+echo "----> Installing CLMC web service"
+pip3 install  .
+if [ $? -ne 0 ] ; then
+        echo "Failed: installing clmc-webservice"
+		exit 1
+fi
+
+# create directory for CLMC service logs
+echo "----> Creating CLMC web service log directory"
+mkdir -p /var/log/flame/clmc
+
+# Install minioclmc as systemctl service
+# -----------------------------------------------------------------------
+mkdir -p /opt/flame/clmc
+start_script_file="/opt/flame/clmc/start.sh"
+echo "#!/bin/bash" > $start_script_file
+echo "export WORKON_HOME=${HOME}/.virtualenvs" >> $start_script_file
+echo "source /usr/local/bin/virtualenvwrapper.sh" >> $start_script_file
+echo "workon CLMC" >> $start_script_file
+echo "pserve ${REPO_ROOT}/src/service/production.ini &" >> $start_script_file
+
+chmod 755 $start_script_file
+
+file="/lib/systemd/system/flameclmc.service"
+echo "[Unit]" > $file
+echo "Description=flameclmc" >> $file
+echo "After=network.target" >> $file
+echo "" >> $file
+echo "[Service]" >> $file
+echo "Type=forking" >> $file
+echo "ExecStart=${start_script_file}" >> $file
+echo "" >> $file
+echo "[Install]" >> $file
+echo "WantedBy=multi-user.target" >> $file
+
+systemctl daemon-reload
+systemctl enable flameclmc.service
+systemctl start flameclmc.service
+
+# wait for the clmc service to start
+while ! nc -z localhost 9080
+do
+  echo "Waiting for clmc service port 9080 to be ready on localhost..."
+  sleep 5
+done
+
+# configure the CLMC service
+JSON="{\"aggregator_report_period\": ${REPORT_PERIOD}, \"aggregator_database_name\": \"${DATABASE_NAME}\", \"aggregator_database_url\": \"${INFLUX_URL}\"}"
+echo "CONFIG JSON=${JSON}"
+curl -H 'Content-Type: application/json' -X PUT -d "${JSON}" http://localhost:9080/aggregator/config
+
+# start the aggregator
+JSON="{\"action\": \"start\"}"
+echo "START ACTION JSON=${JSON}"
+curl -H 'Content-Type: application/json' -X PUT -d "${JSON}" http://localhost:9080/aggregator/control
\ No newline at end of file
diff --git a/scripts/clmc-service/install-neo4j.sh b/scripts/clmc-service/install-neo4j.sh
new file mode 100755
index 0000000000000000000000000000000000000000..64188c4444f5b9674bb71fc5c9b48ae424dbcd4c
--- /dev/null
+++ b/scripts/clmc-service/install-neo4j.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+# status of neo4j can be found using: journalctl -e -u neo4j
+# Directories: 
+#/etc/neo4j/neo4j.conf
+#/var/lib/neo4j/data
+#/var/log/neo4j
+#/var/lib/neo4j/metrics
+#/var/lib/neo4j/import
+#/usr/bin
+#/usr/share/neo4j/lib
+#/var/lib/neo4j/plugins
+#
+#admin tool is neo4j-admin
+#
+# bolt 7687
+# http 7474 including the browser on localhost:7474
+# https 7473
+
+sudo apt update
+sudo apt install wget openjdk-8-jdk -y
+
+# configure apt
+wget -O - https://debian.neo4j.org/neotechnology.gpg.key | sudo apt-key add -
+echo 'deb https://debian.neo4j.org/repo stable/' | sudo tee -a /etc/apt/sources.list.d/neo4j.list
+apt-get update
+
+# add neo4j user with sudo permissions
+useradd --comment 'neo4j' --create-home neo4j --shell /bin/bash
+echo "neo4j ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
+
+# install neo4j as neo4j user
+# when installed as root the systemctl service fails to start as it expects to be run as neo4j user
+# there's some directories owned as root that neo4j wants to write to but cannot
+# the following set of commands install everything as neo4j with some run as sudo.
+# Expected to only have to run the install as neo4j however it does not work unless all of these are
+# run as neo4j. hence the weird su neo4j -c "sudo..."
+su neo4j -c "sudo apt-get install neo4j=1:3.4.0 -y"
+
+su neo4j -c "sed -i s/\#dbms.connectors.default_listen_address=0.0.0.0/dbms.connectors.default_listen_address=0.0.0.0/g /etc/neo4j/neo4j.conf"
+su neo4j -c "sed -i s/\#dbms.connector.bolt.listen_address=:7687/dbms.connector.bolt.listen_address=0.0.0.0:7687/g /etc/neo4j/neo4j.conf"
+
+# set initial password before starting 
+su neo4j -c "neo4j-admin set-initial-password admin"
+
+# install service
+su neo4j -c "sudo systemctl enable neo4j"
+su neo4j -c "sudo systemctl start neo4j"
+
+### waiting for the service to start
+end="$((SECONDS+60))"
+while true; do
+    nc -w 2 localhost 7687 && break
+    [[ "${SECONDS}" -ge "${end}" ]] && exit 1
+    sleep 1
+done
+
+apt-get -y install python3 python3-pip
+update-alternatives --install /usr/bin/python python /usr/bin/python3 10
+apt-get update
+pip3 install influxdb py2neo
diff --git a/scripts/clmc-service/install-tick-stack.sh b/scripts/clmc-service/install-tick-stack.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f52fce9a09827b71237ba915eb0543acaa2fd9a1
--- /dev/null
+++ b/scripts/clmc-service/install-tick-stack.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+echo "----> Installing Tick Stack"
+# Define tickstack software versions
+INFLUX_VERSION=1.5.2
+INFLUX_CHECKSUM=42fede7b497bdf30d4eb5138db218d1add986fca4fce4a8bcd9c7d6dabaf572a
+
+KAPACITOR_VERSION=1.4.1
+KAPACITOR_CHECKSUM=eea9b215f241906570eafe3857e1d4c5
+
+CHRONOGRAF_VERSION=1.4.4.2
+CHRONOGRAF_CHECKSUM=eea6915aa6db8f134fcd3b095e863b773bfb3a16a26e346dd65904a07df97963
+
+# install virtualenvwrapper to manage python environments - and check
+apt-get update
+echo "----> Installing Python3 and Pip3"
+apt-get install -y python3 python3-pip wget curl
+update-alternatives --install /usr/bin/python python /usr/bin/python3 10
+
+echo "----> Installing virtualenv and wrapper"
+apt-get install -y python3-virtualenv virtualenvwrapper
+pip3 install virtualenv
+pip3 install virtualenvwrapper
+
+# install influx
+echo "----> Installing InfluxDB"
+wget https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUX_VERSION}_amd64.deb 2> /dev/null
+sha256sum influxdb_${INFLUX_VERSION}_amd64.deb | grep $INFLUX_CHECKSUM > /dev/null
+if [ $? == 1 ]; then
+	echo "influx download failed checksum"
+	exit 1
+fi
+dpkg -i influxdb_${INFLUX_VERSION}_amd64.deb
+
+# install kapacitor
+echo "----> Installing Kapacitor"
+wget https://dl.influxdata.com/kapacitor/releases/kapacitor_${KAPACITOR_VERSION}_amd64.deb 2> /dev/null
+md5sum kapacitor_${KAPACITOR_VERSION}_amd64.deb | grep $KAPACITOR_CHECKSUM > /dev/null
+if [ $? == 1 ]; then
+	echo "Kapacitor download failed checksum"
+	exit 1
+fi
+dpkg -i kapacitor_${KAPACITOR_VERSION}_amd64.deb
+
+# install Chronograf
+echo "----> Installing Chronograph"
+wget https://dl.influxdata.com/chronograf/releases/chronograf_${CHRONOGRAF_VERSION}_amd64.deb 2> /dev/null
+sha256sum chronograf_${CHRONOGRAF_VERSION}_amd64.deb | grep $CHRONOGRAF_CHECKSUM > /dev/null
+if [ $? == 1 ]; then
+	echo "Chronograf download failed checksum"
+	exit 1
+fi
+dpkg -i chronograf_${CHRONOGRAF_VERSION}_amd64.deb
+
+systemctl start influxdb
+systemctl start kapacitor
+systemctl start chronograf
+
diff --git a/scripts/clmc-service/install.sh b/scripts/clmc-service/install.sh
index cee52f13204bc2e0ceede51118c0273d3323223b..12467cd31e722d638538414ebf1582470b8d5619 100755
--- a/scripts/clmc-service/install.sh
+++ b/scripts/clmc-service/install.sh
@@ -27,187 +27,11 @@
 # Force fail on command fail (off for now as virtualenvwrapper install fails)
 # set -euo pipefail
 
+# Ensure everything runs in directory of the parent script
+cd `dirname $0`
 
-echo "Configuring CLMC service"
-
-# Get command line parameters
-if [ "$#" -ne 3 ]; then
-    echo "Error: illegal number of arguments: "$#
-    echo "Usage: install.sh INFLUX_URL DATABASE_NAME REPORT_PERIOD"
-    exit 1 
-fi
-
-INFLUX_URL=$1
-DATABASE_NAME=$2
-REPORT_PERIOD=$3
-
-# Define tickstack software versions
-INFLUX_VERSION=1.5.2
-INFLUX_CHECKSUM=42fede7b497bdf30d4eb5138db218d1add986fca4fce4a8bcd9c7d6dabaf572a
-
-KAPACITOR_VERSION=1.4.1
-KAPACITOR_CHECKSUM=eea9b215f241906570eafe3857e1d4c5
-
-CHRONOGRAF_VERSION=1.4.4.2
-CHRONOGRAF_CHECKSUM=eea6915aa6db8f134fcd3b095e863b773bfb3a16a26e346dd65904a07df97963
-
-# install virtualenvwrapper to manage python environments - and check
-apt-get update
-echo "----> Installing Python3 and Pip3"
-apt-get install -y python3 python3-pip wget curl
-update-alternatives --install /usr/bin/python python /usr/bin/python3 10
-
-echo "----> Installing virtualenv and wrapper"
-apt-get install -y python3-virtualenv virtualenvwrapper
-pip3 install virtualenv
-pip3 install virtualenvwrapper
-
-# install influx
-wget https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUX_VERSION}_amd64.deb 2> /dev/null
-sha256sum influxdb_${INFLUX_VERSION}_amd64.deb | grep $INFLUX_CHECKSUM > /dev/null
-if [ $? == 1 ]; then
-	echo "influx download failed checksum"
-	exit 1
-fi
-dpkg -i influxdb_${INFLUX_VERSION}_amd64.deb
-
-# install kapacitor
-wget https://dl.influxdata.com/kapacitor/releases/kapacitor_${KAPACITOR_VERSION}_amd64.deb 2> /dev/null
-md5sum kapacitor_${KAPACITOR_VERSION}_amd64.deb | grep $KAPACITOR_CHECKSUM > /dev/null
-if [ $? == 1 ]; then
-	echo "Kapacitor download failed checksum"
-	exit 1
-fi
-dpkg -i kapacitor_${KAPACITOR_VERSION}_amd64.deb
-
-# install Chronograf
-wget https://dl.influxdata.com/chronograf/releases/chronograf_${CHRONOGRAF_VERSION}_amd64.deb 2> /dev/null
-sha256sum chronograf_${CHRONOGRAF_VERSION}_amd64.deb | grep $CHRONOGRAF_CHECKSUM > /dev/null
-if [ $? == 1 ]; then
-	echo "Chronograf download failed checksum"
-	exit 1
-fi
-dpkg -i chronograf_${CHRONOGRAF_VERSION}_amd64.deb
-
-systemctl start influxdb
-systemctl start kapacitor
-systemctl start chronograf
-
-## CLMC-SERVICE
-## ----------------------------------------------------------------------------------
-echo "----> Configuring virtualenvwrapper"
-export WORKON_HOME=$HOME/.virtualenvs
-source /usr/local/bin/virtualenvwrapper.sh
-
-# check the mkvirtualenv with a return value of 1 if version comes back correctly
-mkvirtualenv --version
-if [ $? -ne 1 ] ; then
-        echo "Failed: installing virtualenvwrapper"
-		exit 1
-fi
-
-# create CLMC virtual environment - and check
-echo "----> Making CLMC Python environment"
-mkvirtualenv CLMC
-if [ $? -ne 0 ] ; then
-        echo "Failed: creating CLMC python environment"
-		exit 1
-fi
-
-# switch the CLMC environment - and check
-echo "----> Switching to use CLMC python environment"
-workon CLMC
-if [ $? -ne 0 ] ; then
-        echo "Failed: switching to CLMC python environment"
-		exit 1
-fi
-
-# install tox - and check
-echo "----> Installing TOX"
-pip3 install tox
-tox --version
-if [ $? -ne 0 ] ; then
-        echo "Failed: installing tox"
-		exit 1
-fi
-
-# navigate to the clmc-webservice - and check
-echo "----> Moving to CLMC webservice"
-cd ${REPO_ROOT}/src/service
-if [ $? -ne 0 ] ; then
-        echo "Failed: could not find clmc-webservice"
-		exit 1
-fi
-
-# running tests using tox
-echo "----> Running tox"
-TOX_OUTPUT="$(tox)"
-# check if tox output contains the 'congratulations :)' bit for tests passed
-if [[ $TOX_OUTPUT != *"congratulations :)"* ]]; then
-  echo $TOX_OUTPUT
-  echo "CLMC service unit tests failed."
-  exit 1
-fi
-echo "----> Tox execution of unit tests passed successfully"
-
-# install the service
-echo "----> Installing CLMC web service"
-pip3 install  .
-if [ $? -ne 0 ] ; then
-        echo "Failed: installing clmc-webservice"
-		exit 1
-fi
-
-# create directory for CLMC service logs
-echo "----> Creating CLMC web service log directory"
-mkdir -p /var/log/flame/clmc
-
-# create directory for CLMC service config
-echo "----> Creating CLMC web service config directory"
-mkdir -p /etc/flame/clmc
-
-# Install minioclmc as systemctl service
-# -----------------------------------------------------------------------
-mkdir -p /opt/flame/clmc
-start_script_file="/opt/flame/clmc/start.sh"
-echo "#!/bin/bash" > $start_script_file
-echo "export WORKON_HOME=${HOME}/.virtualenvs" >> $start_script_file
-echo "source /usr/local/bin/virtualenvwrapper.sh" >> $start_script_file
-echo "workon CLMC" >> $start_script_file
-echo "pserve ${REPO_ROOT}/src/service/production.ini &" >> $start_script_file
-
-chmod 755 $start_script_file
-
-file="/lib/systemd/system/flameclmc.service"
-echo "[Unit]" > $file
-echo "Description=flameclmc" >> $file
-echo "After=network.target" >> $file
-echo "" >> $file
-echo "[Service]" >> $file
-echo "Type=forking" >> $file
-echo "ExecStart=${start_script_file}" >> $file
-echo "" >> $file
-echo "[Install]" >> $file
-echo "WantedBy=multi-user.target" >> $file
-
-systemctl daemon-reload
-systemctl enable flameclmc.service
-systemctl start flameclmc.service
-
-# wait for the clmc service to start
-while ! nc -z localhost 9080
-do
-  echo "Waiting for clmc service port 9080 to be ready on localhost..."
-  sleep 5
-done
-
-# configure the CLMC service
-JSON="{\"aggregator_report_period\": ${REPORT_PERIOD}, \"aggregator_database_name\": \"${DATABASE_NAME}\", \"aggregator_database_url\": \"${INFLUX_URL}\"}"
-echo "CONFIG JSON=${JSON}"
-curl -H 'Content-Type: application/json' -X PUT -d "${JSON}" http://localhost:9080/aggregator/config
-
-# start the aggregator
-JSON="{\"action\": \"start\"}"
-echo "START ACTION JSON=${JSON}"
-curl -H 'Content-Type: application/json' -X PUT -d "${JSON}" http://localhost:9080/aggregator/control
+echo "Provisioning CLMC service"
 
+./install-tick-stack.sh $@
+./install-clmc-service.sh $@
+./install-neo4j.sh $@
diff --git a/scripts/test/fixture.sh b/scripts/test/fixture.sh
index 26a5058911d8a0a23bc79982575fd029b1555a00..907d675215c77785b30c5c9b0757de470af23f7c 100755
--- a/scripts/test/fixture.sh
+++ b/scripts/test/fixture.sh
@@ -1,8 +1,8 @@
 #!/bin/bash
 
-usage() { 
+usage() {
     echo "Usage: $0 create|start|stop|destroy [-f config_file] [-r repo_root] [-c service_name]" 1>&2
-    exit 1 
+    exit 1
 }
 
 create() {
@@ -30,11 +30,11 @@ create() {
         cp -rf ${repo_root}/src ${container_vagrant_dir}
 
         # start the container
-        echo "Starting: ${service_name}"        
+        echo "Starting: ${service_name}"
         lxc-start -n ${service_name}
         echo "Waiting for container to start: ${service_name}"
-        STARTED="0"        
-        while [ "$STARTED" == "0" ]; do STARTED=$(lxc-info -n ${service_name} -i | wc -l); done; 
+        STARTED="0"
+        while [ "$STARTED" == "0" ]; do STARTED=$(lxc-info -n ${service_name} -i | wc -l); done;
 
         # provision software into each container
         echo "Provisioning: ${service_name}"
@@ -69,20 +69,23 @@ create() {
             cmd=/vagrant/scripts/clmc-agent/install.sh
             lxc-attach -n ${service_name} -v REPO_ROOT="/vagrant" -- ${cmd}
 
+            # stop telegraf before changing the configs
+            lxc-attach -n ${service_name} -- service telegraf stop
+
             # copy telegraf configuration templates
             cp -f ${repo_root}/scripts/clmc-agent/telegraf.conf ${container_dir}/etc/telegraf/
             cp -f ${repo_root}/scripts/clmc-agent/telegraf_output.conf ${container_dir}/etc/telegraf/telegraf.d/
-            cp ${repo_root}/src/test/clmctest/services/${sf_id}/telegraf_${sf_id}.conf ${container_dir}/etc/telegraf/telegraf.d/
+            # copy the 'host' config into all service containers
+            cp ${repo_root}/src/test/clmctest/services/host/telegraf*.conf ${container_dir}/etc/telegraf/telegraf.d/
+            # copy the service-specific config
+            cp ${repo_root}/src/test/clmctest/services/${sf_id}/telegraf*.conf ${container_dir}/etc/telegraf/telegraf.d/
 
             # replace telegraf template with container parameters
-            # @todo do we really need both scripts to do this?
-            cmd=/vagrant/scripts/clmc-agent/configure_template.sh
-            lxc-attach -n ${service_name} -- ${cmd}
             cmd="/vagrant/scripts/clmc-agent/configure.sh ${location} ${sfc_id} ${sfc_id_instance} ${sf_id} ${sf_id_instance} ${ipendpoint_id} ${sr_id} ${influxdb_url} ${database_name}"
             lxc-attach -n ${service_name} -- ${cmd}
 
             # start telegraf
-            lxc-attach -n ${service_name} -- service telegraf restart
+            lxc-attach -n ${service_name} -- service telegraf start
         fi
 
         # set forward ports
@@ -96,12 +99,12 @@ create() {
                 host_port=$(_jq '.host')
                 iptables -t nat -A PREROUTING -p tcp -i enp0s3 --dport ${host_port} -j DNAT --to-destination ${ip}:${guest_port}
             done
-        fi        
+        fi
     fi
 }
 
 start() {
-    service_name=$1 
+    service_name=$1
     if lxc-info -n ${service_name}; then
         echo "Starting container: ${service_name}"
         lxc-start -n ${service_name}
@@ -109,7 +112,7 @@ start() {
 }
 
 stop() {
-    service_name=$1  
+    service_name=$1
     if lxc-info -n ${service_name}; then
         echo "Stopping container: ${service_name}"
         lxc-stop -n ${service_name}
@@ -142,8 +145,8 @@ destroy() {
                 host_port=$(_jq '.host')
                 iptables -t nat -D PREROUTING -p tcp -i enp0s3 --dport ${host_port} -j DNAT --to-destination ${ip}:${guest_port}
             done
-        fi        
-    fi    
+        fi
+    fi
 }
 
 # inc option index by 1 as first argument is the command and not parsed by getopts
@@ -159,7 +162,7 @@ while getopts "hf:r:c:" opt; do
   case $opt in
     h) usage; exit ;;
     f) config_file=${OPTARG} ;;
-    r) repo_root=${OPTARG} ;;        
+    r) repo_root=${OPTARG} ;;
     c) container=${OPTARG} ;;
     \?) usage ;;
   esac
@@ -179,7 +182,7 @@ if [ ! -d ${repo_root} ]; then
     exit 1
 fi
 
-# iterate of list of services in configuration file 
+# iterate of list of services in configuration file
 command=$1
 service_names=$(jq -r '.[].name' ${config_file})
 for service_name in $service_names; do
@@ -193,10 +196,10 @@ for service_name in $service_names; do
                 start ${service_name} ${config_file} ${repo_root}
                 ;;
             stop)
-                stop ${service_name} ${config_file} ${repo_root} 
+                stop ${service_name} ${config_file} ${repo_root}
                 ;;
             destroy)
-                destroy ${service_name} ${config_file} ${repo_root} 
+                destroy ${service_name} ${config_file} ${repo_root}
                 ;;
             *)
                 usage
diff --git a/src/service/clmcservice/aggregationapi/views.py b/src/service/clmcservice/aggregationapi/views.py
index 1e8c9dbe79af5ea07653b45162dd5219a4ed0d2d..e59f030ba86c441aa59804de99e8a58e97a5002e 100644
--- a/src/service/clmcservice/aggregationapi/views.py
+++ b/src/service/clmcservice/aggregationapi/views.py
@@ -349,3 +349,41 @@ class RoundTripTimeQuery(object):
         reverse_data_delay = (8/10**6) * (response_size / bandwidth) * (packet_size / (packet_size - packet_header_size))
 
         return forward_latency + forward_data_delay + service_delay + reverse_latency + reverse_data_delay
+
+@view_defaults(route_name='sfemc_config', renderer='json')
+class SFEMCMockConfig(object):
+    """
+    A class-based view for accessing and mutating the configuration of the aggregator.
+    """
+
+    def __init__(self, request):
+        """
+        Initialises the instance of the view with the request argument.
+
+        :param request: client's call request
+        """
+
+        self.request = request
+
+    def get(self):
+        """
+        A GET API call for endpoint configuration.
+
+        :return: A JSON response with the configuration of the aggregator.
+        """
+
+        log.debug("\Getting endpoint configuration\n")
+
+        config = {"key": "hello"}
+
+        return config
+
+    def put(self):
+        """
+        A PUT API call for the status of the aggregator.
+
+        :return: A JSON response to the PUT call - essentially with the new configured data and comment of the state of the aggregator
+        :raises HTTPBadRequest: if request body is not a valid JSON for the configurator
+        """
+
+        log.debug("\Putting endpoint configuration\n")
diff --git a/src/service/clmcservice/test_sr_mock_view.py b/src/service/clmcservice/test_sr_mock_view.py
new file mode 100644
index 0000000000000000000000000000000000000000..ddf51a9cc6f7a5348aed31466e5002a703dd8665
--- /dev/null
+++ b/src/service/clmcservice/test_sr_mock_view.py
@@ -0,0 +1,49 @@
+import pytest
+from pyramid import testing
+from pyramid.httpexceptions import HTTPBadRequest
+from time import sleep
+from clmcservice.utilities import CONFIG_ATTRIBUTES, PROCESS_ATTRIBUTE, RUNNING_FLAG, MALFORMED_FLAG, URL_REGEX
+import os
+import signal
+
+
+class TestSFEMCMockAPI(object):
+
+    @pytest.fixture(autouse=True)
+    def app_config(self):
+        print("app_config")
+        self.config = testing.setUp()
+
+        # endpoint
+        # sr
+        # sfc_i
+        # sf_i
+ 
+        self.config.add_settings({
+            'my_endpoint_1': {'sfc_i': 'my_sfc_i_1', 'sf_i': 'my_sf_i_1', 'sr': 'my_sr_1'},
+            'my_endpoint_2': {'sfc_i': 'my_sfc_i_2', 'sf_i': 'my_sf_i_2', 'sr': 'my_sr_2'}})
+
+        yield
+
+        testing.tearDown()
+        
+
+    def test_GET_config(self):
+        print("Test get")
+
+        # nested import so that importing the class view is part of the test itself
+        from clmcservice.views import SFEMCMockConfig  
+
+        request = testing.DummyRequest()
+        response = SFEMCMockConfig(request).get()
+
+        print("response={0}".format(response))
+
+    @pytest.mark.parametrize("input_body, output_value", [
+        ('{"aggregator_report_period": 10, "aggregator_database_name": "CLMCMetrics", "aggregator_database_url": "http://171.40.231.51:8086"}',
+         {'aggregator_report_period': 10, 'aggregator_database_name': "CLMCMetrics", 'aggregator_database_url': "http://171.40.231.51:8086"}),
+    ])
+    def test_PUT_config(self, input_body, output_value):
+        print("Test put")
+
+    
\ No newline at end of file
diff --git a/src/test/clmctest/dashboards/README.md b/src/test/clmctest/dashboards/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..cb5454cc812b7f2d1a958b95b4b7aeabbb74c89e
--- /dev/null
+++ b/src/test/clmctest/dashboards/README.md
@@ -0,0 +1,63 @@
+# Sample Chronograf Dashboards
+
+This folder contains several sample dashboards for use in Chronograf.
+
+## Loading a dashboard
+
+To load a dashboard into an existing Chronograf service, use the following `curl` command:
+
+```shell
+curl -i -XPOST -H "Content-Type: application/json" http://<service IP>:8888/chronograf/v1/dashboards -d @someFile.json
+```
+
+## Saving a dashboard
+
+To save a dashboard use:
+
+```shell
+wget http://<service IP>:8888/chronograf/v1/dashboards/<dashboard ID> -O - | jq '.' > someFile.json
+```
+
+The pipe into the `jq` command is not strictly necessary, it is there to pretty-print the JSON.
+
+## Overview
+
+### dc_dash.json
+
+Displays the average CPU usage over time for an entire data centre. It has a dashboard variable for the `location` field.
+
+### sf_dash.json
+
+The service function dashboard has two dashboard variables to choose two different service functions to display side by side (left and right column).
+
+Each column displays the total network traffic sent and received in MB over time (1 minute intervals) in the top chart and the average network traffic rate in MB/s for sent and received traffic in the bottom chart (1 minute intervals).
+
+To get the top chart, a nested select statement is used:
+
+```sql
+select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last("bytes_recv") / 1048576 AS "RX_MB", last("bytes_sent") / 1048576 AS "TX_MB" FROM "MSDemo"."autogen"."net" WHERE time > :dashboardTime: AND "sf"=:sf1: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)
+```
+
+(The constant 1048576 is 1024*1024)
+
+The inner select groups by ipendpoint and time, taking the maximum value in each time period for each ipendpoint and the outer select queries over the result of the inner select but then groups only by time.
+
+The derivative of the first chart requires a further nested select:
+
+```sql
+select derivative(total_RX_MB, 1m) / 60 as RX_MB_per_s, derivative(total_TX_MB, 1m) / 60 as TX_MB_per_s from (select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last("bytes_recv") / 1048576 AS "RX_MB", last("bytes_sent") / 1048576 AS "TX_MB" FROM "MSDemo"."autogen"."net" WHERE time > :dashboardTime: AND "sf"=:sf1: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m))
+```
+
+The outer-most select taakes the derivative of the first chart for each data set separately. The derivative function is parameterised to understand it is over a 1m period but then the result is divided by 60 to give an average MB/s in each 1 minute period.
+
+### minio_dash.json
+
+The minio dashboard has two dashboard variables to choose two different ipendpoints to display side by side (left and right column). Minio endpoints must be chosen for all features to work.
+
+The top chart shows the percentage of requests being served in less than a fixed set up time periods. This performance metric would highlight a service endpoint which was struggling to service demand.
+
+The other charts show network traffic using a similar formulation to the `sf_dash` described above.
+
+### nginx_dash.json
+
+There are no dashboard variables on this dashboard: it is hard-coded to show the `nginx_1_ep1` and `nginx_1_ep2` endpoints. Various charts (network, CPU, responses per second) are displayed.
diff --git a/src/test/clmctest/dashboards/dc_dash.json b/src/test/clmctest/dashboards/dc_dash.json
new file mode 100644
index 0000000000000000000000000000000000000000..7d98cf5c9422218b10513de1e66564c78450a639
--- /dev/null
+++ b/src/test/clmctest/dashboards/dc_dash.json
@@ -0,0 +1,147 @@
+{
+  "id": 4,
+  "cells": [
+    {
+      "i": "5df7003f-6367-40e1-9eb4-c3ac9d92b05c",
+      "x": 0,
+      "y": 0,
+      "w": 6,
+      "h": 4,
+      "name": "Mean %CPU",
+      "queries": [
+        {
+          "query": "SELECT mean(\"cpu_usage\") AS \"mean_cpu_usage\" FROM \"MSDemo\".\"autogen\".\"procstat\" WHERE time > :dashboardTime: AND \"location\"= :location: GROUP BY time(:interval:) FILL(null)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT mean(\"cpu_usage\") AS \"mean_cpu_usage\" FROM \"MSDemo\".\"autogen\".\"procstat\" WHERE time > :dashboardTime: AND \"location\"= :location: GROUP BY time(:interval:) FILL(null)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "Mean %CPU",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/4/cells/5df7003f-6367-40e1-9eb4-c3ac9d92b05c"
+      }
+    }
+  ],
+  "templates": [
+    {
+      "tempVar": ":location:",
+      "values": [
+        {
+          "value": "DC3",
+          "type": "tagValue",
+          "selected": true
+        }
+      ],
+      "id": "51e972f9-c4c3-4bcf-a264-9f95ffa86017",
+      "type": "tagValues",
+      "label": "",
+      "query": {
+        "influxql": "SHOW TAG VALUES ON :database: FROM :measurement: WITH KEY=:tagKey:",
+        "db": "MSDemo",
+        "measurement": "cpu",
+        "tagKey": "location",
+        "fieldKey": ""
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/4/templates/51e972f9-c4c3-4bcf-a264-9f95ffa86017"
+      }
+    }
+  ],
+  "name": "Data Centre",
+  "organization": "default",
+  "links": {
+    "self": "/chronograf/v1/dashboards/4",
+    "cells": "/chronograf/v1/dashboards/4/cells",
+    "templates": "/chronograf/v1/dashboards/4/templates"
+  }
+}
diff --git a/src/test/clmctest/dashboards/minio_dash.json b/src/test/clmctest/dashboards/minio_dash.json
new file mode 100644
index 0000000000000000000000000000000000000000..906365095d80ef5a7f9c85d21053a9e95ba4aafb
--- /dev/null
+++ b/src/test/clmctest/dashboards/minio_dash.json
@@ -0,0 +1,720 @@
+{
+  "id": 3,
+  "cells": [
+    {
+      "i": "e62df88a-1e9c-4055-a157-2e01f9f340f2",
+      "x": 6,
+      "y": 12,
+      "w": 6,
+      "h": 4,
+      "name": "minio2: Network RX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_recv\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio2: GROUP BY time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_recv\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio2: GROUP BY time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "19960cdc-ba07-4374-815e-83ac91d2d09c",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "0dba565e-1e38-4632-817c-30bc795ae63b",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "cc618b53-490d-43f5-aac5-103672a87c2f",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/e62df88a-1e9c-4055-a157-2e01f9f340f2"
+      }
+    },
+    {
+      "i": "0e1b3956-71c4-4130-80f3-b69fcc9831d8",
+      "x": 0,
+      "y": 12,
+      "w": 6,
+      "h": 4,
+      "name": "minio1: Network RX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_recv\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio1: GROUP BY time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_recv\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio1: GROUP BY time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "19960cdc-ba07-4374-815e-83ac91d2d09c",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "0dba565e-1e38-4632-817c-30bc795ae63b",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "cc618b53-490d-43f5-aac5-103672a87c2f",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/0e1b3956-71c4-4130-80f3-b69fcc9831d8"
+      }
+    },
+    {
+      "i": "ab98bded-9b3d-43f1-bf4e-ba21f692cae9",
+      "x": 6,
+      "y": 8,
+      "w": 6,
+      "h": 4,
+      "name": "minio2: Network TX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio2: GROUP BY time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio2: GROUP BY time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "19960cdc-ba07-4374-815e-83ac91d2d09c",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "0dba565e-1e38-4632-817c-30bc795ae63b",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "cc618b53-490d-43f5-aac5-103672a87c2f",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/ab98bded-9b3d-43f1-bf4e-ba21f692cae9"
+      }
+    },
+    {
+      "i": "f36a8d10-2750-46a7-810f-34399c4e9639",
+      "x": 0,
+      "y": 8,
+      "w": 6,
+      "h": 4,
+      "name": "minio1: Network TX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio1: GROUP BY time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"=:minio1: GROUP BY time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "19960cdc-ba07-4374-815e-83ac91d2d09c",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "0dba565e-1e38-4632-817c-30bc795ae63b",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "cc618b53-490d-43f5-aac5-103672a87c2f",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/f36a8d10-2750-46a7-810f-34399c4e9639"
+      }
+    },
+    {
+      "i": "bb5e93f2-113c-46a1-ad10-da7fefe67c77",
+      "x": 6,
+      "y": 0,
+      "w": 6,
+      "h": 8,
+      "name": "minio2: Response time",
+      "queries": [
+        {
+          "query": "SELECT 100*last(\"0.001\") / last(\"count\") AS \"0.001\", 100*last(\"0.003\") / last(\"count\") AS \"0.003\", 100*last(\"0.005\") / last(\"count\") AS \"0.005\", 100*last(\"0.1\") / last(\"count\") AS \"0.1\", 100*last(\"0.5\") / last(\"count\") AS \"0.5\", 100*last(\"1\") / last(\"count\") AS \"1\" FROM \"MSDemo\".\"autogen\".\"minio_http_requests_duration_seconds\" WHERE time > :dashboardTime: and \"ipendpoint\"=:minio2: GROUP BY time(:interval:) FILL(null)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT 100*last(\"0.001\") / last(\"count\") AS \"0.001\", 100*last(\"0.003\") / last(\"count\") AS \"0.003\", 100*last(\"0.005\") / last(\"count\") AS \"0.005\", 100*last(\"0.1\") / last(\"count\") AS \"0.1\", 100*last(\"0.5\") / last(\"count\") AS \"0.5\", 100*last(\"1\") / last(\"count\") AS \"1\" FROM \"MSDemo\".\"autogen\".\"minio_http_requests_duration_seconds\" WHERE time > :dashboardTime: and \"ipendpoint\"=:minio2: GROUP BY time(:interval:) FILL(null)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "% response",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line",
+      "colors": [
+        {
+          "id": "3d1219b0-2bae-4784-a7e1-9fab2e72ed55",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "63c18823-a5e6-4aca-9a1e-29f820096c00",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "b567535f-1289-48df-b96f-5e46d8d61fb1",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/bb5e93f2-113c-46a1-ad10-da7fefe67c77"
+      }
+    },
+    {
+      "i": "fef268eb-b3d5-4415-94bc-bc23d2795d05",
+      "x": 0,
+      "y": 0,
+      "w": 6,
+      "h": 8,
+      "name": "minio1: Response time",
+      "queries": [
+        {
+          "query": "SELECT 100*last(\"0.001\") / last(\"count\") AS \"0.001\", 100*last(\"0.003\") / last(\"count\") AS \"0.003\", 100*last(\"0.005\") / last(\"count\") AS \"0.005\", 100*last(\"0.1\") / last(\"count\") AS \"0.1\", 100*last(\"0.5\") / last(\"count\") AS \"0.5\", 100*last(\"1\") / last(\"count\") AS \"1\" FROM \"MSDemo\".\"autogen\".\"minio_http_requests_duration_seconds\" WHERE time > :dashboardTime: and \"ipendpoint\"=:minio1: GROUP BY time(:interval:) FILL(null)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT 100*last(\"0.001\") / last(\"count\") AS \"0.001\", 100*last(\"0.003\") / last(\"count\") AS \"0.003\", 100*last(\"0.005\") / last(\"count\") AS \"0.005\", 100*last(\"0.1\") / last(\"count\") AS \"0.1\", 100*last(\"0.5\") / last(\"count\") AS \"0.5\", 100*last(\"1\") / last(\"count\") AS \"1\" FROM \"MSDemo\".\"autogen\".\"minio_http_requests_duration_seconds\" WHERE time > :dashboardTime: and \"ipendpoint\"=:minio1: GROUP BY time(:interval:) FILL(null)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "% response",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line",
+      "colors": [
+        {
+          "id": "3d1219b0-2bae-4784-a7e1-9fab2e72ed55",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "63c18823-a5e6-4aca-9a1e-29f820096c00",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "b567535f-1289-48df-b96f-5e46d8d61fb1",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/fef268eb-b3d5-4415-94bc-bc23d2795d05"
+      }
+    }
+  ],
+  "templates": [
+    {
+      "tempVar": ":minio1:",
+      "values": [
+        {
+          "value": "minio_1_ep1",
+          "type": "tagValue",
+          "selected": true
+        }
+      ],
+      "id": "ad1cd560-3ae5-4cac-8c67-46970649b641",
+      "type": "tagValues",
+      "label": "",
+      "query": {
+        "influxql": "SHOW TAG VALUES ON :database: FROM :measurement: WITH KEY=:tagKey:",
+        "db": "MSDemo",
+        "measurement": "cpu",
+        "tagKey": "ipendpoint",
+        "fieldKey": ""
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/templates/ad1cd560-3ae5-4cac-8c67-46970649b641"
+      }
+    },
+    {
+      "tempVar": ":minio2:",
+      "values": [
+        {
+          "value": "minio_1_ep2",
+          "type": "tagValue",
+          "selected": true
+        }
+      ],
+      "id": "11f88a29-0534-42af-bee7-a1f8ae653ba9",
+      "type": "tagValues",
+      "label": "",
+      "query": {
+        "influxql": "SHOW TAG VALUES ON :database: FROM :measurement: WITH KEY=:tagKey:",
+        "db": "MSDemo",
+        "measurement": "cpu",
+        "tagKey": "ipendpoint",
+        "fieldKey": ""
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/templates/11f88a29-0534-42af-bee7-a1f8ae653ba9"
+      }
+    }
+  ],
+  "name": "Minio endpoints",
+  "organization": "default",
+  "links": {
+    "self": "/chronograf/v1/dashboards/3",
+    "cells": "/chronograf/v1/dashboards/3/cells",
+    "templates": "/chronograf/v1/dashboards/3/templates"
+  }
+}
diff --git a/src/test/clmctest/dashboards/nginx_dash.json b/src/test/clmctest/dashboards/nginx_dash.json
new file mode 100644
index 0000000000000000000000000000000000000000..d60572664056e825819ae31a9cdbcface374a481
--- /dev/null
+++ b/src/test/clmctest/dashboards/nginx_dash.json
@@ -0,0 +1,935 @@
+{
+  "id": 3,
+  "cells": [
+    {
+      "i": "1ba178dd-a091-47f4-9c46-31dff88403b1",
+      "x": 5,
+      "y": 6,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_2: Requests / s",
+      "queries": [
+        {
+          "query": "SELECT non_negative_derivative(\"requests\") AS \"requests/sec\" FROM \"MSDemo\".\"autogen\".\"nginx\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep2'",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT non_negative_derivative(\"requests\") AS \"requests/sec\" FROM \"MSDemo\".\"autogen\".\"nginx\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep2'",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "requests / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/1ba178dd-a091-47f4-9c46-31dff88403b1"
+      }
+    },
+    {
+      "i": "6cac8c3f-ad9d-4394-b043-637d44d39a90",
+      "x": 5,
+      "y": 4,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_2: Network TX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep2' GROUP BY time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep2' GROUP BY time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "Mb / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/6cac8c3f-ad9d-4394-b043-637d44d39a90"
+      }
+    },
+    {
+      "i": "433d8774-f57a-4d80-8008-5b24c62de8f0",
+      "x": 5,
+      "y": 2,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_2: Network RX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep2' GROUP By time(1m) fill(previous)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep2' GROUP By time(1m) fill(previous)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "Mb / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/433d8774-f57a-4d80-8008-5b24c62de8f0"
+      }
+    },
+    {
+      "i": "e630e38e-2ba1-45e6-b0cd-cc294259d6de",
+      "x": 0,
+      "y": 6,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_1: Requests / s",
+      "queries": [
+        {
+          "query": "SELECT non_negative_derivative(\"requests\") AS \"requests/sec\" FROM \"MSDemo\".\"autogen\".\"nginx\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep1'",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT non_negative_derivative(\"requests\") AS \"requests/sec\" FROM \"MSDemo\".\"autogen\".\"nginx\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep1'",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "requests / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/e630e38e-2ba1-45e6-b0cd-cc294259d6de"
+      }
+    },
+    {
+      "i": "af1fcc24-00a1-459b-b1c8-f41834032891",
+      "x": 0,
+      "y": 4,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_1: Network TX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep1' GROUP BY time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"TX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep1' GROUP BY time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "Mb / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/af1fcc24-00a1-459b-b1c8-f41834032891"
+      }
+    },
+    {
+      "i": "23b48164-50d6-4c54-b284-05c8125bfa66",
+      "x": 0,
+      "y": 2,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_1: Network RX",
+      "queries": [
+        {
+          "query": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep1' GROUP By time(1m) fill(previous)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "SELECT derivative(max(\"bytes_sent\")) / 62914560 AS \"RX_Mb_per_second\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"ipendpoint\"='nginx_1_ep1' GROUP By time(1m) fill(previous)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "Mb / s",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/23b48164-50d6-4c54-b284-05c8125bfa66"
+      }
+    },
+    {
+      "i": "9a5fce61-3013-4b17-aece-9b4252c7d4ab",
+      "x": 5,
+      "y": 0,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_2: CPU usage",
+      "queries": [
+        {
+          "query": "SELECT mean(\"cpu_usage\") AS \"mean_cpu_usage\" FROM \"MSDemo\".\"autogen\".\"procstat\" WHERE time > :dashboardTime: AND \"exe\"='nginx' AND \"ipendpoint\"='nginx_1_ep2' GROUP BY time(:interval:) FILL(null)",
+          "queryConfig": {
+            "database": "MSDemo",
+            "measurement": "procstat",
+            "retentionPolicy": "autogen",
+            "fields": [
+              {
+                "value": "mean",
+                "type": "func",
+                "alias": "mean_cpu_usage",
+                "args": [
+                  {
+                    "value": "cpu_usage",
+                    "type": "field",
+                    "alias": ""
+                  }
+                ]
+              }
+            ],
+            "tags": {
+              "exe": [
+                "nginx"
+              ],
+              "ipendpoint": [
+                "nginx_1_ep2"
+              ]
+            },
+            "groupBy": {
+              "time": "auto",
+              "tags": []
+            },
+            "areTagsAccepted": true,
+            "fill": "null",
+            "rawText": null,
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "%CPU",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/9a5fce61-3013-4b17-aece-9b4252c7d4ab"
+      }
+    },
+    {
+      "i": "2cdaa83a-95d1-4a5f-9611-8bebe8b3035a",
+      "x": 0,
+      "y": 0,
+      "w": 5,
+      "h": 2,
+      "name": "nginx_ep_1: CPU usage",
+      "queries": [
+        {
+          "query": "SELECT mean(\"cpu_usage\") AS \"mean_cpu_usage\" FROM \"MSDemo\".\"autogen\".\"procstat\" WHERE time > :dashboardTime: AND \"exe\"='nginx' AND \"ipendpoint\"='nginx_1_ep1' GROUP BY time(:interval:) FILL(null)",
+          "queryConfig": {
+            "database": "MSDemo",
+            "measurement": "procstat",
+            "retentionPolicy": "autogen",
+            "fields": [
+              {
+                "value": "mean",
+                "type": "func",
+                "alias": "mean_cpu_usage",
+                "args": [
+                  {
+                    "value": "cpu_usage",
+                    "type": "field",
+                    "alias": ""
+                  }
+                ]
+              }
+            ],
+            "tags": {
+              "exe": [
+                "nginx"
+              ],
+              "ipendpoint": [
+                "nginx_1_ep1"
+              ]
+            },
+            "groupBy": {
+              "time": "auto",
+              "tags": []
+            },
+            "areTagsAccepted": true,
+            "fill": "null",
+            "rawText": null,
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/1"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "%CPU",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/3/cells/2cdaa83a-95d1-4a5f-9611-8bebe8b3035a"
+      }
+    }
+  ],
+  "templates": [],
+  "name": "Nginx endpoints",
+  "organization": "default",
+  "links": {
+    "self": "/chronograf/v1/dashboards/3",
+    "cells": "/chronograf/v1/dashboards/3/cells",
+    "templates": "/chronograf/v1/dashboards/3/templates"
+  }
+}
diff --git a/src/test/clmctest/dashboards/sf_dash.json b/src/test/clmctest/dashboards/sf_dash.json
new file mode 100644
index 0000000000000000000000000000000000000000..8430953819de013a3f0eca43cab74c30ad6e883e
--- /dev/null
+++ b/src/test/clmctest/dashboards/sf_dash.json
@@ -0,0 +1,500 @@
+{
+  "id": 2,
+  "cells": [
+    {
+      "i": "d4dad017-395e-4192-9a89-cfde2b5d133a",
+      "x": 5,
+      "y": 4,
+      "w": 5,
+      "h": 4,
+      "name": "Average MB/s sent/recv for service-function 2",
+      "queries": [
+        {
+          "query": "select derivative(total_RX_MB, 1m) / 60 as RX_MB_per_s, derivative(total_TX_MB, 1m) / 60 as TX_MB_per_s from (select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf2: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)) ",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "select derivative(total_RX_MB, 1m) / 60 as RX_MB_per_s, derivative(total_TX_MB, 1m) / 60 as TX_MB_per_s from (select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf2: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)) ",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB / sec",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/2/cells/d4dad017-395e-4192-9a89-cfde2b5d133a"
+      }
+    },
+    {
+      "i": "8522ec33-51a1-4cd4-a02b-02525800c25e",
+      "x": 5,
+      "y": 0,
+      "w": 5,
+      "h": 4,
+      "name": "Total MB sent/recv for service-function 2",
+      "queries": [
+        {
+          "query": "select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf2: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf2: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/2/cells/8522ec33-51a1-4cd4-a02b-02525800c25e"
+      }
+    },
+    {
+      "i": "dd7693ca-0622-41f0-9f2c-d9a468434097",
+      "x": 0,
+      "y": 4,
+      "w": 5,
+      "h": 4,
+      "name": "Average MB/s sent/recv for service-function 1",
+      "queries": [
+        {
+          "query": "select derivative(total_RX_MB, 1m) / 60 as RX_MB_per_s, derivative(total_TX_MB, 1m) / 60 as TX_MB_per_s from (select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf1: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)) ",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "select derivative(total_RX_MB, 1m) / 60 as RX_MB_per_s, derivative(total_TX_MB, 1m) / 60 as TX_MB_per_s from (select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf1: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)) ",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB / sec",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/2/cells/dd7693ca-0622-41f0-9f2c-d9a468434097"
+      }
+    },
+    {
+      "i": "419b4e3c-1ca3-49ac-bc91-410bfbeb879a",
+      "x": 0,
+      "y": 0,
+      "w": 5,
+      "h": 4,
+      "name": "Total MB sent/recv for service-function 1",
+      "queries": [
+        {
+          "query": "select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf1: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)",
+          "queryConfig": {
+            "database": "",
+            "measurement": "",
+            "retentionPolicy": "",
+            "fields": [],
+            "tags": {},
+            "groupBy": {
+              "time": "",
+              "tags": []
+            },
+            "areTagsAccepted": false,
+            "rawText": "select sum(RX_MB) as total_RX_MB, sum(TX_MB) as total_TX_MB from (SELECT last(\"bytes_recv\") / 1048576 AS \"RX_MB\", last(\"bytes_sent\") / 1048576 AS \"TX_MB\" FROM \"MSDemo\".\"autogen\".\"net\" WHERE time > :dashboardTime: AND \"sf\"=:sf1: GROUP BY time(1m), ipendpoint FILL(null)) group by time(1m)",
+            "range": null,
+            "shifts": null
+          },
+          "source": "/chronograf/v1/sources/2"
+        }
+      ],
+      "axes": {
+        "x": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "MB",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        },
+        "y2": {
+          "bounds": [
+            "",
+            ""
+          ],
+          "label": "",
+          "prefix": "",
+          "suffix": "",
+          "base": "10",
+          "scale": "linear"
+        }
+      },
+      "type": "line-stepplot",
+      "colors": [
+        {
+          "id": "2f5981b6-6f85-4efc-989c-9da90fe54189",
+          "type": "scale",
+          "hex": "#31C0F6",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "696e12a0-4b7d-4a8f-9d95-a5be5ef3e8b8",
+          "type": "scale",
+          "hex": "#A500A5",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        },
+        {
+          "id": "f3788c7b-bdbe-4d14-8439-c6f3b4db75e9",
+          "type": "scale",
+          "hex": "#FF7E27",
+          "name": "Nineteen Eighty Four",
+          "value": "0"
+        }
+      ],
+      "legend": {},
+      "tableOptions": {
+        "timeFormat": "MM/DD/YYYY HH:mm:ss",
+        "verticalTimeAxis": true,
+        "sortBy": {
+          "internalName": "time",
+          "displayName": "",
+          "visible": true
+        },
+        "wrapping": "truncate",
+        "fieldNames": [
+          {
+            "internalName": "time",
+            "displayName": "",
+            "visible": true
+          }
+        ],
+        "fixFirstColumn": true
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/2/cells/419b4e3c-1ca3-49ac-bc91-410bfbeb879a"
+      }
+    }
+  ],
+  "templates": [
+    {
+      "tempVar": ":sf1:",
+      "values": [
+        {
+          "value": "nginx",
+          "type": "tagValue",
+          "selected": true
+        }
+      ],
+      "id": "2160b8b2-a885-4518-90dc-f2363eb3fc83",
+      "type": "tagValues",
+      "label": "",
+      "query": {
+        "influxql": "SHOW TAG VALUES ON :database: FROM :measurement: WITH KEY=:tagKey:",
+        "db": "MSDemo",
+        "measurement": "cpu",
+        "tagKey": "sf",
+        "fieldKey": ""
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/2/templates/2160b8b2-a885-4518-90dc-f2363eb3fc83"
+      }
+    },
+    {
+      "tempVar": ":sf2:",
+      "values": [
+        {
+          "value": "minio",
+          "type": "tagValue",
+          "selected": true
+        }
+      ],
+      "id": "beb094ee-5bed-4956-a551-83fe8e905c19",
+      "type": "tagValues",
+      "label": "",
+      "query": {
+        "influxql": "SHOW TAG VALUES ON :database: FROM :measurement: WITH KEY=:tagKey:",
+        "db": "MSDemo",
+        "measurement": "cpu",
+        "tagKey": "sf",
+        "fieldKey": ""
+      },
+      "links": {
+        "self": "/chronograf/v1/dashboards/2/templates/beb094ee-5bed-4956-a551-83fe8e905c19"
+      }
+    }
+  ],
+  "name": "Service Functions",
+  "organization": "default",
+  "links": {
+    "self": "/chronograf/v1/dashboards/2",
+    "cells": "/chronograf/v1/dashboards/2/cells",
+    "templates": "/chronograf/v1/dashboards/2/templates"
+  }
+}
diff --git a/src/test/clmctest/inputs/conftest.py b/src/test/clmctest/inputs/conftest.py
index 1f4294969e27e11d9004f68e11580f7d799ebf58..86218af4ab7734cf0efab8b2d439488769100e28 100644
--- a/src/test/clmctest/inputs/conftest.py
+++ b/src/test/clmctest/inputs/conftest.py
@@ -39,7 +39,7 @@ def telegraf_agent_config(request):
     :return: the python object representing the read YAML file
     """
     rspec = pkg_resources.resource_filename('clmctest', 'rspec.json')
-    print("rspec file: {0}".format(rspec))
+    print("\nrspec file: {0}".format(rspec))
     with open(rspec, 'r') as stream:
         data_loaded = json.load(stream)
     return data_loaded
diff --git a/src/test/clmctest/inputs/test_telegraf_agents.py b/src/test/clmctest/inputs/test_telegraf_agents.py
index 2358d93d6968f83ad7c0712e7dcce25575df638b..88238eaf62b6292561125fb92a4f67228da360f6 100644
--- a/src/test/clmctest/inputs/test_telegraf_agents.py
+++ b/src/test/clmctest/inputs/test_telegraf_agents.py
@@ -63,8 +63,9 @@ def test_ping(telegraf_agent_config):
     ('net', 'SELECT mean("bytes_sent") AS "mean" FROM "CLMCMetrics"."autogen"."net"', 0),
     ('disk', 'SELECT mean("free") AS "mean" FROM "CLMCMetrics"."autogen"."disk"', 0),
     ('mem', 'SELECT mean("free") AS "mean" FROM "CLMCMetrics"."autogen"."mem"', 0),
+    ('service_config_state', 'SELECT mean("loaded.active.running_count") AS "mean" FROM "CLMCMetrics"."autogen"."service_config_state" WHERE "resource"=\'nginx.service\'', 0),
     # Report MINIO's HTTP request response time (as a rolling difference of the sum total)
-    ('minio_http_requests_duration_seconds', 'SELECT difference(max("sum")) AS "mean" FROM "CLMCMetrics"."autogen"."minio_http_requests_duration_seconds" WHERE time > now() - 1h GROUP BY time(10s)',0),              
+    ('minio_http_requests_duration_seconds', 'SELECT difference(max("sum")) AS "mean" FROM "CLMCMetrics"."autogen"."minio_http_requests_duration_seconds" WHERE time > now() - 1h GROUP BY time(10s)',0),      
     # Report the average change in difference of MINIO's HTTP response time (the inner query determines a rolling difference between sampling periods [respTimeDiff])
     ('minio_http_requests_duration_seconds', 'SELECT mean("respTimeDiff") AS "mean" FROM (SELECT difference(max("sum")) AS "respTimeDiff" FROM "CLMCMetrics"."autogen"."minio_http_requests_duration_seconds" WHERE time > now() - 1h GROUP BY time(10s))',0)              
     ])
diff --git a/src/test/clmctest/monitoring/conftest.py b/src/test/clmctest/monitoring/conftest.py
index 946c5712c6c38640596606457cce0475d6769730..34457d87e0eaeeac92d0be57d914d77e63d15fb5 100644
--- a/src/test/clmctest/monitoring/conftest.py
+++ b/src/test/clmctest/monitoring/conftest.py
@@ -68,7 +68,7 @@ def simulator(streaming_sim_config):
     :return: an instance of the simulator
     """
 
-    influx_url     = "http://" + streaming_sim_config[0]['ip_address'] + ":8086"
+    influx_url = "http://" + streaming_sim_config[0]['ip_address'] + ":8086"
 
     for service in streaming_sim_config:
         if service['name'] == "ipendpoint1":
diff --git a/src/test/clmctest/services/host/telegraf_host.conf b/src/test/clmctest/services/host/telegraf_host.conf
index b1fc8ddc55650ade37a074a26ab651d1a6f04c41..4f0226dcd8a41e0c5ae44965572c0ad537d4ca20 100644
--- a/src/test/clmctest/services/host/telegraf_host.conf
+++ b/src/test/clmctest/services/host/telegraf_host.conf
@@ -1,36 +1,3 @@
-## © University of Southampton IT Innovation Centre, 2018
-##
-## Copyright in this software belongs to University of Southampton
-## IT Innovation Centre of Gamma House, Enterprise Road, 
-## Chilworth Science Park, Southampton, SO16 7NS, UK.
-##
-## This software may not be used, sold, licensed, transferred, copied
-## or reproduced in whole or in part in any manner or form or in or
-## on any media by any person other than in accordance with the terms
-## of the Licence Agreement supplied with the software, or otherwise
-## without the prior written consent of the copyright owners.
-##
-## This software is distributed WITHOUT ANY WARRANTY, without even the
-## implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-## PURPOSE, except where stated in the Licence Agreement supplied with
-## the software.
-##
-##      Created By :            Michael Boniface
-##      Created Date :          20-03-2018
-##      Created for Project :   FLAME
-
-###############################################################################
-#                                  INPUTS                                     #
-###############################################################################
-# # Read metrics about network interface usage
- [[inputs.net]]
-#   ## By default, telegraf gathers stats from any up interface (excluding loopback)
-#   ## Setting interfaces will tell it to gather these explicit interfaces,
-#   ## regardless of status.
-#   ##
-#   # interfaces = ["eth0"]
-
-# Read metrics about cpu usage
 [[inputs.cpu]]
   ## Whether to report per-cpu stats or not
   percpu = true
@@ -39,26 +6,18 @@
   ## If true, collect raw CPU time metrics.
   collect_cpu_time = false
   ## If true, compute and report the sum of all non-idle CPU states.
- #report_active = false
-
-
-# Read metrics about disk usage by mount point
+  report_active = false
 [[inputs.disk]]
-  ## By default, telegraf gather stats for all mountpoints.
-  ## Setting mountpoints will restrict the stats to the specified mountpoints.
+  ## By default stats will be gathered for all mount points.
+  ## Set mount_points will restrict the stats to only the specified mount points.
   # mount_points = ["/"]
-
-  ## Ignore some mountpoints by filesystem type. For example (dev)tmpfs (usually
-  ## present on /run, /var/run, /dev/shm or /dev).
+  ## Ignore mount points by filesystem type.
   ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
-
-
-# Read metrics about disk IO by device
 [[inputs.diskio]]
   ## By default, telegraf will gather stats for all devices including
   ## disk partitions.
   ## Setting devices will restrict the stats to the specified devices.
-  # devices = ["sda", "sdb"]
+  devices = ["sda1"]
   ## Uncomment the following line if you need disk serial numbers.
   # skip_serial_number = false
   #
@@ -78,23 +37,21 @@
   ## The typical use case is for LVM volumes, to get the VG/LV name instead of
   ## the near-meaningless DM-0 name.
   # name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
-
-# Read metrics about memory usage
+[[inputs.kernel]]
+  # no configuration
 [[inputs.mem]]
   # no configuration
+[[inputs.processes]]
+  # no configuration
+[[inputs.swap]]
+  # no configuration
+[[inputs.system]]
+  # no configuration
+[[inputs.net]]
+[[inputs.netstat]]
+  # no configuration
 
-# # Influx HTTP write listener
-[[inputs.http_listener]]
-  ## Address and port to host HTTP listener on
-  service_address = ":8186"
-
-  ## timeouts
-  read_timeout = "10s"
-  write_timeout = "10s"
-
-  ## HTTPS
-  #tls_cert= "/etc/telegraf/cert.pem"
-  #tls_key = "/etc/telegraf/key.pem"
-
-  ## MTLS
-  #tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
\ No newline at end of file
+# Influx HTTP write listener
+# [[inputs.http_listener]]
+#   ## Address and port to host HTTP listener on
+#   service_address = ":8186"
diff --git a/src/test/clmctest/services/minio/telegraf_minio.conf b/src/test/clmctest/services/minio/telegraf_minio.conf
index f1849578ed6d747dd61320245d18dbade08ac437..afba368e0b0a7ff2e5212766db0d6a2ad4b4de92 100644
--- a/src/test/clmctest/services/minio/telegraf_minio.conf
+++ b/src/test/clmctest/services/minio/telegraf_minio.conf
@@ -20,4 +20,18 @@
 ##      Created for Project :   FLAME
 
 [[inputs.prometheus]]
-    urls = ["http://localhost:9000/minio/prometheus/metrics"]
\ No newline at end of file
+    urls = ["http://localhost:9000/minio/prometheus/metrics"]
+
+[[inputs.procstat]]
+  #pid_file = "/var/run/nginx.pid"
+  exe = "minio"
+
+# [[inputs.systemctl]]
+#   ## Service array
+#   services = [
+#     "minio.service"
+#   ]
+
+#   ## Sample rate for sampling state of service.
+#   ## Must be greter that the collection_interval/2
+#   #sample_rate = 2
\ No newline at end of file
diff --git a/src/test/clmctest/services/nginx/telegraf_nginx.conf b/src/test/clmctest/services/nginx/telegraf_nginx.conf
index 6bc3b8785bec84b0241a64801decaad6daf8fd8e..11bbcc5eb95aec262b62c0f1ed1e2a5691c1de30 100644
--- a/src/test/clmctest/services/nginx/telegraf_nginx.conf
+++ b/src/test/clmctest/services/nginx/telegraf_nginx.conf
@@ -23,11 +23,21 @@
 [[inputs.nginx]]
   ## An array of Nginx stub_status URI to gather stats.
   urls = ["http://localhost:80/nginx_status"]
-
   ## HTTP response timeout (default: 5s)
-#  response_timeout = "5s"
+  #  response_timeout = "5s"
+
+[[inputs.procstat]]
+  #pid_file = "/var/run/nginx.pid"
+  exe = "nginx"
 
-# # Influx HTTP write listener
-[[inputs.http_listener]]
-  ## Address and port to host HTTP listener on
-  service_address = ":8186"
\ No newline at end of file
+[[inputs.systemctl]]
+	services = [
+	  "nginx.service",
+	]
+	## Sample rate for sampling state of service.
+	## Must be greter that the collection_interval/2 
+	sample_rate = 2
+	
+	## Logging level for this plugin according to logrus log levels
+	## "debug", "info", "warning", "error", "fatal", "panic"
+	log_level = "debug"