add ability to time steps
diff --git a/README.md b/README.md
index c05acd6..28feeee 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,7 @@
 | OPTION                          | DEFAULT                      | DESCRIPTION                                                                         |
 | ------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------- |
 | `TYPE`                          | minimal                      | `minimal` or `full` and determines number of cluster nodes and etcd cluster members |
+| `WITH_TIMINGS`                  | no                           | Outputs duration of various steps of the install                                    |
 | `WITH_BBSIM`                    | no                           | Should the BBSIM POD be deployed?                                                   |
 | `WITH_RADIUS`                   | no                           | Should `freeradius` service be deployed?                                            |
 | `WITH_ONOS`                     | yes                          | Should `ONOS` service be deployed?                                                  |
diff --git a/voltha b/voltha
index ac8730c..f5adc4d 100755
--- a/voltha
+++ b/voltha
@@ -66,6 +66,7 @@
 
 TYPE=${TYPE:-minimal}
 NAME=${NAME:-$TYPE}
+WITH_TIMINGS=${WITH_TIMINGS:-no}
 WITH_BBSIM=${WITH_BBSIM:-no}
 WITH_RADIUS=${WITH_RADIUS:-no}
 WITH_ONOS=${WITH_ONOS:-yes}
@@ -207,6 +208,18 @@
     INSTALL_HELM=no
 fi
 
+# Verify WITH_TIMINGS settting and convert uniform value of yes or no
+if [ $(echo ":y:yes:true:n:no:false:1:0:" | grep -ic ":$WITH_TIMINGS:") -eq 0 ]; then
+    >&2 echo -e "${RED}${BOLD}${ERROR}ERROR:${NORMAL}${RED} Invalid \$WITH_TIMINGS value of '$WITH_TIMINGS'. Should be 'yes' or 'no'${NORMAL}"
+    exit 1
+fi
+
+if [ $(echo ":y:yes:true:1:" | grep -ic ":$WITH_TIMINGS:") -eq 1 ]; then
+    WITH_TIMINGS=yes
+else
+    WITH_TIMINGS=no
+fi
+
 mkdir -p .voltha
 touch .voltha/ports
 HAVE=$(grep $NAME .voltha/ports)
@@ -279,6 +292,7 @@
 }
 
 IDX=1
+CLOCK="TIME:"
 SPIN_PARTS=
 NOT_VERIFIED=
 VERIFIED=
@@ -308,6 +322,7 @@
             \xe2\xa2\x8c\xe2\xa1\xb1 \
             \xe2\xa2\x86\xe2\xa1\xb1 \
             "
+    CLOCK="\xe2\x8f\xb1"
     NOT_VERIFIED="\xe2\x9c\x97\x20"
     VERIFIED="\xe2\x9c\x93\x20"
     HELM="\xE2\x8E\x88"
@@ -326,6 +341,27 @@
     LOCK="\xf0\x9f\x94\x92"
 fi
 
+timeout() {
+    local INDENT=
+    if [ "$1" == "-" ]; then
+        INDENT="  "
+        shift
+    fi
+    local h=$(expr $1 / 3600)
+    local m=$(expr $1 % 3600 / 60)
+    local s=$(expr $1 % 60)
+    local t=""
+
+    if [ $h -gt 0 ]; then
+        t="$t${h}h"
+    fi
+    if [ $m -gt 0 ]; then
+        t="$t${m}m"
+    fi
+    t="$t${s}s"
+    echo -e "$INDENT  $CLOCK  $t"
+}
+
 bspin() {
     IDX=1
     local INDENT=
@@ -511,7 +547,7 @@
 
 # Output install options to log
 echo "OPTIONS" >> $LOG
-ALL_OPTIONS="NAME TYPE WITH_BBSIM WITH_RADIUS WITH_ONOS WITH_TP JUST_K8S DEPLOY_K8S \
+ALL_OPTIONS="NAME TYPE WITH_TIMINGS WITH_BBSIM WITH_RADIUS WITH_ONOS WITH_TP JUST_K8S DEPLOY_K8S \
     SKIP_RESTART_API INSTALL_KUBECTL INSTALL_HELM USE_GO VOLTHA_LOG_LEVEL \
     VOLTHA_CHART VOLTHA_ADAPTER_SIM_CHART VOLTHA_ADAPTER_OPEN_OLT_CHART \
     VOLTHA_ADAPTER_OPEN_ONU_CHART SADIS_VER OLT_VER AAA_VER DHCP_VER \
@@ -616,6 +652,7 @@
 mkdir -p $GOPATH/bin
 espin $VERIFIED
 
+STIME=$(date +%s)
 if [ "$INSTALL_KUBECTL" == "no" ]; then
     bspin "Skip kubectl install"
     espin $NO_ENTRY
@@ -631,7 +668,11 @@
         espin - $VERIFIED
     fi
 fi
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
+STIME=$(date +%s)
 if [ "$DEPLOY_K8S" == "no" ]; then
     bspin "Skip Kubernetes/Kind Deployment"
     espin $NO_ENTRY
@@ -648,6 +689,11 @@
     fi
 fi
 
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
+
+STIME=$(date +%s)
 if [ "$INSTALL_HELM" == "no" ]; then
     bspin "Skip Helm Install"
     espin $NO_ENTRY
@@ -662,7 +708,11 @@
         espin - $VERIFIED
     fi
 fi
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
+STIME=$(date +%s)
 bspin "Verify voltctl $HIGH_VOLTAGE"
 if [ -x $GOPATH/bin/voltctl ]; then
     espin $VERIFIED
@@ -673,11 +723,15 @@
     (set -x; chmod 755 $GOPATH/bin/voltctl >>$LOG 2>&1) >>$LOG 2>&1
     espin - $VERIFIED
 fi
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
 bspin "Verify command PATH"
 export PATH=$GOPATH/bin:$PATH
 espin $VERIFIED
 
+STIME=$(date +%s)
 if [ "$DEPLOY_K8S" == "yes" ]; then
     HAVE=$(kind get clusters | grep -c voltha-$NAME)
     bspin "Verify Kubernetes/Kind Cluster"
@@ -710,7 +764,11 @@
     EXPECT=$(test "$TYPE" == "minimal" && echo "12" || echo "14")
     wait_for_pods - "kube-system" $EXPECT -1 "Waiting for system PODs to start" $P
 fi
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
+STIME=$(date +%s)
 COUNT=$(count_pods "kube-system" "tiller-deploy-.*")
 bspin "Verify Helm"
 if [ $COUNT -ne 1 ]; then
@@ -765,7 +823,11 @@
     espin $VERIFIED
 fi
 wait_for_pods - "kube-system" 1 -1 "Waiting for Tiller POD to start" "tiller-deploy-.*"
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
+STIME=$(date +%s)
 bspin "Verify Helm values file: $NAME-values.yaml"
 if [ ! -r "./$NAME-values.yaml" ]; then
     espin $NOT_VERIFIED
@@ -775,6 +837,9 @@
 else
     espin $VERIFIED
 fi
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
 if [ "$JUST_K8S" == "yes" ]; then
     echo "Environment deployed, not deploying VOLTHA artifacts as requested. Good bye."
@@ -794,6 +859,7 @@
     exit 0
 fi
 
+STIME=$(date +%s)
 bspin "Verify ETCD Operator $OLD_KEY"
 if [ $(helm list --deployed --short --namespace voltha "^etcd-operator\$" | wc -l) -ne 1 ]; then
     espin $NOT_VERIFIED 
@@ -803,7 +869,11 @@
 fi
 EXPECT=$(test "$TYPE" == "minimal" && echo "1" || echo "3")
 wait_for_pods - "voltha" $EXPECT -1 "Waiting for ETCD Operator to start" "etcd-operator-.*"
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
+STIME=$(date +%s)
 if [ $WITH_ONOS == "yes" ]; then
     bspin "Verify ONOS installed $BIRD"
     if [ $(helm list --deployed --short --namespace default "^onos\$" | wc -l) -ne 1 ]; then
@@ -842,7 +912,11 @@
     (set -x; ./onos-files/install-onos-applications.sh >>$LOG 2>&1) >>$LOG 2>&1
     espin - $VERIFIED
 fi
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
+STIME=$(date +%s)
 bspin "Verify VOLTHA installed $HIGH_VOLTAGE"
 if [ $(helm list --deployed --short --namespace voltha "^voltha\$" | wc -l) -ne 1 ]; then
     espin $NOT_VERIFIED
@@ -861,7 +935,11 @@
     voltha-zookeeper-.*"
 EXPECT=$(test "$TYPE" == "minimal" && echo "9" || echo "11")
 wait_for_pods - "voltha" $EXPECT -1 "Waiting for VOLTHA Core to start" $VOLTHA
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
+STIME=$(date +%s)
 echo -e "Verify Adapters $PLUG"
 bspin - "Verify Simulated Adapters installed"
 if [ $(helm list --deployed --short --namespace voltha "^sim\$" | wc -l) -ne 1 ]; then
@@ -888,8 +966,12 @@
 
 ADAPTERS="adapter-.*"
 wait_for_pods - "voltha" 4 -1 "Waiting for adapters to start" $ADAPTERS
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
 if [ $WITH_BBSIM == "yes" ]; then
+    STIME=$(date +%s)
     echo -e "Verify BBSIM $PLUG"
     bspin - "Verify BBSIM Installed"
     if [ $(helm list --deployed --short --namespace voltha "^bbsim\$" | wc -l) -ne 1 ]; then
@@ -899,9 +981,13 @@
         espin - $VERIFIED
     fi
     wait_for_pods - "voltha" 1 -1 "Waiting for BBSIM to start" "bbsim-.*"
+    if [ "$WITH_TIMINGS" == "yes" ]; then
+        timeout $(expr $(date +%s) - $STIME)
+    fi
 fi
 
 if [ $WITH_RADIUS == "yes" ]; then
+    STIME=$(date +%s)
     echo -e "Verify RADIUS $LOCK"
     bspin - "Verify RADIUS Installed"
     if [ $(helm list --deployed --short --namespace voltha "^radius\$" | wc -l) -ne 1 ]; then
@@ -911,8 +997,12 @@
         espin - $VERIFIED
     fi
     wait_for_pods - "voltha" 1 -1 "Waiting for RADIUS to start" "radius-.*"
+    if [ "$WITH_TIMINGS" == "yes" ]; then
+        timeout $(expr $(date +%s) - $STIME)
+    fi
 fi
 
+STIME=$(date +%s)
 if [ $SKIP_RESTART_API == "no" ]; then
     echo -e "Restart VOLTHA API $RESTART"
     API="voltha-api-server-.* ofagent-.*"
@@ -943,6 +1033,9 @@
 done
 (set -x; screen -dmS voltha-etcd-$NAME bash -c "while true; do kubectl port-forward -n voltha service/voltha-etcd-cluster-client $VOLTHA_ETCD_PORT:2379; done" >>$LOG 2>&1) >>$LOG 2>&1
 espin - $VERIFIED
+if [ "$WITH_TIMINGS" == "yes" ]; then
+    timeout $(expr $(date +%s) - $STIME)
+fi
 
 if [ $WITH_ONOS == "yes" -a $WITH_RADIUS == "yes" ]; then
     bspin "Configure ONOS RADIUS Connection $GEAR"