Added end-of-run summary.

Change-Id: I5f749bf08d49544156309c0e0cdaff077ab6398b
diff --git a/utils/stc/src/main/java/org/onlab/stc/Main.java b/utils/stc/src/main/java/org/onlab/stc/Main.java
index b615890..434ec36 100644
--- a/utils/stc/src/main/java/org/onlab/stc/Main.java
+++ b/utils/stc/src/main/java/org/onlab/stc/Main.java
@@ -27,6 +27,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 import static java.lang.System.currentTimeMillis;
 import static org.onlab.stc.Coordinator.Status.*;
@@ -43,6 +44,9 @@
     private static final String GREEN = "\u001B[32;1m";
     private static final String BLUE = "\u001B[36m";
 
+    private static final String SUCCESS_SUMMARY = "%sPassed! %d steps succeeded%s";
+    private static final String FAILURE_SUMMARY = "%sFailed! %d steps succeeded; %d steps failed; %d steps skipped%s";
+
     private enum Command {
         LIST, RUN, RUN_RANGE, HELP
     }
@@ -180,12 +184,26 @@
             coordinator.start();
             int exitCode = coordinator.waitFor();
             pause(100); // allow stdout to flush
+            printSummary(exitCode);
             System.exit(exitCode);
         } catch (InterruptedException e) {
             print("Unable to execute scenario %s", scenarioFile);
         }
     }
 
+    private void printSummary(int exitCode) {
+        Set<Step> steps = coordinator.getSteps();
+        int count = steps.size();
+        if (exitCode == 0) {
+            print(SUCCESS_SUMMARY, color(SUCCEEDED), count, color(null));
+        } else {
+            long success = steps.stream().filter(s -> coordinator.getStatus(s) == SUCCEEDED).count();
+            long failed = steps.stream().filter(s -> coordinator.getStatus(s) == FAILED).count();
+            long skipped = steps.stream().filter(s -> coordinator.getStatus(s) == SKIPPED).count();
+            print(FAILURE_SUMMARY, color(FAILED), success, failed, skipped, color(null));
+        }
+    }
+
     /**
      * Internal delegate to monitor the process execution.
      */