From 6cd39b2d8cf3b65ef7fddbe82bfc6e9e9cb46877 Mon Sep 17 00:00:00 2001 From: geek Date: Mon, 19 Jun 2017 18:52:20 -0500 Subject: [PATCH] build: extended support for containerpilot v3 with sensors and local-compose --- local-compose.yml | 42 +++++--- packages/cp-frontend/Dockerfile | 8 +- packages/cp-frontend/bin/sensors.sh | 44 ++++++++ packages/cp-frontend/etc/containerpilot.json | 15 --- packages/cp-frontend/etc/containerpilot.json5 | 102 ++++++++++++++++++ packages/cp-frontend/src/state/store.js | 3 +- packages/cp-gql-mock-server/Dockerfile | 6 +- .../etc/containerpilot.json | 15 --- .../etc/containerpilot.json5 | 102 ++++++++++++++++++ packages/portal-api/Dockerfile | 16 ++- packages/portal-api/etc/containerpilot.json | 46 -------- packages/portal-api/etc/containerpilot.json5 | 102 ++++++++++++++++++ packages/portal-api/package.json | 1 + packages/portal-api/server.js | 2 + packages/ui-toolkit/Dockerfile | 8 +- packages/ui-toolkit/etc/containerpilot.json | 15 --- packages/ui-toolkit/etc/containerpilot.json5 | 102 ++++++++++++++++++ yarn.lock | 32 +++--- 18 files changed, 526 insertions(+), 135 deletions(-) create mode 100755 packages/cp-frontend/bin/sensors.sh delete mode 100644 packages/cp-frontend/etc/containerpilot.json create mode 100644 packages/cp-frontend/etc/containerpilot.json5 delete mode 100644 packages/cp-gql-mock-server/etc/containerpilot.json create mode 100644 packages/cp-gql-mock-server/etc/containerpilot.json5 delete mode 100644 packages/portal-api/etc/containerpilot.json create mode 100644 packages/portal-api/etc/containerpilot.json5 delete mode 100644 packages/ui-toolkit/etc/containerpilot.json create mode 100644 packages/ui-toolkit/etc/containerpilot.json5 diff --git a/local-compose.yml b/local-compose.yml index 3bd398fb..66289b07 100644 --- a/local-compose.yml +++ b/local-compose.yml @@ -6,17 +6,18 @@ # turn this into an HA Consul raft. ############################################################################# consul: - image: autopilotpattern/consul:latest + image: autopilotpattern/consul:0.7.2-r0.8 command: > /usr/local/bin/containerpilot /bin/consul agent -server - -bootstrap-expect 1 - -config-dir=/etc/consul - -ui-dir /ui + -config-dir=/etc/consul + -log-level=err + -bootstrap-expect 1 + -ui-dir /ui restart: always mem_limit: 128m ports: - - 8500 + - 8500:8500 dns: - 127.0.0.1 @@ -27,47 +28,62 @@ consul: # it is included here for demo purposes and is not required ############################################################################# prometheus: - image: autopilotpattern/prometheus:latest + image: autopilotpattern/prometheus:1.7.1-r20 restart: always mem_limit: 1g ports: - - 9090 + - 9090:9090 links: - consul:consul environment: - CONSUL=consul - CONSUL_AGENT=1 + dns: + - 127.0.0.1 + +traefik: + image: d0cker/traefik + ports: + - "80:80" + - "8080:8080" + links: + - consul:consul + environment: + - CONSUL=consul + restart: always ############################################################################# # FRONTEND ############################################################################# frontend: - build: packages/cp-frontend + build: ./ + dockerfile: packages/cp-frontend/Dockerfile mem_limit: 512m links: - consul:consul environment: - CONSUL=consul - - CONSUL_AGENT=1 - PORT=5000 - ports: + - REACT_APP_GQL_HOSTNAME=localhost + - REACT_APP_GQL_PORT=80 + expose: - 5000 ############################################################################# # BACKEND ############################################################################# api: - build: packages/portal-api + build: ./ + dockerfile: packages/portal-api/Dockerfile mem_limit: 512m links: - consul:consul - rethinkdb:rethinkdb environment: - CONSUL=consul - - CONSUL_AGENT=1 - PORT=3000 - RETHINK_HOST=rethinkdb - ports: + expose: - 3000 ############################################################################# diff --git a/packages/cp-frontend/Dockerfile b/packages/cp-frontend/Dockerfile index daaa2a1b..e0e025ed 100644 --- a/packages/cp-frontend/Dockerfile +++ b/packages/cp-frontend/Dockerfile @@ -1,16 +1,18 @@ FROM quay.io/yldio/alpine-node-containerpilot:latest +ENV CONTAINERPILOT /etc/containerpilot.json5 + RUN yarn add lerna@^2.0.0-rc.5 serve \ && ./node_modules/.bin/lerna clean --yes --scope joyent-cp-frontend --include-filtered-dependencies \ && ./node_modules/.bin/lerna bootstrap --scope joyent-cp-frontend --include-filtered-dependencies WORKDIR /opt/app/packages/cp-frontend -COPY packages/cp-frontend/etc/containerpilot.json /etc/ +COPY packages/cp-frontend/etc/containerpilot.json5 ${CONTAINERPILOT} + +RUN yarn run build ARG CIRCLE_BRANCH ENV REACT_APP_GQL_HOSTNAME gql-mock-server-$CIRCLE_BRANCH.svc.f4b20699-b323-4452-9091-977895896da6.eu-ams-1.triton.zone -RUN yarn run build - EXPOSE 3069 CMD ["/bin/containerpilot"] diff --git a/packages/cp-frontend/bin/sensors.sh b/packages/cp-frontend/bin/sensors.sh new file mode 100755 index 00000000..95b1880d --- /dev/null +++ b/packages/cp-frontend/bin/sensors.sh @@ -0,0 +1,44 @@ +#!/bin/bash +set -e + +help() { + echo 'Uses cli tools free and top to determine current CPU and memory usage' + echo 'for the telemetry service.' +} + +# memory usage in percent +memory() { + # awk oneliner to get memory usage + # free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }' + # output: + # Memory Usage: 15804/15959MB (99.03%) + local memory=$(free -m | awk 'NR==2{printf "%.2f", $3*100/$2 }') + /bin/containerpilot -putmetric "frontend_memory_percent=$memory" +} + +# cpu load +cpu() { + # oneliner to display cpu load + # top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}' + local cpuload=$(uptime | awk '{printf "%.2f", $6}') + /bin/containerpilot -putmetric "frontend_cpu_load=$cpuload" +} + +diskusage() { + local usage=$(df -P | grep '/$' | awk 'NR=2{print $3}' | sed 's/[^0-9\.]*//g') + /bin/containerpilot -putmetric "frontend_disk_usage=$usage" +} + +diskcapacity() { + local capacity=$(df -P | grep '/$' | awk 'NR=2{print $2}' | sed 's/[^0-9\.]*//g') + /bin/containerpilot -putmetric "frontend_disk_capacity=$capacity" +} + +cmd=$1 +if [ ! -z "$cmd" ]; then + shift 1 + $cmd "$@" + exit +fi + +help diff --git a/packages/cp-frontend/etc/containerpilot.json b/packages/cp-frontend/etc/containerpilot.json deleted file mode 100644 index 31e07f36..00000000 --- a/packages/cp-frontend/etc/containerpilot.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "consul": "0.0.0.0:8500", - "jobs": [ - { - "name": "cp-frontend", - "port": 3069, - "exec": "../../node_modules/.bin/serve --single build --port 3069", - "health": { - "exec": "/usr/bin/curl -o /dev/null --fail -s http://0.0.0.0:3069/", - "interval": 3, - "ttl": 10 - } - } - ] -} diff --git a/packages/cp-frontend/etc/containerpilot.json5 b/packages/cp-frontend/etc/containerpilot.json5 new file mode 100644 index 00000000..8d95f38b --- /dev/null +++ b/packages/cp-frontend/etc/containerpilot.json5 @@ -0,0 +1,102 @@ +{ + consul: 'localhost:8500', + jobs: [ + { + name: 'cp-frontend', + port: {{.PORT}}, + exec: '../../node_modules/.bin/serve --single build --port {{.PORT}}', + health: { + exec: '/usr/bin/curl -o /dev/null --fail -s http://localhost:{{.PORT}}', + interval: 2, + ttl: 5 + }, + tags: [ + 'traefik.backend=cp-frontend', + 'traefik.frontend.rule=PathPrefix:/', + 'traefik.frontend.entryPoints=http' + ] + }, + { + name: 'consul-agent', + exec: ['/usr/local/bin/consul', 'agent', + '-data-dir=/data', + '-config-dir=/config', + '-log-level=err', + '-rejoin', + '-retry-join', '{{ .CONSUL | default "consul" }}', + '-retry-max', '10', + '-retry-interval', '10s'], + restarts: 'unlimited' + }, + { + name: 'sensor_memory_usage', + exec: '/bin/sensors.sh memory', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_cpu_load', + exec: '/bin/sensors.sh cpu', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_capacity', + exec: '/bin/sensors.sh diskcapacity', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_usage', + exec: '/bin/sensors.sh diskusage', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + } + ], + telemetry: { + port: 9090, + tags: ['op'], + metrics: [ + { + namespace: 'cp_frontend', + subsystem: 'memory', + name: 'percent', + help: 'Percentage of memory used', + type: 'gauge' + }, + { + namespace: 'cp_frontend', + subsystem: 'cpu', + name: 'load', + help: 'CPU load', + type: 'gauge' + }, + { + namespace: 'cp_frontend', + subsystem: 'disk', + name: 'capacity', + help: 'Disk capacity', + type: 'gauge' + }, + { + namespace: 'cp_frontend', + subsystem: 'disk', + name: 'usage', + help: 'Disk usage', + type: 'gauge' + } + ] + } +} diff --git a/packages/cp-frontend/src/state/store.js b/packages/cp-frontend/src/state/store.js index 08154e0e..0c61b1b5 100644 --- a/packages/cp-frontend/src/state/store.js +++ b/packages/cp-frontend/src/state/store.js @@ -13,6 +13,7 @@ const GLOBAL = typeof window === 'object' } }; +const GQL_PORT = process.env.REACT_APP_GQL_PORT || 3000; const GQL_HOSTNAME = process.env.REACT_APP_GQL_HOSTNAME || GLOBAL.location.hostname; @@ -30,7 +31,7 @@ export const client = new ApolloClient({ return `${o.__typename}:${id}`; }, networkInterface: createNetworkInterface({ - uri: `http://${GQL_HOSTNAME}:3000/graphql` + uri: `http://${GQL_HOSTNAME}:${GQL_PORT}/graphql` }) }); diff --git a/packages/cp-gql-mock-server/Dockerfile b/packages/cp-gql-mock-server/Dockerfile index 26bedcf0..412511bb 100644 --- a/packages/cp-gql-mock-server/Dockerfile +++ b/packages/cp-gql-mock-server/Dockerfile @@ -1,11 +1,15 @@ FROM quay.io/yldio/alpine-node-containerpilot:latest +ENV CONTAINERPILOT /etc/containerpilot.json5 + RUN yarn add lerna@^2.0.0-rc.5 serve \ && ./node_modules/.bin/lerna clean --yes --scope joyent-cp-gql-mock-server --include-filtered-dependencies \ && ./node_modules/.bin/lerna bootstrap --scope joyent-cp-gql-mock-server --include-filtered-dependencies WORKDIR /opt/app/packages/cp-gql-mock-server -COPY packages/cp-gql-mock-server/etc/containerpilot.json /etc/ + +COPY packages/cp-gql-mock-server/etc/containerpilot.json5 ${CONTAINERPILOT} +COPY packages/cp-gql-mock-server/bin /bin ARG CIRCLE_BRANCH diff --git a/packages/cp-gql-mock-server/etc/containerpilot.json b/packages/cp-gql-mock-server/etc/containerpilot.json deleted file mode 100644 index 0632c600..00000000 --- a/packages/cp-gql-mock-server/etc/containerpilot.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "consul": "0.0.0.0:8500", - "jobs": [ - { - "name": "cp-gql-mock-server", - "port": 3000, - "exec": "yarn run start", - "health": { - "exec": "/usr/bin/curl -o /dev/null --fail -s http://0.0.0.0:3000/", - "interval": 3, - "ttl": 10 - } - } - ] -} \ No newline at end of file diff --git a/packages/cp-gql-mock-server/etc/containerpilot.json5 b/packages/cp-gql-mock-server/etc/containerpilot.json5 new file mode 100644 index 00000000..9c1bb5f8 --- /dev/null +++ b/packages/cp-gql-mock-server/etc/containerpilot.json5 @@ -0,0 +1,102 @@ +{ + consul: 'localhost:8500', + jobs: [ + { + name: 'cp-gql-mock-server', + port: {{.PORT}}, + exec: 'node .', + health: { + exec: '/usr/bin/curl -o /dev/null --fail -s http://localhost:{{.PORT}}/graphiql', + interval: 2, + ttl: 5 + }, + tags: [ + 'traefik.backend=cp-gql-mock-server', + 'traefik.frontend.rule=PathPrefix:/', + 'traefik.frontend.entryPoints=http' + ] + }, + { + name: 'consul-agent', + exec: ['/usr/local/bin/consul', 'agent', + '-data-dir=/data', + '-config-dir=/config', + '-log-level=err', + '-rejoin', + '-retry-join', '{{ .CONSUL | default "consul" }}', + '-retry-max', '10', + '-retry-interval', '10s'], + restarts: 'unlimited' + }, + { + name: 'sensor_memory_usage', + exec: '/bin/sensors.sh memory', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_cpu_load', + exec: '/bin/sensors.sh cpu', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_capacity', + exec: '/bin/sensors.sh diskcapacity', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_usage', + exec: '/bin/sensors.sh diskusage', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + } + ], + telemetry: { + port: 9090, + tags: ['op'], + metrics: [ + { + namespace: 'cp_gql_mock_server', + subsystem: 'memory', + name: 'percent', + help: 'Percentage of memory used', + type: 'gauge' + }, + { + namespace: 'cp_gql_mock_server', + subsystem: 'cpu', + name: 'load', + help: 'CPU load', + type: 'gauge' + }, + { + namespace: 'cp_gql_mock_server', + subsystem: 'disk', + name: 'capacity', + help: 'Disk capacity', + type: 'gauge' + }, + { + namespace: 'cp_gql_mock_server', + subsystem: 'disk', + name: 'usage', + help: 'Disk usage', + type: 'gauge' + } + ] + } +} diff --git a/packages/portal-api/Dockerfile b/packages/portal-api/Dockerfile index 8493fef4..704789ac 100644 --- a/packages/portal-api/Dockerfile +++ b/packages/portal-api/Dockerfile @@ -1,14 +1,20 @@ -# todo change to 7 FROM quay.io/yldio/alpine-node-containerpilot:latest +ENV CONTAINERPILOT /etc/containerpilot.json5 + +RUN set -x \ + && apk update \ + && apk add curl bash build-base python zeromq-dev \ + && rm -rf /var/cache/apk/* + RUN yarn add lerna@^2.0.0-rc.5 \ && ./node_modules/.bin/lerna clean --yes --scope portal-api --include-filtered-dependencies \ && ./node_modules/.bin/lerna bootstrap --scope portal-api --include-filtered-dependencies -WORKDIR /home/node/app/packages/portal-api -COPY packages/portal-api/etc/containerpilot.json /etc/ +WORKDIR /opt/app/packages/portal-api + +COPY packages/portal-api/etc/containerpilot.json5 ${CONTAINERPILOT} ARG CIRCLE_BRANCH -EXPOSE 3000 -CMD ["/bin/containerpilot", "yarn", "start"] +CMD ["/bin/containerpilot"] diff --git a/packages/portal-api/etc/containerpilot.json b/packages/portal-api/etc/containerpilot.json deleted file mode 100644 index a6c55623..00000000 --- a/packages/portal-api/etc/containerpilot.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "consul": "0.0.0.0:8500", - "services": [ - { - "name": "cp-gql-mock-server", - "port": 3000, - "health": "/usr/bin/curl -o /dev/null --fail -s http://0.0.0.0:3000/", - "poll": 3, - "ttl": 10 - } - ], - "backends": [], - "telemetry": { - "port": 9090, - "sensors": [ - { - "name": "frontend_memory_percent", - "help": "percentage of memory used", - "type": "gauge", - "poll": 5, - "check": ["/bin/sensors", "memory"] - }, - { - "name": "frontend_cpu_load", - "help": "cpu load", - "type": "gauge", - "poll": 5, - "check": ["/bin/sensors", "cpu"] - }, - { - "name": "frontend_disk_capacity", - "help": "disk capacity", - "type": "gauge", - "poll": 60, - "check": ["/bin/sensors", "diskcapacity"] - }, - { - "name": "frontend_disk_usage", - "help": "disk usage", - "type": "gauge", - "poll": 60, - "check": ["/bin/sensors", "diskusage"] - } - ] - } -} \ No newline at end of file diff --git a/packages/portal-api/etc/containerpilot.json5 b/packages/portal-api/etc/containerpilot.json5 new file mode 100644 index 00000000..7e484431 --- /dev/null +++ b/packages/portal-api/etc/containerpilot.json5 @@ -0,0 +1,102 @@ +{ + consul: 'localhost:8500', + jobs: [ + { + name: 'api', + port: {{.PORT}}, + exec: 'node server.js', + health: { + exec: '/usr/bin/curl -o /dev/null --fail -s http://localhost:{{.PORT}}/check-it-out', + interval: 2, + ttl: 5 + }, + tags: [ + 'traefik.backend=api', + 'traefik.frontend.rule=PathPrefix:/graphql,/graphiql', + 'traefik.frontend.entryPoints=http' + ] + }, + { + name: 'consul-agent', + exec: ['/usr/local/bin/consul', 'agent', + '-data-dir=/data', + '-config-dir=/config', + '-log-level=err', + '-rejoin', + '-retry-join', '{{ .CONSUL | default "consul" }}', + '-retry-max', '10', + '-retry-interval', '10s'], + restarts: 'unlimited' + }, + { + name: 'sensor_memory_usage', + exec: '/bin/sensors.sh memory', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_cpu_load', + exec: '/bin/sensors.sh cpu', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_capacity', + exec: '/bin/sensors.sh diskcapacity', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_usage', + exec: '/bin/sensors.sh diskusage', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + } + ], + telemetry: { + port: 9090, + tags: ['op'], + metrics: [ + { + namespace: 'api', + subsystem: 'memory', + name: 'percent', + help: 'Percentage of memory used', + type: 'gauge' + }, + { + namespace: 'api', + subsystem: 'cpu', + name: 'load', + help: 'CPU load', + type: 'gauge' + }, + { + namespace: 'api', + subsystem: 'disk', + name: 'capacity', + help: 'Disk capacity', + type: 'gauge' + }, + { + namespace: 'api', + subsystem: 'disk', + name: 'usage', + help: 'Disk usage', + type: 'gauge' + } + ] + } +} diff --git a/packages/portal-api/package.json b/packages/portal-api/package.json index d2cbedda..78060868 100644 --- a/packages/portal-api/package.json +++ b/packages/portal-api/package.json @@ -27,6 +27,7 @@ }, "dependencies": { "boom": "^5.1.0", + "brule": "^2.0.0", "graphi": "^2.2.1", "hoek": "^4.1.1", "joi": "^10.6.0", diff --git a/packages/portal-api/server.js b/packages/portal-api/server.js index c88ca917..3b06957a 100644 --- a/packages/portal-api/server.js +++ b/packages/portal-api/server.js @@ -1,5 +1,6 @@ 'use strict'; +const Brule = require('brule'); const Hapi = require('hapi'); const Inert = require('inert'); const Vision = require('vision'); @@ -31,6 +32,7 @@ const portalOptions = { }; server.register([ + Brule, Inert, Vision, { diff --git a/packages/ui-toolkit/Dockerfile b/packages/ui-toolkit/Dockerfile index e1697f39..54492ced 100644 --- a/packages/ui-toolkit/Dockerfile +++ b/packages/ui-toolkit/Dockerfile @@ -1,15 +1,17 @@ FROM quay.io/yldio/alpine-node-containerpilot:latest +ENV CONTAINERPILOT /etc/containerpilot.json5 + RUN yarn add lerna@^2.0.0-rc.5 serve \ && ./node_modules/.bin/lerna clean --yes --scope joyent-ui-toolkit --include-filtered-dependencies \ && ./node_modules/.bin/lerna bootstrap --scope joyent-ui-toolkit --include-filtered-dependencies WORKDIR /opt/app/packages/ui-toolkit +COPY packages/ui-toolkit/etc/containerpilot.json5 ${CONTAINERPILOT} + +RUN yarn run styleguide:build ARG CIRCLE_BRANCH -RUN yarn run styleguide:build -COPY packages/ui-toolkit/etc/containerpilot.json /etc/ - EXPOSE 6060 CMD ["/bin/containerpilot"] diff --git a/packages/ui-toolkit/etc/containerpilot.json b/packages/ui-toolkit/etc/containerpilot.json deleted file mode 100644 index 3e06dc7b..00000000 --- a/packages/ui-toolkit/etc/containerpilot.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "consul": "0.0.0.0:8500", - "jobs": [ - { - "name": "ui-toolkit", - "port": 6060, - "exec": "../../node_modules/.bin/serve --single styleguide --port 6060", - "health": { - "exec": "/usr/bin/curl -o /dev/null --fail -s http://0.0.0.0:6060/", - "interval": 3, - "ttl": 10 - } - } - ] -} diff --git a/packages/ui-toolkit/etc/containerpilot.json5 b/packages/ui-toolkit/etc/containerpilot.json5 new file mode 100644 index 00000000..cb75927d --- /dev/null +++ b/packages/ui-toolkit/etc/containerpilot.json5 @@ -0,0 +1,102 @@ +{ + consul: 'localhost:8500', + jobs: [ + { + name: 'ui-toolkit', + port: {{.PORT}}, + exec: '../../node_modules/.bin/serve --single styleguide --port {{.PORT}}', + health: { + exec: '/usr/bin/curl -o /dev/null --fail -s http://localhost:{{.PORT}}', + interval: 2, + ttl: 5 + }, + tags: [ + 'traefik.backend=ui-toolkit', + 'traefik.frontend.rule=PathPrefix:/', + 'traefik.frontend.entryPoints=http' + ] + }, + { + name: 'consul-agent', + exec: ['/usr/local/bin/consul', 'agent', + '-data-dir=/data', + '-config-dir=/config', + '-log-level=err', + '-rejoin', + '-retry-join', '{{ .CONSUL | default "consul" }}', + '-retry-max', '10', + '-retry-interval', '10s'], + restarts: 'unlimited' + }, + { + name: 'sensor_memory_usage', + exec: '/bin/sensors.sh memory', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_cpu_load', + exec: '/bin/sensors.sh cpu', + timeout: '5s', + when: { + interval: '5s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_capacity', + exec: '/bin/sensors.sh diskcapacity', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + }, + { + name: 'sensor_disk_usage', + exec: '/bin/sensors.sh diskusage', + timeout: '5s', + when: { + interval: '60s' + }, + restarts: 'unlimited' + } + ], + telemetry: { + port: 9090, + tags: ['op'], + metrics: [ + { + namespace: 'ui_toolkit', + subsystem: 'memory', + name: 'percent', + help: 'Percentage of memory used', + type: 'gauge' + }, + { + namespace: 'ui_toolkit', + subsystem: 'cpu', + name: 'load', + help: 'CPU load', + type: 'gauge' + }, + { + namespace: 'ui_toolkit', + subsystem: 'disk', + name: 'capacity', + help: 'Disk capacity', + type: 'gauge' + }, + { + namespace: 'ui_toolkit', + subsystem: 'disk', + name: 'usage', + help: 'Disk usage', + type: 'gauge' + } + ] + } +} diff --git a/yarn.lock b/yarn.lock index 57a2855e..96d2aa53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3708,11 +3708,11 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" -extsprintf@1.2.0, extsprintf@^1.2.0: +extsprintf@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.2.0.tgz#5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529" -extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -4591,7 +4591,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -6021,10 +6021,10 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" merge-source-map@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.3.tgz#da1415f2722a5119db07b14c4f973410863a2abf" + version "1.0.4" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" dependencies: - source-map "^0.5.3" + source-map "^0.5.6" methods@~1.1.2: version "1.1.2" @@ -7330,8 +7330,8 @@ react-router@^4.1.1: warning "^3.0.0" react-styled-flexboxgrid@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/react-styled-flexboxgrid/-/react-styled-flexboxgrid-2.0.1.tgz#be5e188c6c1db8ae619806ecf18a2901541c0ee7" + version "2.0.2" + resolved "https://registry.yarnpkg.com/react-styled-flexboxgrid/-/react-styled-flexboxgrid-2.0.2.tgz#c1991bd6b249ee4b7cf0abbc35869a0d28e65620" dependencies: lodash.isinteger "^4.0.4" @@ -7435,14 +7435,14 @@ read@1.0.7: mute-stream "~0.0.4" "readable-stream@>= 1.0.2", readable-stream@^2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: - version "2.2.11" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.11.tgz#0796b31f8d7688007ff0b93a8088d34aa17c0f72" + version "2.3.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.0.tgz#640f5dcda88c91a8dc60787145629170813a1ed2" dependencies: core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" - safe-buffer "~5.0.1" + safe-buffer "~5.1.0" string_decoder "~1.0.0" util-deprecate "~1.0.1" @@ -8062,7 +8062,7 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" -safe-buffer@^5.0.1, safe-buffer@^5.1.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" @@ -9615,7 +9615,7 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -wordwrap@0.0.2: +wordwrap@0.0.2, wordwrap@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -9623,10 +9623,6 @@ wordwrap@1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"