Browse Source

Merge branch 'candidate-7.8.0' into candidate-7.8.x

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 5 years ago
parent
commit
bca97763e4

+ 1 - 0
.github/workflows/build-and-publish-debug.yml

@@ -25,4 +25,5 @@ jobs:
           username: ${{ secrets.DOCKER_USERNAME }}
           password: ${{ secrets.DOCKER_PASSWORD }}
           buildtype: Debug
+          latest: 1   # This should only be set on the current minor branch
           

+ 1 - 0
.github/workflows/build-and-publish.yml

@@ -24,4 +24,5 @@ jobs:
         with:
           username: ${{ secrets.DOCKER_USERNAME }}
           password: ${{ secrets.DOCKER_PASSWORD }}
+          latest: 1   # this should only be set on the current minor branch
           

+ 3 - 0
dockerfiles/action.yml

@@ -16,6 +16,9 @@ inputs:
   buildtype:
     description: 'The build type - Debug, RelWithDebInfo, or Release'
     required: false
+  latest:
+    description: 'Set to 1 to also tag as latest when maturity is release'
+    required: false
 outputs:
   tag:
     description: 'Is the tag, which was pushed'

+ 16 - 2
dockerfiles/buildall.sh

@@ -60,6 +60,13 @@ set -e
 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 pushd $DIR 2>&1 > /dev/null
 
+. ../cmake_modules/parse_cmake.sh
+parse_cmake
+
+if [[ "$HPCC_MATURITY" = "release" ]] && [[ "$INPUT_LATEST" = "1" ]] ; then
+  LATEST = 1
+fi
+
 build_image() {
   local name=$1
   local label=$2
@@ -74,8 +81,15 @@ build_image() {
        --build-arg BUILD_TYPE=${BUILD_TYPE} \
        --build-arg BUILD_THREADS=${BUILD_THREADS} \
        ${name}/ 
-    if [ "$PUSH" = "1" ] ; then
-      docker push hpccsystems/${name}:${label}
+    if [ "$LATEST" = "1" ] ; then
+      docker tag hpccsystems/${name}:${label} hpccsystems/${name}:latest
+      if [ "$PUSH" = "1" ] ; then
+        docker push hpccsystems/${name}:${label} hpccsystems/${name}:latest
+      fi
+    else
+      if [ "$PUSH" = "1" ] ; then
+        docker push hpccsystems/${name}:${label}
+      fi
     fi
   fi
 }

+ 1 - 1
dockerfiles/hpcc/templates/_helpers.tpl

@@ -47,7 +47,7 @@ Generate global ConfigMap info
 Pass in root as .
 */}}
 {{- define "hpcc.generateGlobalConfigMap" -}}
-imageVersion: {{ .Values.global.image.version | quote }}
+imageVersion: {{ required "Please specify .global.image.version" .Values.global.image.version | quote }}
 singleNode: {{ .Values.global.singleNode | default false }}
 {{- end -}}
 

+ 1 - 1
dockerfiles/hpcc/templates/eclagent.yaml

@@ -47,7 +47,7 @@ data:
 {{ toYaml . | indent 6 }}
     global:
 {{ include "hpcc.generateGlobalConfigMap" $ | indent 6 }}
-  eclagent-jobspec.yaml: |
+  {{ $apptype }}-jobspec.yaml: |
     apiVersion: batch/v1
     kind: Job
     metadata:

+ 6 - 6
dockerfiles/hpcc/templates/thor.yaml

@@ -5,15 +5,15 @@
 {{- $thorAgentName := printf "%s-thoragent" .name }}
 {{- $slaveName := printf "%s-slave" .name }}
 {{- $serviceName := printf "%s-svc" .name }}
-{{- $eclAgentDefaults := dict "name" $eclAgentName "replicas" 1 }}
+{{- $eclAgentDefaults := dict "name" $eclAgentName "useChildProcesses" true "replicas" 1 }}
 {{- $eclAgentScope := .eclagent | mergeOverwrite $eclAgentDefaults | default $eclAgentDefaults }}
 {{- $agentAppType := $eclAgentScope.type | default "hthor" }}
-{{- $thorAgentDefaults := dict "name" $thorAgentName "containerPerAgent" true "replicas" 1 }}
+{{- $thorAgentDefaults := dict "name" $thorAgentName "useChildProcesses" false "replicas" 1 }}
 {{- $thorAgentScope := .thoragent | mergeOverwrite $thorAgentDefaults | default $thorAgentDefaults }}
 {{- $hthorDefaults := dict "name" $hthorName }}
 {{- $hthorScope := .hthor | mergeOverwrite $hthorDefaults | default $hthorDefaults }}
 {{- $thorScopeStd := omit . "eclagent" "thoragent" "hthor" }}
-{{- $thorScope := $thorAgentScope.containerPerAgent | ternary ($thorScopeStd) ($thorScopeStd | mergeOverwrite (dict "masterport" 0 "slaveport" 0)) }}
+{{- $thorScope := $thorAgentScope.useChildProcesses | ternary ($thorScopeStd | mergeOverwrite (dict "masterport" 0 "slaveport" 0)) ($thorScopeStd) }}
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -101,13 +101,13 @@ data:
     eclagent:
 {{ toYaml $thorAgentScope | indent 6 }}
       type: thor
-{{- if not $thorAgentScope.containerPerAgent }}
+{{- if $thorAgentScope.useChildProceses }}
     thor:
 {{ toYaml $thorScope | indent 6 }}
 {{- end }}
     global:
 {{ include "hpcc.generateGlobalConfigMap" $ | indent 6 }}
-{{- if $eclAgentScope.containerPerAgent }}
+{{- if not $eclAgentScope.useChildProcesses }}
 
   {{ $agentAppType }}-jobspec.yaml: |
     apiVersion: batch/v1
@@ -148,7 +148,7 @@ data:
           restartPolicy: Never
       backoffLimit: 0
 {{- end }}
-{{- if $thorAgentScope.containerPerAgent }}
+{{- if not $thorAgentScope.useChildProcesses }}
 
   thormaster-jobspec.yaml: |
     apiVersion: batch/v1

+ 14 - 3
dockerfiles/hpcc/values.schema.json

@@ -144,6 +144,10 @@
           "type": "array",
           "items": { "type": "string" }
         },
+        "useChildProcesses": {
+          "type": "boolean",
+          "description": "Launch each workunit compile as a child process rather than in its own container"
+        },
         "image": {
           "$ref": "#/definitions/image"
         }
@@ -175,11 +179,18 @@
         },
         "maxActive": {
           "type": "integer",
-          "minimum": 1
+          "minimum": 1,
+          "description": "Maximum number of workunits that can be active simultaneously",
+          "default": 100
         },
-        "containerPerAgent": {
+        "useChildProcesses": {
           "type": "boolean",
-          "description": "Should workunits execute in their own container, or as child processes"
+          "description": "Launch each workunit as a child process rather than in its own container"
+        },
+        "type": {
+          "type": "string",
+          "enum": ["hthor", "roxie"],
+          "description": "Use the hthor or roxie execution engine for eclagent queries"
         },
         "image": {
           "$ref": "#/definitions/image"

+ 19 - 9
dockerfiles/hpcc/values.yaml

@@ -26,9 +26,8 @@ global:
     # existingClaim: ""
 
   image:
-    # This should probably say "latest" or "stable" in the example script, but set to a specific version in production systems
-    # We should also support overriding the version within a component
-    version: master-2020-02-10
+    ## It is recommended to name a specific version rather than latest, for any non-trivial deployment
+    #version: latest
     root: "hpccsystems"    # change this if you want to pull your images from somewhere other than DockerHub hpccsystems/*
     pullPolicy: IfNotPresent
   
@@ -53,20 +52,30 @@ dali:
 
 eclagent:
 - name: hthor
+  ## replicas indicates how many eclagent pods should be started
   replicas: 1
+  ## maxActive controls how many workunits may be active at once (per replica)
+  maxActive: 100
+  ## prefix may be used to set a filename prefix applied to any relative filenames used by jobs submitted to this queue
   prefix: hthor
-  containerPerAgent: false
+  ## Set to false if you want to launch each workunit in its own container, true to run as child processes in eclagent pod
+  useChildProcesses: false
+  ## type may be 'hthor' (the default) or 'roxie', to specify that the roxie engine rather than the hthor engine should be used for eclagent workunit processing
+  type: hthor
+
 - name: roxie
   replicas: 1
   prefix: roxie
-  containerPerAgent: false
+  useChildProcesses: false
   type: roxie
     
 eclccserver:
 - name: myeclccserver
   replicas: 1
-## Specify a list of queues to listen on if you don't want this eclccserver listening on all queues
-# listen: [ thor ]
+  ## Set to false if you want to launch each workunit compile in its own container, true to run as child processes in eclccserver pod.
+  useChildProcesses: false
+  ## Specify a list of queues to listen on if you don't want this eclccserver listening on all queues. If empty or missing, listens on all queues
+  listen: []
     
 esp:
 - name: myesp
@@ -74,11 +83,12 @@ esp:
 
 roxie:
 - name: roxie-cluster
+  disabled: true
   prefix: roxiecluster
-  ports: [9876,0]
+  ports: [9876]
   numChannels: 2
   serverReplicas: 1
-  topoReplicas: 2
+  topoReplicas: 1
   topoport: 9004
   useAeron: true
 

+ 1 - 1
ecl/agentexec/agentexec.cpp

@@ -236,7 +236,7 @@ public:
                 jobSpecName.set("thormaster");
                 processName.set("thormaster_lcr");
             }
-            if (queryComponentConfig().getPropBool("@containerPerAgent", false))  // MORE - make this a per-workunit setting?
+            if (!queryComponentConfig().getPropBool("@useChildProcesses", false))
             {
                 std::list<std::pair<std::string, std::string>> params = { };
                 if (queryComponentConfig().getPropBool("@useThorQueue", true))

+ 7 - 2
ecl/eclccserver/eclccserver.cpp

@@ -462,7 +462,7 @@ public:
     {
         DBGLOG("Compile request processing for workunit %s", wuid.get());
 #ifdef _CONTAINERIZED
-        if (globals->getPropBool("@containerPerCompile", false) && !globals->hasProp("@workunit"))
+        if (!globals->getPropBool("@useChildProcesses", false) && !globals->hasProp("@workunit"))
         {
             runK8sJob("eclccserver", wuid, wuid, globals->getPropBool("@deleteJobs", true));
             return;
@@ -776,7 +776,7 @@ eclccserver:
   enableEclccDali: true
   enableSysLog: true
   generatePrecompiledHeader: true
-  maxEclccProcesses: 4
+  useChildProcesses: false
   name: myeclccserver
   traceLevel: 1
 )!!";
@@ -888,9 +888,14 @@ int main(int argc, const char *argv[])
 #endif
             if (!queueNames.length())
                 throw MakeStringException(0, "No queues found to listen on");
+#ifdef _CONTAINERIZED
+            bool useChildProcesses = globals->getPropInt("@useChildProcesses", false);
+            unsigned maxThreads = globals->getPropInt("@maxActive", useChildProcesses ? 100 : 4);
+#else
             // The option has been renamed to avoid confusion with the similarly-named eclcc option, but
             // still accept the old name if the new one is not present.
             unsigned maxThreads = globals->getPropInt("@maxEclccProcesses", globals->getPropInt("@maxCompileThreads", 4));
+#endif
             EclccServer server(queueNames.str(), maxThreads);
             // if we got here, eclserver is successfully started and all options are good, so create the "sentinel file" for re-runs from the script
             // put in its own "scope" to force the flush

+ 2 - 0
esp/src/eclwatch/dojoConfig.js

@@ -25,6 +25,7 @@ function getConfig(env) {
             "css": baseUrl + "/loader/css",
             "@hpcc-js/api": hpccBaseUrl + "/api/dist/index",
             "@hpcc-js/chart": hpccBaseUrl + "/chart/dist/index",
+            "@hpcc-js/codemirror": hpccBaseUrl + "/codemirror/dist/index",
             "@hpcc-js/common": hpccBaseUrl + "/common/dist/index",
             "@hpcc-js/comms": hpccBaseUrl + "/comms/dist/index",
             "@hpcc-js/composite": hpccBaseUrl + "/composite/dist/index",
@@ -34,6 +35,7 @@ function getConfig(env) {
             "@hpcc-js/form": hpccBaseUrl + "/form/dist/index",
             "@hpcc-js/graph": hpccBaseUrl + "/graph/dist/index",
             "@hpcc-js/layout": hpccBaseUrl + "/layout/dist/index",
+            "@hpcc-js/phosphor": hpccBaseUrl + "/phosphor/dist/index",
             "@hpcc-js/html": hpccBaseUrl + "/html/dist/index",
             "@hpcc-js/map": hpccBaseUrl + "/map/dist/index",
             "@hpcc-js/other": hpccBaseUrl + "/other/dist/index",

+ 260 - 246
esp/src/package-lock.json

@@ -38,37 +38,37 @@
       "integrity": "sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A=="
     },
     "@hpcc-js/api": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/api/-/api-2.8.9.tgz",
-      "integrity": "sha512-/wN9OtJmQ0thD9gg/UNtOLoCJXExpAXR6Q9o960HqX313cTZELwJSWTmRHVBUx29+SgtzEUL86TYczNo/vuHDA==",
+      "version": "2.8.12",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/api/-/api-2.8.12.tgz",
+      "integrity": "sha512-NHWyeA/vTRBmplESaPUzT0V0OyZPx3Jf3ibPP/XffLbnLa1MDVRzM+kCZuXOLAUhszurzv05dG7OM4j5HBD/hQ==",
       "requires": {
-        "@hpcc-js/common": "^2.21.2"
+        "@hpcc-js/common": "^2.22.1"
       }
     },
     "@hpcc-js/chart": {
-      "version": "2.27.1",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/chart/-/chart-2.27.1.tgz",
-      "integrity": "sha512-wDhwngkwjgzyXiXreMHNeVH1O8f7Iec4A3URrSU+TycA1CCWnCDaJyclq1drE96rGcIFbMRmb9m9HDVIngASYg==",
+      "version": "2.27.4",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/chart/-/chart-2.27.4.tgz",
+      "integrity": "sha512-WeEV85iZwT7VIudwapyi3xlPJrQqmSwrCbFtGDljuAeNPPAdvkZxQ2T7TKo+R77dwwlt2ilvITN0DVApICZhgw==",
       "requires": {
-        "@hpcc-js/api": "^2.8.9",
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/util": "^2.11.0"
+        "@hpcc-js/api": "^2.8.12",
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/util": "^2.11.2"
       }
     },
     "@hpcc-js/codemirror": {
-      "version": "2.12.4",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/codemirror/-/codemirror-2.12.4.tgz",
-      "integrity": "sha512-Tf2HDf2sWHamCLSMlRvUTwh4l8uOyFH0WLa9TVbLVJph2zmpSilqhWrmn3P91SBRG2DMvfJEhREzz6y7UZgF4w==",
+      "version": "2.12.7",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/codemirror/-/codemirror-2.12.7.tgz",
+      "integrity": "sha512-4frA3rJCc66n7U1Yc50+OKBTSAWFzUnVbijzKxUQLygPvoTxGnjQWG1+h2wfK30G69VIEPC/za6etOA1FuKrDQ==",
       "requires": {
-        "@hpcc-js/common": "^2.21.2"
+        "@hpcc-js/common": "^2.22.1"
       }
     },
     "@hpcc-js/common": {
-      "version": "2.21.2",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/common/-/common-2.21.2.tgz",
-      "integrity": "sha512-vsyWV3fkQ5TYruuPPFnl9CBOtq6p5S/3OOVEKbVv9ELIR4VWEoFwqWZWZSslGYAveA5gUiEdnMZHPVK85SsRnQ==",
+      "version": "2.22.1",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/common/-/common-2.22.1.tgz",
+      "integrity": "sha512-JuE3eGZShuyXxhISZc+cubHSFBIlsyWW7umLvQcebMwK+fJV3XFhOmivnM+ver8utDG9cuwaUvN8iLq2e07WXg==",
       "requires": {
-        "@hpcc-js/util": "^2.11.0",
+        "@hpcc-js/util": "^2.11.2",
         "@types/d3-array": "1.2.6",
         "@types/d3-brush": "1.0.10",
         "@types/d3-collection": "1.0.8",
@@ -87,12 +87,12 @@
       }
     },
     "@hpcc-js/comms": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/comms/-/comms-2.13.1.tgz",
-      "integrity": "sha512-KeiKte/QwmsP2n2bYL+W4dOagwMn8YW/tHXRYZIIYuNtwKNz2phKZkF6HxA77ozJ8wkUxkiGGGAQTcLsrJPCcg==",
+      "version": "2.13.4",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/comms/-/comms-2.13.4.tgz",
+      "integrity": "sha512-M7Y3/IzS1te1ykNnG4fw7S7nKGI3UvvdjLVx6jaSMYzRBSgrSf2LhJOh+R+nCyzpdEh5AzYysaZmSe7LnSsmnQ==",
       "requires": {
-        "@hpcc-js/ddl-shim": "^2.17.1",
-        "@hpcc-js/util": "^2.11.0",
+        "@hpcc-js/ddl-shim": "^2.17.2",
+        "@hpcc-js/util": "^2.11.2",
         "node-fetch": "2.3.0",
         "safe-buffer": "5.1.2",
         "tmp": "0.0.33",
@@ -100,76 +100,76 @@
       }
     },
     "@hpcc-js/ddl-shim": {
-      "version": "2.17.1",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/ddl-shim/-/ddl-shim-2.17.1.tgz",
-      "integrity": "sha512-7taE43F46uOrMbBAxncLcgjdvxFi7r8pSxiq+/UMaScJxhlfrWA7Ob2TEuS8vPGc07GcBv9xomO/5VbIb/VwGg==",
+      "version": "2.17.2",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/ddl-shim/-/ddl-shim-2.17.2.tgz",
+      "integrity": "sha512-4+0VWAdnWoqiKpIOYPuexnxZ9kk9zNIspnnZXSNsj42Gbao1Y0ysP7TCW3IRP/8Hq4Ls5XCjcu434we/URgcdA==",
       "requires": {
         "ajv": "6.10.0"
       }
     },
     "@hpcc-js/dgrid": {
-      "version": "2.8.4",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/dgrid/-/dgrid-2.8.4.tgz",
-      "integrity": "sha512-SXJjXrE29jNtolyTsym3hpHfp+zoPehQ+2bRHvTzkQBXX78+12kFWq57/rAZ771jn7zdOxIqKa0PZgTl0odRSg==",
+      "version": "2.8.7",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/dgrid/-/dgrid-2.8.7.tgz",
+      "integrity": "sha512-w65hKCHAQtu1ku97eewv1SB/enIjuXTF6GWu0nrj6pjvAdq/TQfek+JFFot143MTNAcaB37pm6ECO1KxNNfNew==",
       "requires": {
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/ddl-shim": "^2.17.1",
-        "@hpcc-js/dgrid-shim": "^2.11.7",
-        "@hpcc-js/util": "^2.11.0"
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/ddl-shim": "^2.17.2",
+        "@hpcc-js/dgrid-shim": "^2.11.8",
+        "@hpcc-js/util": "^2.11.2"
       }
     },
     "@hpcc-js/dgrid-shim": {
-      "version": "2.11.7",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/dgrid-shim/-/dgrid-shim-2.11.7.tgz",
-      "integrity": "sha512-rTxdwLOEDdEK9OfRpdI0toTGjSj0NxQAXlW1J0pamTfpm7JRKR24lXw87XaBdnmK+h4k0FkntErvR4HixG7ncw=="
+      "version": "2.11.8",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/dgrid-shim/-/dgrid-shim-2.11.8.tgz",
+      "integrity": "sha512-ppv3wHzdbdxnn4UE57XcAeWrdXuqhPViC1ys5mIt8g+nQaKXHDzJ/ziuJq5S6NZHOlfAJU0ZqHyj+JMRszys9g=="
     },
     "@hpcc-js/eclwatch": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/eclwatch/-/eclwatch-2.8.9.tgz",
-      "integrity": "sha512-iUC5ZL1pK3+YpFpCQk1HuG1uCq/syfdioUjLjEOknhGhiljDy+F0NRxeXYFUizvFLQfcgy4EfGrFlehdAlQwOg==",
-      "requires": {
-        "@hpcc-js/codemirror": "^2.12.4",
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/comms": "^2.13.1",
-        "@hpcc-js/dgrid": "^2.8.4",
-        "@hpcc-js/graph": "^2.15.2",
-        "@hpcc-js/layout": "^2.16.15",
-        "@hpcc-js/phosphor": "^2.13.18",
-        "@hpcc-js/timeline": "^2.7.12",
-        "@hpcc-js/tree": "^2.12.0",
-        "@hpcc-js/util": "^2.11.0"
+      "version": "2.8.13",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/eclwatch/-/eclwatch-2.8.13.tgz",
+      "integrity": "sha512-YPEdJp7MoDzRArA/drO56LUwWJXQepZoPFGBEr94J5cr+IGR30oT7rletyRP6ne1tbSio2pptaVb/cgLDC0k4w==",
+      "requires": {
+        "@hpcc-js/codemirror": "^2.12.7",
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/comms": "^2.13.4",
+        "@hpcc-js/dgrid": "^2.8.7",
+        "@hpcc-js/graph": "^2.15.5",
+        "@hpcc-js/layout": "^2.16.18",
+        "@hpcc-js/phosphor": "^2.14.1",
+        "@hpcc-js/timeline": "^2.7.15",
+        "@hpcc-js/tree": "^2.12.3",
+        "@hpcc-js/util": "^2.11.2"
       }
     },
     "@hpcc-js/graph": {
-      "version": "2.15.2",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/graph/-/graph-2.15.2.tgz",
-      "integrity": "sha512-S1vmeE6y5o+iAc5VBvwkgk9prbizDrdVAX9bpl+ewk2HAwmxS9Qs7mirKS50xMcj69wsRd2udqOoYpgvfI7gZw==",
-      "requires": {
-        "@hpcc-js/api": "^2.8.9",
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/react": "^2.9.0",
-        "@hpcc-js/util": "^2.11.0",
+      "version": "2.15.5",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/graph/-/graph-2.15.5.tgz",
+      "integrity": "sha512-HVkkW/3Reo3JSqfPTJU2hGQIaH11emoi3gM4Mslpy98+4BcIxTxG6DAgnzAU2S13VfbABQWYy1M+xsryC33JBA==",
+      "requires": {
+        "@hpcc-js/api": "^2.8.12",
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/react": "^2.9.3",
+        "@hpcc-js/util": "^2.11.2",
         "@hpcc-js/wasm": "^0.3.6"
       }
     },
     "@hpcc-js/html": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/html/-/html-2.8.3.tgz",
-      "integrity": "sha512-9NSwHFRXAD5DGBsbdLu0Dg+oMXBrf0AvSuQe0tD5/mm/1vkFy1GzuO/IsIr5V0HSZretFKfFaMzTozQDPZPlXQ==",
+      "version": "2.8.6",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/html/-/html-2.8.6.tgz",
+      "integrity": "sha512-Y06i1HGGXU1BZlR/oZK9tg45OhEuhv0R4pS03Kyk0z8EnWNeScuSZ2yaEePzkBZ1dHjJWNZM9h6AtyXVHPu5wA==",
       "requires": {
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/preact-shim": "^2.13.0",
-        "@hpcc-js/util": "^2.11.0"
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/preact-shim": "^2.13.1",
+        "@hpcc-js/util": "^2.11.2"
       }
     },
     "@hpcc-js/layout": {
-      "version": "2.16.15",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/layout/-/layout-2.16.15.tgz",
-      "integrity": "sha512-LSHNKPLAWjQWRVIRpE179dfbSFbYA1cKJmdCbioH4GoZPnmcp9Vx0/8wlJ46yDuVRfIYbldOvlg3SN7dP+wULg==",
+      "version": "2.16.18",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/layout/-/layout-2.16.18.tgz",
+      "integrity": "sha512-C95uZkXS5OdyiNDhKsUUot747HoJ80t5huc+CdK1b0j3NGQVoPTlUk36xVyRbHNahHzGEAL6wB4JgLvJGy6uxQ==",
       "requires": {
-        "@hpcc-js/api": "^2.8.9",
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/dgrid": "^2.8.4"
+        "@hpcc-js/api": "^2.8.12",
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/dgrid": "^2.8.7"
       }
     },
     "@hpcc-js/leaflet-shim": {
@@ -183,44 +183,44 @@
       }
     },
     "@hpcc-js/map": {
-      "version": "2.14.14",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/map/-/map-2.14.14.tgz",
-      "integrity": "sha512-LCxCuRooh+uGY2NUzZW4scDymPjvoGG6j1VYXlSNPoMPNszUDhT9SPMf82Y1M9MId16SBAdGGBWLsND3GA18qw==",
-      "requires": {
-        "@hpcc-js/api": "^2.8.9",
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/graph": "^2.15.2",
-        "@hpcc-js/layout": "^2.16.15",
+      "version": "2.14.17",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/map/-/map-2.14.17.tgz",
+      "integrity": "sha512-8xFaT/SBbKbXkaAIA7Q4mr3oH/NhNxqrC4nBxiFG3hYWE8Ne+N6gcGVmrc8/mtSH9A61YBGpABeb+Z5GCvPQVA==",
+      "requires": {
+        "@hpcc-js/api": "^2.8.12",
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/graph": "^2.15.5",
+        "@hpcc-js/layout": "^2.16.18",
         "@hpcc-js/leaflet-shim": "^2.1.5",
-        "@hpcc-js/other": "^2.13.18",
-        "@hpcc-js/util": "^2.11.0"
+        "@hpcc-js/other": "^2.13.21",
+        "@hpcc-js/util": "^2.11.2"
       }
     },
     "@hpcc-js/other": {
-      "version": "2.13.18",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/other/-/other-2.13.18.tgz",
-      "integrity": "sha512-RAe3sK6htqLWzF5eB8kSwPSY/qQwm5ZtmELGvVi9uFgT3K2K4BVPh00W2oRzY14vxoxdDYO3l9tgM/YarhwoxA==",
+      "version": "2.13.21",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/other/-/other-2.13.21.tgz",
+      "integrity": "sha512-PGCCIgLlojOzz7QMOzsWZj2NMpbScKkGrdY+5OXFQKHU+iY6MYKA3+pkPvIOJM5TVyiZSvFYzL6FijfeZ6rqTg==",
       "requires": {
-        "@hpcc-js/api": "^2.8.9",
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/layout": "^2.16.15"
+        "@hpcc-js/api": "^2.8.12",
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/layout": "^2.16.18"
       }
     },
     "@hpcc-js/phosphor": {
-      "version": "2.13.18",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/phosphor/-/phosphor-2.13.18.tgz",
-      "integrity": "sha512-d5EofcG2f891SDQfdt4FbOmwXDjeOhjKNSmThcrxYexMVKtAek7hU/u3o+/ylaFTaJGObKfCxKucTR2SgVC80g==",
+      "version": "2.14.1",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/phosphor/-/phosphor-2.14.1.tgz",
+      "integrity": "sha512-0HeMlG4p1Sr1dYYXP/CGDTuW6ObTc/VztB+XkYHe925SPtDWegSsRREi7PXUuYd8W7O6p/bpEM3Llf40RS6n1Q==",
       "requires": {
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/other": "^2.13.18",
-        "@hpcc-js/phosphor-shim": "^2.11.4",
-        "@hpcc-js/util": "^2.11.0"
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/other": "^2.13.21",
+        "@hpcc-js/phosphor-shim": "^2.11.5",
+        "@hpcc-js/util": "^2.11.2"
       }
     },
     "@hpcc-js/phosphor-shim": {
-      "version": "2.11.4",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/phosphor-shim/-/phosphor-shim-2.11.4.tgz",
-      "integrity": "sha512-sqvjH/cZ0KY6LCSZ+R6dAdUpCcjhBi75Dhs407b0XMcofNU90WSTQfJ03qNKFAXrPLjSa+pTm/DntA9gRPzG2Q==",
+      "version": "2.11.5",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/phosphor-shim/-/phosphor-shim-2.11.5.tgz",
+      "integrity": "sha512-m6YxdWr5+xP5V8sE65sykdx5HRE5QueDZANJe7kogIVHnnq3kQq2REkl/iUGT3m6RoN/P1VQkM+6bYScqnfh4A==",
       "requires": {
         "@phosphor/algorithm": "1.1.2",
         "@phosphor/commands": "1.5.0",
@@ -229,50 +229,50 @@
       }
     },
     "@hpcc-js/preact-shim": {
-      "version": "2.13.0",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/preact-shim/-/preact-shim-2.13.0.tgz",
-      "integrity": "sha512-/gjQb5f5mJouewcYXYIuNs3zTjWNrsk9qKl/9JS2MianT61k4AN5X4ddqi41mQ/fFGBbE+vidPiMeyz/EjgETA==",
+      "version": "2.13.1",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/preact-shim/-/preact-shim-2.13.1.tgz",
+      "integrity": "sha512-NLb13BTb0JgxySiywqbRF6xFZxRk2pioDHpch8qfPd6/2r0Bjki9lu5zamfMfkOhdgHaL/tbbM54bIN0gsNaEA==",
       "requires": {
         "preact": "10.1.1"
       }
     },
     "@hpcc-js/react": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/react/-/react-2.9.0.tgz",
-      "integrity": "sha512-aT3eDn6p9XnQhYfzFpd53Hr5eoFHvD10RxNHV2gADDMZhukKvOc1LyhsszYD+yrkZcavOyJB4qnvw4Qm2v4KKA==",
+      "version": "2.9.3",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/react/-/react-2.9.3.tgz",
+      "integrity": "sha512-orS+/6DJnaGjnVmYCHq1SilbOMDnUqn52+/CB4ZHFy5h76ZZQfbW6Xjjbk3B3aG4hq77v9JZHzk3Ob8rj/D9zg==",
       "requires": {
-        "@hpcc-js/common": "^2.21.2",
-        "@hpcc-js/preact-shim": "^2.13.0"
+        "@hpcc-js/common": "^2.22.1",
+        "@hpcc-js/preact-shim": "^2.13.1"
       }
     },
     "@hpcc-js/timeline": {
-      "version": "2.7.12",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/timeline/-/timeline-2.7.12.tgz",
-      "integrity": "sha512-jNLPf8sm7MGqdzauZpOom9QTN5xR7WRGFGLdwCzC2XsQfmThUFkZ6tbJMrS/iM/GNsUyK9xvqArUZ3ovFyuJzg==",
+      "version": "2.7.15",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/timeline/-/timeline-2.7.15.tgz",
+      "integrity": "sha512-s2YlEz1jzLpQsL6Pgm/Me97o+0DbjcCFFOa4vQiKvNLaIrBzmJFakgFW+hFtuY4oNM2aRXfi3onmTzAvwca0ng==",
       "requires": {
-        "@hpcc-js/api": "^2.8.9",
-        "@hpcc-js/chart": "^2.27.1",
-        "@hpcc-js/common": "^2.21.2"
+        "@hpcc-js/api": "^2.8.12",
+        "@hpcc-js/chart": "^2.27.4",
+        "@hpcc-js/common": "^2.22.1"
       }
     },
     "@hpcc-js/tree": {
-      "version": "2.12.0",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/tree/-/tree-2.12.0.tgz",
-      "integrity": "sha512-wZKF/QVE+C+3fBtEyrSyxeW6rB7c6Mo/R01JcK8EOOOBiGPHqFC/FQrcfywoLadP0apPHhU7iBKOT3yqR3rG/Q==",
+      "version": "2.12.3",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/tree/-/tree-2.12.3.tgz",
+      "integrity": "sha512-vmNdA0pb8ROIGBSJn610m2wUrsFwQgxosV3Y0AbfpB7pVg6IBI/K8ZUsHpSy+6wuGSnXyaQ7n5mzh5FZULtw0g==",
       "requires": {
-        "@hpcc-js/api": "^2.8.9",
-        "@hpcc-js/common": "^2.21.2"
+        "@hpcc-js/api": "^2.8.12",
+        "@hpcc-js/common": "^2.22.1"
       }
     },
     "@hpcc-js/util": {
-      "version": "2.11.0",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/util/-/util-2.11.0.tgz",
-      "integrity": "sha512-nGph0ZSV5TBaJBIWq2GyTUXQgIEKwA7dK+F9Fr1ogtcGPYDtTuC8FKtM/LW6E3/umUn5T6JFLD/qA7J6XraGiQ=="
+      "version": "2.11.2",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/util/-/util-2.11.2.tgz",
+      "integrity": "sha512-pQsc6LBvL41QqiSfrl2S7Nqkq73d79dvpLQfF98S4Q+QSYIuIR6WKkQn0Uq4qdRFZcQcYWFsQBQ3fhq8rQUlVA=="
     },
     "@hpcc-js/wasm": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/@hpcc-js/wasm/-/wasm-0.3.8.tgz",
-      "integrity": "sha512-TAWBC5bpWsM2/K6dQUBNgUH/1vnJbLAWX+S5ltJBVIOhINURdaaCiQQXWot2xlDFcyM7b2WQx4TA5Fbx76QXWg=="
+      "version": "0.3.10",
+      "resolved": "https://registry.npmjs.org/@hpcc-js/wasm/-/wasm-0.3.10.tgz",
+      "integrity": "sha512-srQsBfqkZ/FH/uTq55ZYBLBw28qP+5JW3GYetuVZUMnXZ3oDSpX5PxwkrUYpcbT/O5pxMEd59nxv7SHHJjQr5A=="
     },
     "@koa/cors": {
       "version": "3.0.0",
@@ -313,15 +313,27 @@
       }
     },
     "@material-ui/lab": {
-      "version": "4.0.0-alpha.45",
-      "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.45.tgz",
-      "integrity": "sha512-zT6kUU87SHsPukiu3tlWg8V6o0tGS38c1b/xst/kPqX6eLbfqrROyxhHn1A8ZtHmqga1AKQdv/1llQoG80Afww==",
+      "version": "4.0.0-alpha.47",
+      "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.47.tgz",
+      "integrity": "sha512-+WC3O0M/769D3nO9Rqupusc+lob7tQMe5/DnOjAhZ0bpXlJbhZb7N84WkEk4JgQLj6ydP8e9Jhqd1lG+mGj+xw==",
       "requires": {
         "@babel/runtime": "^7.4.4",
-        "@material-ui/utils": "^4.7.1",
+        "@material-ui/utils": "^4.9.6",
         "clsx": "^1.0.4",
         "prop-types": "^15.7.2",
         "react-is": "^16.8.0"
+      },
+      "dependencies": {
+        "@material-ui/utils": {
+          "version": "4.9.6",
+          "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.9.6.tgz",
+          "integrity": "sha512-gqlBn0JPPTUZeAktn1rgMcy9Iczrr74ecx31tyZLVGdBGGzsxzM6PP6zeS7FuoLS6vG4hoZP7hWnOoHtkR0Kvw==",
+          "requires": {
+            "@babel/runtime": "^7.4.4",
+            "prop-types": "^15.7.2",
+            "react-is": "^16.8.0"
+          }
+        }
       }
     },
     "@material-ui/styles": {
@@ -664,178 +676,177 @@
       }
     },
     "@webassemblyjs/ast": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
-      "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+      "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/helper-module-context": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/wast-parser": "1.8.5"
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
       }
     },
     "@webassemblyjs/floating-point-hex-parser": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
-      "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+      "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
       "dev": true
     },
     "@webassemblyjs/helper-api-error": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
-      "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+      "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
       "dev": true
     },
     "@webassemblyjs/helper-buffer": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
-      "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+      "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
       "dev": true
     },
     "@webassemblyjs/helper-code-frame": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
-      "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+      "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/wast-printer": "1.8.5"
+        "@webassemblyjs/wast-printer": "1.9.0"
       }
     },
     "@webassemblyjs/helper-fsm": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
-      "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+      "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
       "dev": true
     },
     "@webassemblyjs/helper-module-context": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
-      "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+      "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "mamacro": "^0.0.3"
+        "@webassemblyjs/ast": "1.9.0"
       }
     },
     "@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
-      "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
       "dev": true
     },
     "@webassemblyjs/helper-wasm-section": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
-      "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+      "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-buffer": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/wasm-gen": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0"
       }
     },
     "@webassemblyjs/ieee754": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
-      "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+      "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
       "dev": true,
       "requires": {
         "@xtuc/ieee754": "^1.2.0"
       }
     },
     "@webassemblyjs/leb128": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
-      "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+      "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
       "dev": true,
       "requires": {
         "@xtuc/long": "4.2.2"
       }
     },
     "@webassemblyjs/utf8": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
-      "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+      "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
       "dev": true
     },
     "@webassemblyjs/wasm-edit": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
-      "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+      "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-buffer": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/helper-wasm-section": "1.8.5",
-        "@webassemblyjs/wasm-gen": "1.8.5",
-        "@webassemblyjs/wasm-opt": "1.8.5",
-        "@webassemblyjs/wasm-parser": "1.8.5",
-        "@webassemblyjs/wast-printer": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/helper-wasm-section": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-opt": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "@webassemblyjs/wast-printer": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-gen": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
-      "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+      "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/ieee754": "1.8.5",
-        "@webassemblyjs/leb128": "1.8.5",
-        "@webassemblyjs/utf8": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-opt": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
-      "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+      "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-buffer": "1.8.5",
-        "@webassemblyjs/wasm-gen": "1.8.5",
-        "@webassemblyjs/wasm-parser": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-parser": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
-      "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+      "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-api-error": "1.8.5",
-        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
-        "@webassemblyjs/ieee754": "1.8.5",
-        "@webassemblyjs/leb128": "1.8.5",
-        "@webassemblyjs/utf8": "1.8.5"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
       }
     },
     "@webassemblyjs/wast-parser": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
-      "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+      "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/floating-point-hex-parser": "1.8.5",
-        "@webassemblyjs/helper-api-error": "1.8.5",
-        "@webassemblyjs/helper-code-frame": "1.8.5",
-        "@webassemblyjs/helper-fsm": "1.8.5",
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-code-frame": "1.9.0",
+        "@webassemblyjs/helper-fsm": "1.9.0",
         "@xtuc/long": "4.2.2"
       }
     },
     "@webassemblyjs/wast-printer": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
-      "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+      "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/wast-parser": "1.8.5",
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0",
         "@xtuc/long": "4.2.2"
       }
     },
@@ -4600,9 +4611,9 @@
       },
       "dependencies": {
         "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "version": "1.2.5",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+          "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
           "dev": true
         }
       }
@@ -5263,12 +5274,6 @@
         "semver": "^5.6.0"
       }
     },
-    "mamacro": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
-      "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
-      "dev": true
-    },
     "map-age-cleaner": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
@@ -7571,9 +7576,9 @@
       },
       "dependencies": {
         "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "version": "1.2.5",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+          "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
           "dev": true
         }
       }
@@ -7620,9 +7625,9 @@
       "dev": true
     },
     "terser": {
-      "version": "4.6.6",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz",
-      "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==",
+      "version": "4.6.10",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz",
+      "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==",
       "dev": true,
       "requires": {
         "commander": "^2.20.0",
@@ -8097,12 +8102,12 @@
       "dev": true
     },
     "watchpack": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
-      "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
+      "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==",
       "dev": true,
       "requires": {
-        "chokidar": "^2.0.2",
+        "chokidar": "^2.1.8",
         "graceful-fs": "^4.1.2",
         "neo-async": "^2.5.0"
       },
@@ -8425,15 +8430,15 @@
       }
     },
     "webpack": {
-      "version": "4.42.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz",
-      "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==",
+      "version": "4.42.1",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz",
+      "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.8.5",
-        "@webassemblyjs/helper-module-context": "1.8.5",
-        "@webassemblyjs/wasm-edit": "1.8.5",
-        "@webassemblyjs/wasm-parser": "1.8.5",
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/wasm-edit": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
         "acorn": "^6.2.1",
         "ajv": "^6.10.2",
         "ajv-keywords": "^3.4.1",
@@ -8445,7 +8450,7 @@
         "loader-utils": "^1.2.3",
         "memory-fs": "^0.4.1",
         "micromatch": "^3.1.10",
-        "mkdirp": "^0.5.1",
+        "mkdirp": "^0.5.3",
         "neo-async": "^2.6.1",
         "node-libs-browser": "^2.2.1",
         "schema-utils": "^1.0.0",
@@ -8746,6 +8751,15 @@
             "snapdragon": "^0.8.1",
             "to-regex": "^3.0.2"
           }
+        },
+        "mkdirp": {
+          "version": "0.5.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
+          "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.5"
+          }
         }
       }
     },

+ 20 - 18
esp/src/package.json

@@ -32,22 +32,24 @@
   },
   "main": "src/stub.js",
   "dependencies": {
-    "@hpcc-js/chart": "^2.27.1",
-    "@hpcc-js/common": "^2.21.2",
-    "@hpcc-js/comms": "^2.13.1",
-    "@hpcc-js/eclwatch": "^2.8.9",
-    "@hpcc-js/graph": "^2.15.2",
-    "@hpcc-js/html": "^2.8.3",
-    "@hpcc-js/layout": "^2.16.15",
-    "@hpcc-js/map": "^2.14.14",
-    "@hpcc-js/other": "^2.13.18",
-    "@hpcc-js/react": "^2.9.0",
-    "@hpcc-js/tree": "^2.12.0",
-    "@hpcc-js/util": "^2.11.0",
-    "@hpcc-js/wasm": "^0.3.8",
+    "@hpcc-js/chart": "^2.27.4",
+    "@hpcc-js/codemirror": "^2.12.7",
+    "@hpcc-js/common": "^2.22.1",
+    "@hpcc-js/comms": "^2.13.4",
+    "@hpcc-js/eclwatch": "^2.8.13",
+    "@hpcc-js/graph": "^2.15.5",
+    "@hpcc-js/html": "^2.8.6",
+    "@hpcc-js/layout": "^2.16.18",
+    "@hpcc-js/map": "^2.14.17",
+    "@hpcc-js/other": "^2.13.21",
+    "@hpcc-js/phosphor": "^2.14.1",
+    "@hpcc-js/react": "^2.9.3",
+    "@hpcc-js/tree": "^2.12.3",
+    "@hpcc-js/util": "^2.11.2",
+    "@hpcc-js/wasm": "^0.3.10",
     "@material-ui/core": "4.8.3",
     "@material-ui/icons": "^4.9.1",
-    "@material-ui/lab": "^4.0.0-alpha.42",
+    "@material-ui/lab": "^4.0.0-alpha.47",
     "clipboard": "2.0.4",
     "codemirror": "5.50.2",
     "dijit": "1.16.2",
@@ -62,6 +64,7 @@
   },
   "devDependencies": {
     "@types/dojo": "1.9.42",
+    "braces": ">=2.3.1",
     "copy-webpack-plugin": "^5.1.1",
     "cpx": "^1.5.0",
     "css-loader": "^3.4.2",
@@ -69,6 +72,7 @@
     "file-loader": "^5.1.0",
     "jshint": "^2.11.0",
     "local-web-server": "^4.0.0",
+    "minimist": ">=1.2.2",
     "npm-run-all": "^4.1.5",
     "rimraf": "^3.0.2",
     "style-loader": "^1.1.3",
@@ -76,10 +80,8 @@
     "tslint": "^6.1.0",
     "typescript": "^3.8.3",
     "url-loader": "^3.0.0",
-    "webpack": "^4.42.0",
-    "webpack-cli": "^3.3.11",
-    "minimist": ">=1.2.2",
-    "braces": ">=2.3.1"
+    "webpack": "^4.42.1",
+    "webpack-cli": "^3.3.11"
   },
   "author": "HPCC Systems",
   "license": "Apache-2.0",

+ 1 - 1
esp/src/src/DiskUsage.ts

@@ -105,7 +105,7 @@ export class Summary extends FlexGrid {
                     const data: { [key: string]: CompontentT } = {};
                     _details.ComponentUsages.forEach(cu => {
                         cu.MachineUsages.forEach(mu => {
-                            mu.DiskUsages.forEach(du => {
+                            mu.DiskUsages.filter(du => !isNaN(du.InUse) || !isNaN(du.Total)).forEach(du => {
                                 if (data[du.Name] === undefined) {
                                     data[du.Name] = {
                                         rowCount: 0,

+ 5 - 5
system/jlib/jlog.hpp

@@ -149,15 +149,15 @@ inline const char * LogMsgAudienceToFixString(LogMsgAudience audience)
     switch(audience)
     {
     case MSGAUD_operator:
-        return("Operator ");
+        return("OPR ");
     case MSGAUD_user:
-        return("User     ");
+        return("USR ");
     case MSGAUD_programmer:
-        return("Prog.    ");
+        return("PRG ");
     case MSGAUD_audit:
-        return("Audit    ");
+        return("AUD ");
     default:
-        return("UNKNOWN  ");
+        return("UNK ");
     }
 }
 inline unsigned LogMsgAudFromAbbrev(char const * abbrev)