From d70e4081db4457ed94fbd935b319c300984b1574 Mon Sep 17 00:00:00 2001 From: lsh Date: Sat, 23 Jul 2022 20:43:08 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20metric=20range=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 14 + metric/common/randomValue.js | 37 +- metric/constants/common.js | 47 ++ metric/constants/range.js | 82 ++++ metric/node/customNodeCpuTotal.js | 9 +- metric/node/customNodeCpuUsage.js | 15 +- metric/node/customNodeDiskLatency.js | 33 ++ metric/node/customNodeMemoryUsage.js | 33 ++ metric/node/customNodeMemoryUsageBytes.js | 33 ++ metric/node/customNodeTotalMemory.js | 9 +- metric/pod/customPodCpuUsage.js | 16 +- metric/pod/customPodDiskLatency.js | 30 ++ metric/pod/customPodMemoryUsage.js | 13 +- metric/pod/customPodMemoryUsageBytes.js | 16 +- metric/pod/customPodTotalMemory.js | 5 +- package-lock.json | 573 ++++++++++++++++++++++ package.json | 2 + 17 files changed, 936 insertions(+), 31 deletions(-) create mode 100644 metric/constants/common.js create mode 100644 metric/constants/range.js create mode 100644 metric/node/customNodeDiskLatency.js create mode 100644 metric/node/customNodeMemoryUsage.js create mode 100644 metric/node/customNodeMemoryUsageBytes.js create mode 100644 metric/pod/customPodDiskLatency.js diff --git a/index.js b/index.js index 8c2d130..5ad430a 100644 --- a/index.js +++ b/index.js @@ -13,6 +13,16 @@ const { customNodeCpuUsage } = require('./metric/node/customNodeCpuUsage'); const { customNodeTotalMemory, } = require('./metric/node/customNodeTotalMemory'); +const { customPodDiskLatency } = require('./metric/pod/customPodDiskLatency'); +const { + customNodeDiskLatency, +} = require('./metric/node/customNodeDiskLatency'); +const { + customNodeMemoryUsage, +} = require('./metric/node/customNodeMemoryUsage'); +const { + customNodeMemoryUsageBytes, +} = require('./metric/node/customNodeMemoryUsageBytes'); const app = express(); @@ -26,10 +36,14 @@ customPodCpuUsage(register); customPodMemoryUsage(register); customPodMemoryUsageBytes(register); customPodTotalMemory(register); +customPodDiskLatency(register); // node metrics customNodeCpuTotal(register); customNodeCpuUsage(register); +customNodeDiskLatency(register); +customNodeMemoryUsage(register); +customNodeMemoryUsageBytes(register); customNodeTotalMemory(register); app.get('/metrics', async (req, res) => { diff --git a/metric/common/randomValue.js b/metric/common/randomValue.js index 304355e..2881c62 100644 --- a/metric/common/randomValue.js +++ b/metric/common/randomValue.js @@ -1,12 +1,33 @@ -const getRandomValue = ({ range, isInteger }) => { - let min = range.min; - let max = range.max; +const { + NODE_TOTAL_BYTE, + POD_TOTAL_BYTE, + RANGE_TYPE, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); +const RANGE = require('../constants/range'); - if (isInteger) { - return Math.random() * (max - min) + min; +const getRandomValue = (instanceType, resourceName) => { + const isNormal = Math.random() > 0.03; + const rangeType = isNormal ? RANGE_TYPE.NORMAL : RANGE_TYPE.OVERLOAD; + const totalByte = + instanceType === INSTANCE_TYPE.NODE ? NODE_TOTAL_BYTE : POD_TOTAL_BYTE; + const { start, end } = RANGE[rangeType][instanceType][resourceName]; + let rand = 0; + + for (let i = 0; i < 6; i += 1) { + rand += Math.random(); } - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min)) + min; + let randomValue = start + (rand / 6) * (end - start); + + if (randomValue < 0) randomValue = 0; + if (randomValue > 1) randomValue = 1; + + if (resourceName === RESOURCE_NAME.MEMORY_USAGE_BYTES) { + return parseInt(totalByte * randomValue); + } + return randomValue; }; + +module.exports = getRandomValue; diff --git a/metric/constants/common.js b/metric/constants/common.js new file mode 100644 index 0000000..214159e --- /dev/null +++ b/metric/constants/common.js @@ -0,0 +1,47 @@ +const INTERVAL_TIME = 15000; + +const NODE_TOTAL_BYTE = 17179869184; +const POD_TOTAL_BYTE = 2147483648; + +const RANGE_TYPE = { + NORMAL: 'normal', + OVERLOAD: 'overload', +}; + +const INSTANCE_TYPE = { + NODE: 'node', + POD: 'pod', +}; + +const RESOURCE_NAME = { + CPU_USAGE: 'cpuUsage', + MEMORY_USAGE: 'memoryUsage', + MEMORY_USAGE_BYTES: 'memoryUsageBytes', + DISK_LATENCY: 'diskLatency', +}; + +const METRIC_NAME = { + // node + CUSTOM_NODE_CPU_TOTAL: 'custom_node_cpu_total', + CUSTOM_NODE_CPU_USAGE: 'custom_node_cpu_usage', + CUSTOM_NODE_DISK_LATENCT: 'custom_node_disk_latency', + CUSTOM_NODE_MEMORY_USAGE: 'custom_node_memory_usage', + CUSTOM_NODE_MEMORY_USAGE_BYTES: 'custom_node_memory_usage_bytes', + CUSTOM_NODE_TOTAL_MEMORY: 'custom_node_total_memory', + // pod + CUSTOM_POD_CPU_USAGE: 'custom_pod_cpu_usage', + CUSTOM_POD_DISK_LATENCY: 'custom_pod_disk_latency', + CUSTOM_POD_MEMORY_USAGE: 'custom_pod_memory_usage', + CUSTOM_POD_MEMORY_USAGE_BYTES: 'custom_pod_memory_usage_bytes', + CUSTOM_POD_TOTAL_MEMORY: 'custom_pod_total_memory', +}; + +module.exports = { + INTERVAL_TIME, + NODE_TOTAL_BYTE, + POD_TOTAL_BYTE, + RESOURCE_NAME, + INSTANCE_TYPE, + RANGE_TYPE, + METRIC_NAME, +}; diff --git a/metric/constants/range.js b/metric/constants/range.js new file mode 100644 index 0000000..29fe064 --- /dev/null +++ b/metric/constants/range.js @@ -0,0 +1,82 @@ +const { RANGE_TYPE, INSTANCE_TYPE, RESOURCE_NAME } = require('./common'); + +const RANGE = { + [RANGE_TYPE.NORMAL]: { + [INSTANCE_TYPE.NODE]: { + [RESOURCE_NAME.CPU_USAGE]: { + start: -0.25, + end: 0.75, + }, + [RESOURCE_NAME.MEMORY_USAGE]: { + start: 0, + end: 0.2, + }, + [RESOURCE_NAME.MEMORY_USAGE_BYTES]: { + start: 0, + end: 0.2, + }, + [RESOURCE_NAME.DISK_LATENCY]: { + start: -0.65, + end: 0.85, + }, + }, + [INSTANCE_TYPE.POD]: { + [RESOURCE_NAME.CPU_USAGE]: { + start: -0.1, + end: 0.9, + }, + [RESOURCE_NAME.MEMORY_USAGE]: { + start: 0, + end: 0.4, + }, + [RESOURCE_NAME.MEMORY_USAGE_BYTES]: { + start: 0, + end: 0.4, + }, + [RESOURCE_NAME.DISK_LATENCY]: { + start: 0.025, + end: 0.075, + }, + }, + }, + [RANGE_TYPE.OVERLOAD]: { + [INSTANCE_TYPE.NODE]: { + [RESOURCE_NAME.CPU_USAGE]: { + start: 0.5, + end: 0.95, + }, + [RESOURCE_NAME.MEMORY_USAGE]: { + start: 0.3, + end: 0.7, + }, + [RESOURCE_NAME.MEMORY_USAGE_BYTES]: { + start: 0.3, + end: 0.7, + }, + [RESOURCE_NAME.DISK_LATENCY]: { + start: -0.65, + end: 0.85, + }, + }, + [INSTANCE_TYPE.POD]: { + [RESOURCE_NAME.CPU_USAGE]: { + start: 0.5, + end: 1.1, + }, + [RESOURCE_NAME.MEMORY_USAGE]: { + start: 0.2, + end: 0.4, + }, + [RESOURCE_NAME.MEMORY_USAGE_BYTES]: { + start: 0.2, + end: 0.4, + }, + [RESOURCE_NAME.DISK_LATENCY]: { + start: 0.025, + end: 0.075, + }, + }, + }, +}; + +module.exports = RANGE; diff --git a/metric/node/customNodeCpuTotal.js b/metric/node/customNodeCpuTotal.js index ceebee6..70a2c40 100644 --- a/metric/node/customNodeCpuTotal.js +++ b/metric/node/customNodeCpuTotal.js @@ -1,21 +1,22 @@ const promClient = require('prom-client'); const getMetricConfig = require('../common/getMetricConfig'); +const { INTERVAL_TIME, METRIC_NAME } = require('../constants/common'); const { NODE_LABEL_NAMES } = require('../constants/labelName'); const { nodes } = require('../constants/nodes'); const customNodeCpuTotal = (register) => { const metricConfig = getMetricConfig( - 'custom_node_cpu_total', + METRIC_NAME.CUSTOM_NODE_CPU_TOTAL, NODE_LABEL_NAMES ); const g = new promClient.Gauge(metricConfig); setInterval(() => { - nodes.forEach((pod) => { - g.set(pod, Math.random()); + nodes.forEach((node) => { + g.set(node, Math.random()); }); - }, 100); + }, INTERVAL_TIME); register.registerMetric(g); }; diff --git a/metric/node/customNodeCpuUsage.js b/metric/node/customNodeCpuUsage.js index 4015505..a36d54b 100644 --- a/metric/node/customNodeCpuUsage.js +++ b/metric/node/customNodeCpuUsage.js @@ -1,21 +1,28 @@ const promClient = require('prom-client'); const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); const { NODE_LABEL_NAMES } = require('../constants/labelName'); const { nodes } = require('../constants/nodes'); const customNodeCpuUsage = (register) => { const metricConfig = getMetricConfig( - 'custom_node_cpu_usage', + METRIC_NAME.CUSTOM_NODE_CPU_USAGE, NODE_LABEL_NAMES ); const g = new promClient.Gauge(metricConfig); setInterval(() => { - nodes.forEach((pod) => { - g.set(pod, Math.random()); + nodes.forEach((node) => { + g.set(node, getRandomValue(INSTANCE_TYPE.NODE, RESOURCE_NAME.CPU_USAGE)); }); - }, 100); + }, INTERVAL_TIME); register.registerMetric(g); }; diff --git a/metric/node/customNodeDiskLatency.js b/metric/node/customNodeDiskLatency.js new file mode 100644 index 0000000..9294b0a --- /dev/null +++ b/metric/node/customNodeDiskLatency.js @@ -0,0 +1,33 @@ +const promClient = require('prom-client'); + +const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); +const { NODE_LABEL_NAMES } = require('../constants/labelName'); +const { nodes } = require('../constants/nodes'); + +const customNodeDiskLatency = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_NODE_DISK_LATENCT, + NODE_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + nodes.forEach((node) => { + g.set( + node, + getRandomValue(INSTANCE_TYPE.NODE, RESOURCE_NAME.DISK_LATENCY) + ); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customNodeDiskLatency }; diff --git a/metric/node/customNodeMemoryUsage.js b/metric/node/customNodeMemoryUsage.js new file mode 100644 index 0000000..56d82d1 --- /dev/null +++ b/metric/node/customNodeMemoryUsage.js @@ -0,0 +1,33 @@ +const promClient = require('prom-client'); + +const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); +const { NODE_LABEL_NAMES } = require('../constants/labelName'); +const { nodes } = require('../constants/nodes'); + +const customNodeMemoryUsage = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_NODE_MEMORY_USAGE, + NODE_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + nodes.forEach((node) => { + g.set( + node, + getRandomValue(INSTANCE_TYPE.NODE, RESOURCE_NAME.MEMORY_USAGE) + ); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customNodeMemoryUsage }; diff --git a/metric/node/customNodeMemoryUsageBytes.js b/metric/node/customNodeMemoryUsageBytes.js new file mode 100644 index 0000000..1e0fb0f --- /dev/null +++ b/metric/node/customNodeMemoryUsageBytes.js @@ -0,0 +1,33 @@ +const promClient = require('prom-client'); + +const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); +const { NODE_LABEL_NAMES } = require('../constants/labelName'); +const { nodes } = require('../constants/nodes'); + +const customNodeMemoryUsageBytes = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_NODE_MEMORY_USAGE_BYTES, + NODE_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + nodes.forEach((node) => { + g.set( + node, + getRandomValue(INSTANCE_TYPE.NODE, RESOURCE_NAME.MEMORY_USAGE_BYTES) + ); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customNodeMemoryUsageBytes }; diff --git a/metric/node/customNodeTotalMemory.js b/metric/node/customNodeTotalMemory.js index 25c5d02..3ab674e 100644 --- a/metric/node/customNodeTotalMemory.js +++ b/metric/node/customNodeTotalMemory.js @@ -1,21 +1,22 @@ const promClient = require('prom-client'); const getMetricConfig = require('../common/getMetricConfig'); +const { INTERVAL_TIME, METRIC_NAME } = require('../constants/common'); const { NODE_LABEL_NAMES } = require('../constants/labelName'); const { nodes } = require('../constants/nodes'); const customNodeTotalMemory = (register) => { const metricConfig = getMetricConfig( - 'custom_node_total_memory', + METRIC_NAME.CUSTOM_NODE_TOTAL_MEMORY, NODE_LABEL_NAMES ); const g = new promClient.Gauge(metricConfig); setInterval(() => { - nodes.forEach((pod) => { - g.set(pod, Math.random()); + nodes.forEach((node) => { + g.set(node, Math.random()); }); - }, 100); + }, INTERVAL_TIME); register.registerMetric(g); }; diff --git a/metric/pod/customPodCpuUsage.js b/metric/pod/customPodCpuUsage.js index b091fd2..ef9cc72 100644 --- a/metric/pod/customPodCpuUsage.js +++ b/metric/pod/customPodCpuUsage.js @@ -1,18 +1,28 @@ const promClient = require('prom-client'); const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); const { POD_LABEL_NAMES } = require('../constants/labelName'); const { pods } = require('../constants/pods'); const customPodCpuUsage = (register) => { - const metricConfig = getMetricConfig('custom_pod_cpu_usage', POD_LABEL_NAMES); + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_POD_CPU_USAGE, + POD_LABEL_NAMES + ); const g = new promClient.Gauge(metricConfig); setInterval(() => { pods.forEach((pod) => { - g.set(pod, Math.random()); + g.set(pod, getRandomValue(INSTANCE_TYPE.POD, RESOURCE_NAME.CPU_USAGE)); }); - }, 100); + }, INTERVAL_TIME); register.registerMetric(g); }; diff --git a/metric/pod/customPodDiskLatency.js b/metric/pod/customPodDiskLatency.js new file mode 100644 index 0000000..baa8b2b --- /dev/null +++ b/metric/pod/customPodDiskLatency.js @@ -0,0 +1,30 @@ +const promClient = require('prom-client'); + +const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); +const { POD_LABEL_NAMES } = require('../constants/labelName'); +const { pods } = require('../constants/pods'); + +const customPodDiskLatency = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_POD_DISK_LATENCY, + POD_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + pods.forEach((pod) => { + g.set(pod, getRandomValue(INSTANCE_TYPE.POD, RESOURCE_NAME.DISK_LATENCY)); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customPodDiskLatency }; diff --git a/metric/pod/customPodMemoryUsage.js b/metric/pod/customPodMemoryUsage.js index 730b896..f90d9db 100644 --- a/metric/pod/customPodMemoryUsage.js +++ b/metric/pod/customPodMemoryUsage.js @@ -1,21 +1,28 @@ const promClient = require('prom-client'); const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); const { POD_LABEL_NAMES } = require('../constants/labelName'); const { pods } = require('../constants/pods'); const customPodMemoryUsage = (register) => { const metricConfig = getMetricConfig( - 'custom_pod_memory_usage', + METRIC_NAME.CUSTOM_POD_MEMORY_USAGE, POD_LABEL_NAMES ); const g = new promClient.Gauge(metricConfig); setInterval(() => { pods.forEach((pod) => { - g.set(pod, Math.random()); + g.set(pod, getRandomValue(INSTANCE_TYPE.POD, RESOURCE_NAME.MEMORY_USAGE)); }); - }, 100); + }, INTERVAL_TIME); register.registerMetric(g); }; diff --git a/metric/pod/customPodMemoryUsageBytes.js b/metric/pod/customPodMemoryUsageBytes.js index a3b025f..d123e2a 100644 --- a/metric/pod/customPodMemoryUsageBytes.js +++ b/metric/pod/customPodMemoryUsageBytes.js @@ -1,21 +1,31 @@ const promClient = require('prom-client'); const getMetricConfig = require('../common/getMetricConfig'); +const getRandomValue = require('../common/randomValue'); +const { + INTERVAL_TIME, + METRIC_NAME, + INSTANCE_TYPE, + RESOURCE_NAME, +} = require('../constants/common'); const { POD_LABEL_NAMES } = require('../constants/labelName'); const { pods } = require('../constants/pods'); const customPodMemoryUsageBytes = (register) => { const metricConfig = getMetricConfig( - 'custom_pod_memory_usage_bytes', + METRIC_NAME.CUSTOM_POD_MEMORY_USAGE_BYTES, POD_LABEL_NAMES ); const g = new promClient.Gauge(metricConfig); setInterval(() => { pods.forEach((pod) => { - g.set(pod, parseInt(Math.random() * (Math.random() * 10000000))); + g.set( + pod, + getRandomValue(INSTANCE_TYPE.POD, RESOURCE_NAME.MEMORY_USAGE_BYTES) + ); }); - }, 100); + }, INTERVAL_TIME); register.registerMetric(g); }; diff --git a/metric/pod/customPodTotalMemory.js b/metric/pod/customPodTotalMemory.js index e64f5d0..253701d 100644 --- a/metric/pod/customPodTotalMemory.js +++ b/metric/pod/customPodTotalMemory.js @@ -1,12 +1,13 @@ const promClient = require('prom-client'); const getMetricConfig = require('../common/getMetricConfig'); +const { INTERVAL_TIME, METRIC_NAME } = require('../constants/common'); const { POD_LABEL_NAMES } = require('../constants/labelName'); const { pods } = require('../constants/pods'); const customPodTotalMemory = (register) => { const metricConfig = getMetricConfig( - 'custom_pod_total_memory', + METRIC_NAME.CUSTOM_POD_TOTAL_MEMORY, POD_LABEL_NAMES ); const g = new promClient.Gauge(metricConfig); @@ -15,7 +16,7 @@ const customPodTotalMemory = (register) => { pods.forEach((pod) => { g.set(pod, Math.random()); }); - }, 100); + }, INTERVAL_TIME); register.registerMetric(g); }; diff --git a/package-lock.json b/package-lock.json index 578f958..ce5c862 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,15 @@ "license": "ISC", "dependencies": { "express": "^4.18.1", + "nodemon": "^2.0.19", "prom-client": "^14.0.1" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -25,11 +31,36 @@ "node": ">= 0.6" } }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, "node_modules/bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", @@ -58,6 +89,26 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -78,6 +129,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -202,6 +284,17 @@ "node": ">= 0.10.0" } }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -235,6 +328,19 @@ "node": ">= 0.6" } }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -253,6 +359,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -264,6 +381,14 @@ "node": ">= 0.4.0" } }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -301,6 +426,11 @@ "node": ">=0.10.0" } }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -314,6 +444,44 @@ "node": ">= 0.10" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -365,6 +533,17 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -378,6 +557,69 @@ "node": ">= 0.6" } }, + "node_modules/nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -410,6 +652,17 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/prom-client": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.0.1.tgz", @@ -433,6 +686,11 @@ "node": ">= 0.10" } }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -469,6 +727,17 @@ "node": ">= 0.8" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -493,6 +762,14 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -553,6 +830,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -561,6 +857,17 @@ "node": ">= 0.8" } }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", @@ -569,6 +876,17 @@ "bintrees": "1.0.2" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -577,6 +895,17 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -589,6 +918,11 @@ "node": ">= 0.6" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -615,6 +949,11 @@ } }, "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -624,11 +963,30 @@ "negotiator": "0.6.3" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, "bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", @@ -653,6 +1011,23 @@ "unpipe": "1.0.0" } }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -667,6 +1042,26 @@ "get-intrinsic": "^1.0.2" } }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -766,6 +1161,14 @@ "vary": "~1.1.2" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, "finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -790,6 +1193,12 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -805,6 +1214,14 @@ "has-symbols": "^1.0.3" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -813,6 +1230,11 @@ "function-bind": "^1.1.1" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -838,6 +1260,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -848,6 +1275,32 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -881,6 +1334,14 @@ "mime-db": "1.52.0" } }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -891,6 +1352,51 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -914,6 +1420,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, "prom-client": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.0.1.tgz", @@ -931,6 +1442,11 @@ "ipaddr.js": "1.9.1" } }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -955,6 +1471,14 @@ "unpipe": "1.0.0" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -965,6 +1489,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -1018,11 +1547,34 @@ "object-inspect": "^1.9.0" } }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, "tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", @@ -1031,11 +1583,27 @@ "bintrees": "1.0.2" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1045,6 +1613,11 @@ "mime-types": "~2.1.24" } }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index 86770f4..0410563 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "", "main": "index.js", "scripts": { + "dev": "nodemon index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], @@ -11,6 +12,7 @@ "license": "ISC", "dependencies": { "express": "^4.18.1", + "nodemon": "^2.0.19", "prom-client": "^14.0.1" } } From cc585e7f1dc33ff9586aab01df8d137180ea1fbe Mon Sep 17 00:00:00 2001 From: lsh Date: Sun, 24 Jul 2022 18:25:38 +0900 Subject: [PATCH 2/9] =?UTF-8?q?Feat:=20pod=20=EC=86=8D=EC=84=B1=EA=B0=92?= =?UTF-8?q?=20deployment=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- metric/constants/pods.js | 61 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/metric/constants/pods.js b/metric/constants/pods.js index 876ead9..71a010b 100644 --- a/metric/constants/pods.js +++ b/metric/constants/pods.js @@ -1,296 +1,351 @@ const pods = [ - // seoul { namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-7o5ns', instance: 'seouln01', + deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-r18ao', instance: 'seouln03', + deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-38d2a', instance: 'seouln05', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-2dzos', instance: 'seouln02', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-29dcs', instance: 'seouln04', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-9jdsi', instance: 'seouln01', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-9sjwa', instance: 'seouln02', + deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-2sadw', instance: 'seouln03', + deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-9dxw2', instance: 'seouln05', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-23jfd', instance: 'seouln05', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-e29aw', instance: 'seouln03', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-5djwu', instance: 'seouln01', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-d392a', instance: 'seouln05', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-93fhs', instance: 'seouln01', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-8dhwu', instance: 'seouln04', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-i28e3', instance: 'seouln05', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-d48da', instance: 'seouln03', + deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-8saiw', instance: 'seouln01', + deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-9dwja', instance: 'seouln02', + deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-0ad92', instance: 'seouln01', + deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-8sjaw', instance: 'seouln04', + deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-38udh', instance: 'seouln03', + deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-d82hw', instance: 'seouln04', + deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-9dwqa', instance: 'seouln04', + deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-vcus1', instance: 'seouln03', + deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-dehy2', instance: 'seouln02', + deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-d9a8w', instance: 'seouln02', + deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-vn28a', instance: 'seouln04', + deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'grafana-deployment-5738192321-9sj2a', instance: 'seouln01', + deployment: 'grafana-deployment-5738192321', }, - - // busan { namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-7o5ns', instance: 'busann01', + deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-r18ao', instance: 'busann05', + deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-38d2a', instance: 'busann01', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-2dzos', instance: 'busann03', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-29dcs', instance: 'busann02', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-9jdsi', instance: 'busann05', + deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-9sjwa', instance: 'busann03', + deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-2sadw', instance: 'busann02', + deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-9dxw2', instance: 'busann05', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-23jfd', instance: 'busann01', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-e29aw', instance: 'busann04', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-5djwu', instance: 'busann05', + deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-d392a', instance: 'busann04', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-93fhs', instance: 'busann01', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-8dhwu', instance: 'busann04', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-i28e3', instance: 'busann01', + deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-d48da', instance: 'busann02', + deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-8saiw', instance: 'busann02', + deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-9dwja', instance: 'busann03', + deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-0ad92', instance: 'busann03', + deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-8sjaw', instance: 'busann05', + deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-38udh', instance: 'busann02', + deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-d82hw', instance: 'busann05', + deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-9dwqa', instance: 'busann04', + deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-vcus1', instance: 'busann04', + deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-dehy2', instance: 'busann05', + deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-d9a8w', instance: 'busann01', + deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-vn28a', instance: 'busann03', + deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'grafana-deployment-5738192321-9sj2a', instance: 'busann02', + deployment: 'grafana-deployment-5738192321', }, ]; From 641021c94e4978b535046fa0cc2eefc7e350b2ec Mon Sep 17 00:00:00 2001 From: lsh Date: Sun, 24 Jul 2022 18:27:31 +0900 Subject: [PATCH 3/9] =?UTF-8?q?Feat:=20pod=20label=20name=20deployment=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- metric/constants/labelName.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metric/constants/labelName.js b/metric/constants/labelName.js index 7e1154a..9d63098 100644 --- a/metric/constants/labelName.js +++ b/metric/constants/labelName.js @@ -1,4 +1,4 @@ -const POD_LABEL_NAMES = ['pod', 'namespace', 'instance']; +const POD_LABEL_NAMES = ['pod', 'namespace', 'instance', 'deployment']; const NODE_LABEL_NAMES = ['container', 'cluster', 'instance']; module.exports = { From 33db73d4ad40c9f8f0359af77bce220414bbf54f Mon Sep 17 00:00:00 2001 From: lsh Date: Sat, 6 Aug 2022 19:17:54 +0900 Subject: [PATCH 4/9] =?UTF-8?q?Feat:=20https://github.com/team-grass-farm/?= =?UTF-8?q?uncloudy-prometheus-exporter/issues/30=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 8 +++ metric/constants/common.js | 94 +++++++++++++++++++++++++++++ metric/constants/labelName.js | 4 +- metric/constants/nodes.js | 24 ++++++++ metric/constants/pods.js | 58 ++++++++++++++++++ metric/node/customNodeCpuSpec.js | 28 +++++++++ metric/node/customNodeMemorySpec.js | 27 +++++++++ metric/pod/customPodCpuSpec.js | 28 +++++++++ metric/pod/customPodMemorySpec.js | 27 +++++++++ 9 files changed, 296 insertions(+), 2 deletions(-) create mode 100644 metric/node/customNodeCpuSpec.js create mode 100644 metric/node/customNodeMemorySpec.js create mode 100644 metric/pod/customPodCpuSpec.js create mode 100644 metric/pod/customPodMemorySpec.js diff --git a/index.js b/index.js index 5ad430a..d815f33 100644 --- a/index.js +++ b/index.js @@ -23,6 +23,10 @@ const { const { customNodeMemoryUsageBytes, } = require('./metric/node/customNodeMemoryUsageBytes'); +const { customPodCpuSpec } = require('./metric/pod/customPodCpuSpec'); +const { customNodeCpuSpec } = require('./metric/node/customNodeCpuSpec'); +const { customPodMemorySpec } = require('./metric/pod/customPodMemorySpec'); +const { customNodeMemorySpec } = require('./metric/node/customNodeMemorySpec'); const app = express(); @@ -37,6 +41,8 @@ customPodMemoryUsage(register); customPodMemoryUsageBytes(register); customPodTotalMemory(register); customPodDiskLatency(register); +customPodCpuSpec(register); +customPodMemorySpec(register); // node metrics customNodeCpuTotal(register); @@ -45,6 +51,8 @@ customNodeDiskLatency(register); customNodeMemoryUsage(register); customNodeMemoryUsageBytes(register); customNodeTotalMemory(register); +customNodeCpuSpec(register); +customNodeMemorySpec(register); app.get('/metrics', async (req, res) => { res.setHeader('Content-Type', register.contentType); diff --git a/metric/constants/common.js b/metric/constants/common.js index 214159e..9e966c1 100644 --- a/metric/constants/common.js +++ b/metric/constants/common.js @@ -28,12 +28,104 @@ const METRIC_NAME = { CUSTOM_NODE_MEMORY_USAGE: 'custom_node_memory_usage', CUSTOM_NODE_MEMORY_USAGE_BYTES: 'custom_node_memory_usage_bytes', CUSTOM_NODE_TOTAL_MEMORY: 'custom_node_total_memory', + CUSTOM_NODE_CPU_SPEC: 'custom_node_cpu_spec', + CUSTOM_NODE_MEMORY_SPEC: 'custom_node_memory_spec', // pod CUSTOM_POD_CPU_USAGE: 'custom_pod_cpu_usage', CUSTOM_POD_DISK_LATENCY: 'custom_pod_disk_latency', CUSTOM_POD_MEMORY_USAGE: 'custom_pod_memory_usage', CUSTOM_POD_MEMORY_USAGE_BYTES: 'custom_pod_memory_usage_bytes', CUSTOM_POD_TOTAL_MEMORY: 'custom_pod_total_memory', + CUSTOM_POD_CPU_SPEC: 'custom_pod_cpu_spec', + CUSTOM_POD_MEMORY_SPEC: 'custom_pod_memory_spec', +}; + +NODE_CPU_SPEC = { + seoulb01: 0.27200367274864656, + seoulm01: 1.2391869241961915, + seoulh01: 0.3110475499304459, + seouln01: 0.7982030505316182, + seoulm02: 1.0054712605507794, + seoulh02: 0.7330881611452804, + seouln02: 0.8919479989487205, + seoulm03: 0.3832627524988117, + seoulh03: 0.7415142038819986, + seouln03: 0.7392414970975074, + seouln04: 0.496165066916757, + seouln05: 0.2625388209996633, + busanb01: 0.31695570660860084, + busanm01: 1.0139438889462329, + busanh01: 0.9036378217305587, + busann01: 0.7346252318626028, + busanm02: 0.560526797654193, + busanh02: 0.799851029961884, + busann02: 0.344184858552979, + busanm03: 1.1273953263949343, + busanh03: 0.3611079328428055, + busann03: 0.2725390163978476, + busann04: 0.7529561042124144, + busann05: 1.1258006567088377, +}; + +POD_CPU_SPEC = { + 'seouln01-swagger-deployment-1771418926-7o5ns': 1.0794165482681501, + 'seouln03-swagger-deployment-1771418926-r18ao': 0.618699888195432, + 'seouln05-nodejs-deployment-2231392811-38d2a': 0.6894158098338163, + 'seouln02-nodejs-deployment-2231392811-2dzos': 1.1021442358480202, + 'seouln04-nodejs-deployment-2231392811-29dcs': 0.841997890658458, + 'seouln01-nodejs-deployment-2231392811-9jdsi': 0.8761918460460174, + 'seouln02-mariadb-deployment-2913201382-9sjwa': 0.6286478448532531, + 'seouln03-mariadb-deployment-2913201382-2sadw': 1.0339310206743388, + 'seouln05-zandi-grapher-deployment-9442134208-9dxw2': 1.0345505925811154, + 'seouln05-zandi-grapher-deployment-9442134208-23jfd': 0.48809650378119773, + 'seouln03-zandi-grapher-deployment-9442134208-e29aw': 1.0979750367099894, + 'seouln01-zandi-grapher-deployment-9442134208-5djwu': 0.43347916524919183, + 'seouln05-nodejs-deployment-3942392102-d392a': 1.0144859796159291, + 'seouln01-nodejs-deployment-3942392102-93fhs': 0.697137310742209, + 'seouln04-nodejs-deployment-3942392102-8dhwu': 0.6965973095914688, + 'seouln05-nodejs-deployment-3942392102-i28e3': 1.1129865482490333, + 'seouln03-mysql-deployment-7532913428-d48da': 1.0730308871915046, + 'seouln01-mysql-deployment-7532913428-8saiw': 0.5658909522475488, + 'seouln02-mysql-deployment-7532913428-9dwja': 1.1202370359888494, + 'seouln01-uncloudy-grapher-blue-deployment-3291203292-0ad92': 1.0001659756877048, + 'seouln04-uncloudy-grapher-blue-deployment-3291203292-8sjaw': 1.1774858178732797, + 'seouln03-uncloudy-grapher-green-deployment-7253917392-38udh': 0.510521821599107, + 'seouln04-uncloudy-grapher-green-deployment-7253917392-d82hw': 0.3262120170344198, + 'seouln04-monitoring-agent-deployment-8573293182-9dwqa': 1.111696070837028, + 'seouln03-monitoring-agent-deployment-8573293182-vcus1': 0.2871128053427747, + 'seouln02-monitoring-agent-deployment-8573293182-dehy2': 0.7484964926356474, + 'seouln02-prometheus-deployment-8347123928-d9a8w': 0.5288497440047284, + 'seouln04-prometheus-deployment-8347123928-vn28a': 1.2239823051081575, + 'seouln01-grafana-deployment-5738192321-9sj2a': 0.8901003738457474, + 'busann01-swagger-deployment-1771418926-7o5ns': 0.7267718466590378, + 'busann05-swagger-deployment-1771418926-r18ao': 0.8812279069250939, + 'busann01-nodejs-deployment-2231392811-38d2a': 0.28645918646464663, + 'busann03-nodejs-deployment-2231392811-2dzos': 0.7138947090367973, + 'busann02-nodejs-deployment-2231392811-29dcs': 0.9484801056587906, + 'busann05-nodejs-deployment-2231392811-9jdsi': 0.7175037505229185, + 'busann03-mariadb-deployment-2913201382-9sjwa': 0.6170209164642086, + 'busann02-mariadb-deployment-2913201382-2sadw': 0.6149436790576708, + 'busann05-zandi-grapher-deployment-9442134208-9dxw2': 0.25112211742166934, + 'busann01-zandi-grapher-deployment-9442134208-23jfd': 0.6819260361223918, + 'busann04-zandi-grapher-deployment-9442134208-e29aw': 0.6976101530264966, + 'busann05-zandi-grapher-deployment-9442134208-5djwu': 1.0579731254028806, + 'busann04-nodejs-deployment-3942392102-d392a': 1.1871595772248125, + 'busann01-nodejs-deployment-3942392102-93fhs': 0.5631366302682981, + 'busann04-nodejs-deployment-3942392102-8dhwu': 1.2032002563441404, + 'busann01-nodejs-deployment-3942392102-i28e3': 0.8422734978125292, + 'busann02-mysql-deployment-7532913428-d48da': 0.9734384839696351, + 'busann02-mysql-deployment-7532913428-8saiw': 0.5121528421006647, + 'busann03-mysql-deployment-7532913428-9dwja': 0.904192133498205, + 'busann03-uncloudy-grapher-blue-deployment-3291203292-0ad92': 1.2014949433215514, + 'busann05-uncloudy-grapher-blue-deployment-3291203292-8sjaw': 0.5546392319100939, + 'busann02-uncloudy-grapher-green-deployment-7253917392-38udh': 0.5685318633384844, + 'busann05-uncloudy-grapher-green-deployment-7253917392-d82hw': 0.6765875151673066, + 'busann04-monitoring-agent-deployment-8573293182-9dwqa': 0.4584337518980377, + 'busann04-monitoring-agent-deployment-8573293182-vcus1': 1.046454617541513, + 'busann05-monitoring-agent-deployment-8573293182-dehy2': 0.8510848765132875, + 'busann01-prometheus-deployment-8347123928-d9a8w': 0.3176266268329917, + 'busann03-prometheus-deployment-8347123928-vn28a': 0.4872352723405089, + 'busann02-grafana-deployment-5738192321-9sj2a': 0.6918236449996984, }; module.exports = { @@ -44,4 +136,6 @@ module.exports = { INSTANCE_TYPE, RANGE_TYPE, METRIC_NAME, + NODE_CPU_SPEC, + POD_CPU_SPEC, }; diff --git a/metric/constants/labelName.js b/metric/constants/labelName.js index 9d63098..1fb4290 100644 --- a/metric/constants/labelName.js +++ b/metric/constants/labelName.js @@ -1,5 +1,5 @@ -const POD_LABEL_NAMES = ['pod', 'namespace', 'instance', 'deployment']; -const NODE_LABEL_NAMES = ['container', 'cluster', 'instance']; +const POD_LABEL_NAMES = ['pod', 'namespace', 'instance', 'deployment', 'os']; +const NODE_LABEL_NAMES = ['container', 'cluster', 'instance', 'os']; module.exports = { POD_LABEL_NAMES, diff --git a/metric/constants/nodes.js b/metric/constants/nodes.js index 5212db4..68d7eeb 100644 --- a/metric/constants/nodes.js +++ b/metric/constants/nodes.js @@ -3,121 +3,145 @@ const nodes = [ container: 'nodejs', cluster: 'seoul', instance: 'seoulb01', + os: 'rhel7', }, { container: 'nodejs', cluster: 'seoul', instance: 'seoulm01', + os: 'rhel8', }, { container: 'nodejs', cluster: 'seoul', instance: 'seoulh01', + os: 'ubuntu', }, { container: 'nodejs', cluster: 'seoul', instance: 'seouln01', + os: 'rhcos7', }, { container: 'nodejs', cluster: 'seoul', instance: 'seoulm02', + os: 'centos7', }, { container: 'nodejs', cluster: 'seoul', instance: 'seoulh02', + os: 'centos8', }, { container: 'nodejs', cluster: 'seoul', instance: 'seouln02', + os: 'rhcos8', }, { container: 'nodejs', cluster: 'seoul', instance: 'seoulm03', + os: 'ubuntu', }, { container: 'nodejs', cluster: 'seoul', instance: 'seoulh03', + os: 'centos7', }, { container: 'nodejs', cluster: 'seoul', instance: 'seouln03', + os: 'centos8', }, { container: 'nodejs', cluster: 'seoul', instance: 'seouln04', + os: 'rhcos7', }, { container: 'nodejs', cluster: 'seoul', instance: 'seouln05', + os: 'rhcos8', }, { container: 'nodejs', cluster: 'busanoul', instance: 'busanb01', + os: 'rhel8', }, { container: 'nodejs', cluster: 'busan', instance: 'busanm01', + os: 'rhel7', }, { container: 'nodejs', cluster: 'busan', instance: 'busanh01', + os: 'rhel7', }, { container: 'nodejs', cluster: 'busan', instance: 'busann01', + os: 'rhel8', }, { container: 'nodejs', cluster: 'busan', instance: 'busanm02', + os: 'rhcos7', }, { container: 'nodejs', cluster: 'busan', instance: 'busanh02', + os: 'rhcos8', }, { container: 'nodejs', cluster: 'busan', instance: 'busann02', + os: 'centos7', }, { container: 'nodejs', cluster: 'busan', instance: 'busanm03', + os: 'centos8', }, { container: 'nodejs', cluster: 'busan', instance: 'busanh03', + os: 'ubuntu', }, { container: 'nodejs', cluster: 'busan', instance: 'busann03', + os: 'rhel8', }, { container: 'nodejs', cluster: 'busan', instance: 'busann04', + os: 'centos8', }, { container: 'nodejs', cluster: 'busan', instance: 'busann05', + os: 'ubuntu', }, ]; diff --git a/metric/constants/pods.js b/metric/constants/pods.js index 71a010b..5a614af 100644 --- a/metric/constants/pods.js +++ b/metric/constants/pods.js @@ -3,348 +3,406 @@ const pods = [ namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-7o5ns', instance: 'seouln01', + os: 'rhe17', deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-r18ao', instance: 'seouln03', + os: 'centos8', deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-38d2a', instance: 'seouln05', + os: 'rhcos8', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-2dzos', instance: 'seouln02', + os: 'rhcos8', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-29dcs', instance: 'seouln04', + os: 'rhcos7', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-9jdsi', instance: 'seouln01', + os: 'rhe17', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-9sjwa', instance: 'seouln02', + os: 'rhcos8', deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-2sadw', instance: 'seouln03', + os: 'centos8', deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-9dxw2', instance: 'seouln05', + os: 'rhcos8', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-23jfd', instance: 'seouln05', + os: 'rhcos8', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-e29aw', instance: 'seouln03', + os: 'centos8', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-5djwu', instance: 'seouln01', + os: 'rhe17', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-d392a', instance: 'seouln05', + os: 'rhcos8', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-93fhs', instance: 'seouln01', + os: 'rhe17', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-8dhwu', instance: 'seouln04', + os: 'rhcos7', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-i28e3', instance: 'seouln05', + os: 'rhcos8', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-d48da', instance: 'seouln03', + os: 'centos8', deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-8saiw', instance: 'seouln01', + os: 'rhe17', deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-9dwja', instance: 'seouln02', + os: 'rhcos8', deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-0ad92', instance: 'seouln01', + os: 'rhe17', deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-8sjaw', instance: 'seouln04', + os: 'rhcos7', deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-38udh', instance: 'seouln03', + os: 'centos8', deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-d82hw', instance: 'seouln04', + os: 'rhcos7', deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-9dwqa', instance: 'seouln04', + os: 'rhcos7', deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-vcus1', instance: 'seouln03', + os: 'centos8', deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-dehy2', instance: 'seouln02', + os: 'rhcos8', deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-d9a8w', instance: 'seouln02', + os: 'rhcos8', deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-vn28a', instance: 'seouln04', + os: 'rhcos7', deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'grafana-deployment-5738192321-9sj2a', instance: 'seouln01', + os: 'rhe17', deployment: 'grafana-deployment-5738192321', }, { namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-7o5ns', instance: 'busann01', + os: 'rhel8', deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'swagger-deployment-1771418926-r18ao', instance: 'busann05', + os: 'ubuntu', deployment: 'swagger-deployment-1771418926', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-38d2a', instance: 'busann01', + os: 'rhel8', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-2dzos', instance: 'busann03', + os: 'rhel8', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-29dcs', instance: 'busann02', + os: 'centos7', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'nodejs-deployment-2231392811-9jdsi', instance: 'busann05', + os: 'ubuntu', deployment: 'nodejs-deployment-2231392811', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-9sjwa', instance: 'busann03', + os: 'rhel8', deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-backend', pod: 'mariadb-deployment-2913201382-2sadw', instance: 'busann02', + os: 'centos7', deployment: 'mariadb-deployment-2913201382', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-9dxw2', instance: 'busann05', + os: 'ubuntu', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-23jfd', instance: 'busann01', + os: 'rhel8', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-e29aw', instance: 'busann04', + os: 'centos8', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'zandi-frontend', pod: 'zandi-grapher-deployment-9442134208-5djwu', instance: 'busann05', + os: 'ubuntu', deployment: 'zandi-grapher-deployment-9442134208', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-d392a', instance: 'busann04', + os: 'centos8', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-93fhs', instance: 'busann01', + os: 'rhel8', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-8dhwu', instance: 'busann04', + os: 'centos8', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'nodejs-deployment-3942392102-i28e3', instance: 'busann01', + os: 'rhel8', deployment: 'nodejs-deployment-3942392102', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-d48da', instance: 'busann02', + os: 'centos7', deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-8saiw', instance: 'busann02', + os: 'centos7', deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-backend', pod: 'mysql-deployment-7532913428-9dwja', instance: 'busann03', + os: 'rhel8', deployment: 'mysql-deployment-7532913428', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-0ad92', instance: 'busann03', + os: 'rhel8', deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-blue-deployment-3291203292-8sjaw', instance: 'busann05', + os: 'ubuntu', deployment: 'uncloudy-grapher-blue-deployment-3291203292', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-38udh', instance: 'busann02', + os: 'centos7', deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'uncloudy-frontend', pod: 'uncloudy-grapher-green-deployment-7253917392-d82hw', instance: 'busann05', + os: 'ubuntu', deployment: 'uncloudy-grapher-green-deployment-7253917392', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-9dwqa', instance: 'busann04', + os: 'centos8', deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-vcus1', instance: 'busann04', + os: 'centos8', deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'monitoring-agent-deployment-8573293182-dehy2', instance: 'busann05', + os: 'ubuntu', deployment: 'monitoring-agent-deployment-8573293182', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-d9a8w', instance: 'busann01', + os: 'rhel8', deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'prometheus-deployment-8347123928-vn28a', instance: 'busann03', + os: 'rhel8', deployment: 'prometheus-deployment-8347123928', }, { namespace: 'infra', pod: 'grafana-deployment-5738192321-9sj2a', instance: 'busann02', + os: 'centos7', deployment: 'grafana-deployment-5738192321', }, ]; diff --git a/metric/node/customNodeCpuSpec.js b/metric/node/customNodeCpuSpec.js new file mode 100644 index 0000000..9f39f59 --- /dev/null +++ b/metric/node/customNodeCpuSpec.js @@ -0,0 +1,28 @@ +const promClient = require('prom-client'); + +const getMetricConfig = require('../common/getMetricConfig'); +const { + METRIC_NAME, + NODE_CPU_SPEC, + INTERVAL_TIME, +} = require('../constants/common'); +const { NODE_LABEL_NAMES } = require('../constants/labelName'); +const { nodes } = require('../constants/nodes'); + +const customNodeCpuSpec = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_NODE_CPU_SPEC, + NODE_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + nodes.forEach((node) => { + g.set(node, NODE_CPU_SPEC[node.instance]); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customNodeCpuSpec }; diff --git a/metric/node/customNodeMemorySpec.js b/metric/node/customNodeMemorySpec.js new file mode 100644 index 0000000..61d7488 --- /dev/null +++ b/metric/node/customNodeMemorySpec.js @@ -0,0 +1,27 @@ +const promClient = require('prom-client'); +const getMetricConfig = require('../common/getMetricConfig'); +const { + METRIC_NAME, + NODE_TOTAL_BYTE, + INTERVAL_TIME, +} = require('../constants/common'); +const { NODE_LABEL_NAMES } = require('../constants/labelName'); +const { nodes } = require('../constants/nodes'); + +const customNodeMemorySpec = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_NODE_MEMORY_SPEC, + NODE_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + nodes.forEach((node) => { + g.set(node, NODE_TOTAL_BYTE); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customNodeMemorySpec }; diff --git a/metric/pod/customPodCpuSpec.js b/metric/pod/customPodCpuSpec.js new file mode 100644 index 0000000..ef30702 --- /dev/null +++ b/metric/pod/customPodCpuSpec.js @@ -0,0 +1,28 @@ +const promClient = require('prom-client'); + +const getMetricConfig = require('../common/getMetricConfig'); +const { + METRIC_NAME, + INTERVAL_TIME, + POD_CPU_SPEC, +} = require('../constants/common'); +const { POD_LABEL_NAMES } = require('../constants/labelName'); +const { pods } = require('../constants/pods'); + +const customPodCpuSpec = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_POD_CPU_SPEC, + POD_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + pods.forEach((pod) => { + g.set(pod, POD_CPU_SPEC[pod.instance + '-' + pod.pod]); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customPodCpuSpec }; diff --git a/metric/pod/customPodMemorySpec.js b/metric/pod/customPodMemorySpec.js new file mode 100644 index 0000000..9fd9112 --- /dev/null +++ b/metric/pod/customPodMemorySpec.js @@ -0,0 +1,27 @@ +const promClient = require('prom-client'); +const getMetricConfig = require('../common/getMetricConfig'); +const { + METRIC_NAME, + INTERVAL_TIME, + POD_TOTAL_BYTE, +} = require('../constants/common'); +const { POD_LABEL_NAMES } = require('../constants/labelName'); +const { pods } = require('../constants/pods'); + +const customPodMemorySpec = (register) => { + const metricConfig = getMetricConfig( + METRIC_NAME.CUSTOM_POD_MEMORY_SPEC, + POD_LABEL_NAMES + ); + const g = new promClient.Gauge(metricConfig); + + setInterval(() => { + pods.forEach((pod) => { + g.set(pod, POD_TOTAL_BYTE); + }); + }, INTERVAL_TIME); + + register.registerMetric(g); +}; + +module.exports = { customPodMemorySpec }; From 9c07f0b6da81613cb3836933812966cc51d01b52 Mon Sep 17 00:00:00 2001 From: lsh Date: Sat, 6 Aug 2022 19:18:14 +0900 Subject: [PATCH 5/9] =?UTF-8?q?Delete:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20metric=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 21 +++++++-------------- metric/node/customNodeCpuTotal.js | 24 ------------------------ metric/node/customNodeTotalMemory.js | 24 ------------------------ metric/pod/customPodTotalMemory.js | 24 ------------------------ 4 files changed, 7 insertions(+), 86 deletions(-) delete mode 100644 metric/node/customNodeCpuTotal.js delete mode 100644 metric/node/customNodeTotalMemory.js delete mode 100644 metric/pod/customPodTotalMemory.js diff --git a/index.js b/index.js index d815f33..35ef240 100644 --- a/index.js +++ b/index.js @@ -6,13 +6,9 @@ const { customPodMemoryUsage } = require('./metric/pod/customPodMemoryUsage'); const { customPodMemoryUsageBytes, } = require('./metric/pod/customPodMemoryUsageBytes'); -const { customPodTotalMemory } = require('./metric/pod/customPodTotalMemory'); -const { customNodeCpuTotal } = require('./metric/node/customNodeCpuTotal'); const { customNodeCpuUsage } = require('./metric/node/customNodeCpuUsage'); -const { - customNodeTotalMemory, -} = require('./metric/node/customNodeTotalMemory'); + const { customPodDiskLatency } = require('./metric/pod/customPodDiskLatency'); const { customNodeDiskLatency, @@ -37,22 +33,19 @@ const register = new client.Registry(); // pod metrics customPodCpuUsage(register); -customPodMemoryUsage(register); -customPodMemoryUsageBytes(register); -customPodTotalMemory(register); -customPodDiskLatency(register); customPodCpuSpec(register); customPodMemorySpec(register); +customPodMemoryUsageBytes(register); +customPodMemoryUsage(register); +customPodDiskLatency(register); // node metrics -customNodeCpuTotal(register); customNodeCpuUsage(register); -customNodeDiskLatency(register); -customNodeMemoryUsage(register); -customNodeMemoryUsageBytes(register); -customNodeTotalMemory(register); customNodeCpuSpec(register); customNodeMemorySpec(register); +customNodeMemoryUsageBytes(register); +customNodeMemoryUsage(register); +customNodeDiskLatency(register); app.get('/metrics', async (req, res) => { res.setHeader('Content-Type', register.contentType); diff --git a/metric/node/customNodeCpuTotal.js b/metric/node/customNodeCpuTotal.js deleted file mode 100644 index 70a2c40..0000000 --- a/metric/node/customNodeCpuTotal.js +++ /dev/null @@ -1,24 +0,0 @@ -const promClient = require('prom-client'); - -const getMetricConfig = require('../common/getMetricConfig'); -const { INTERVAL_TIME, METRIC_NAME } = require('../constants/common'); -const { NODE_LABEL_NAMES } = require('../constants/labelName'); -const { nodes } = require('../constants/nodes'); - -const customNodeCpuTotal = (register) => { - const metricConfig = getMetricConfig( - METRIC_NAME.CUSTOM_NODE_CPU_TOTAL, - NODE_LABEL_NAMES - ); - const g = new promClient.Gauge(metricConfig); - - setInterval(() => { - nodes.forEach((node) => { - g.set(node, Math.random()); - }); - }, INTERVAL_TIME); - - register.registerMetric(g); -}; - -module.exports = { customNodeCpuTotal }; diff --git a/metric/node/customNodeTotalMemory.js b/metric/node/customNodeTotalMemory.js deleted file mode 100644 index 3ab674e..0000000 --- a/metric/node/customNodeTotalMemory.js +++ /dev/null @@ -1,24 +0,0 @@ -const promClient = require('prom-client'); - -const getMetricConfig = require('../common/getMetricConfig'); -const { INTERVAL_TIME, METRIC_NAME } = require('../constants/common'); -const { NODE_LABEL_NAMES } = require('../constants/labelName'); -const { nodes } = require('../constants/nodes'); - -const customNodeTotalMemory = (register) => { - const metricConfig = getMetricConfig( - METRIC_NAME.CUSTOM_NODE_TOTAL_MEMORY, - NODE_LABEL_NAMES - ); - const g = new promClient.Gauge(metricConfig); - - setInterval(() => { - nodes.forEach((node) => { - g.set(node, Math.random()); - }); - }, INTERVAL_TIME); - - register.registerMetric(g); -}; - -module.exports = { customNodeTotalMemory }; diff --git a/metric/pod/customPodTotalMemory.js b/metric/pod/customPodTotalMemory.js deleted file mode 100644 index 253701d..0000000 --- a/metric/pod/customPodTotalMemory.js +++ /dev/null @@ -1,24 +0,0 @@ -const promClient = require('prom-client'); - -const getMetricConfig = require('../common/getMetricConfig'); -const { INTERVAL_TIME, METRIC_NAME } = require('../constants/common'); -const { POD_LABEL_NAMES } = require('../constants/labelName'); -const { pods } = require('../constants/pods'); - -const customPodTotalMemory = (register) => { - const metricConfig = getMetricConfig( - METRIC_NAME.CUSTOM_POD_TOTAL_MEMORY, - POD_LABEL_NAMES - ); - const g = new promClient.Gauge(metricConfig); - - setInterval(() => { - pods.forEach((pod) => { - g.set(pod, Math.random()); - }); - }, INTERVAL_TIME); - - register.registerMetric(g); -}; - -module.exports = { customPodTotalMemory }; From b630672af3cec5082aefa257d169246e5be505e1 Mon Sep 17 00:00:00 2001 From: lsh Date: Sat, 6 Aug 2022 19:23:37 +0900 Subject: [PATCH 6/9] =?UTF-8?q?Refactor:=20metric=20require=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 32 +++++++++++++------------------- metric/node/index.js | 15 +++++++++++++++ metric/pod/index.js | 15 +++++++++++++++ 3 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 metric/node/index.js create mode 100644 metric/pod/index.js diff --git a/index.js b/index.js index 35ef240..1e01301 100644 --- a/index.js +++ b/index.js @@ -1,28 +1,22 @@ const client = require('prom-client'); const express = require('express'); -const { customPodCpuUsage } = require('./metric/pod/customPodCpuUsage'); -const { customPodMemoryUsage } = require('./metric/pod/customPodMemoryUsage'); -const { - customPodMemoryUsageBytes, -} = require('./metric/pod/customPodMemoryUsageBytes'); - -const { customNodeCpuUsage } = require('./metric/node/customNodeCpuUsage'); - -const { customPodDiskLatency } = require('./metric/pod/customPodDiskLatency'); -const { - customNodeDiskLatency, -} = require('./metric/node/customNodeDiskLatency'); const { + customNodeCpuUsage, + customNodeCpuSpec, + customNodeMemorySpec, + customNodeMemoryUsageBytes, customNodeMemoryUsage, -} = require('./metric/node/customNodeMemoryUsage'); + customNodeDiskLatency, +} = require('./metric/node/index.js'); const { - customNodeMemoryUsageBytes, -} = require('./metric/node/customNodeMemoryUsageBytes'); -const { customPodCpuSpec } = require('./metric/pod/customPodCpuSpec'); -const { customNodeCpuSpec } = require('./metric/node/customNodeCpuSpec'); -const { customPodMemorySpec } = require('./metric/pod/customPodMemorySpec'); -const { customNodeMemorySpec } = require('./metric/node/customNodeMemorySpec'); + customPodCpuUsage, + customPodCpuSpec, + customPodMemorySpec, + customPodMemoryUsageBytes, + customPodMemoryUsage, + customPodDiskLatency, +} = require('./metric/pod/index.js'); const app = express(); diff --git a/metric/node/index.js b/metric/node/index.js new file mode 100644 index 0000000..b091d8c --- /dev/null +++ b/metric/node/index.js @@ -0,0 +1,15 @@ +const { customNodeCpuSpec } = require('./customNodeCpuSpec'); +const { customNodeCpuUsage } = require('./customNodeCpuUsage'); +const { customNodeDiskLatency } = require('./customNodeDiskLatency'); +const { customNodeMemorySpec } = require('./customNodeMemorySpec'); +const { customNodeMemoryUsage } = require('./customNodeMemoryUsage'); +const { customNodeMemoryUsageBytes } = require('./customNodeMemoryUsageBytes'); + +module.exports = { + customNodeCpuSpec, + customNodeCpuUsage, + customNodeDiskLatency, + customNodeMemorySpec, + customNodeMemoryUsage, + customNodeMemoryUsageBytes, +}; diff --git a/metric/pod/index.js b/metric/pod/index.js new file mode 100644 index 0000000..111f008 --- /dev/null +++ b/metric/pod/index.js @@ -0,0 +1,15 @@ +const { customPodCpuSpec } = require('./customPodCpuSpec'); +const { customPodCpuUsage } = require('./customPodCpuUsage'); +const { customPodDiskLatency } = require('./customPodDiskLatency'); +const { customPodMemorySpec } = require('./customPodMemorySpec'); +const { customPodMemoryUsage } = require('./customPodMemoryUsage'); +const { customPodMemoryUsageBytes } = require('./customPodMemoryUsageBytes'); + +module.exports = { + customPodCpuSpec, + customPodCpuUsage, + customPodDiskLatency, + customPodMemorySpec, + customPodMemoryUsage, + customPodMemoryUsageBytes, +}; From 1d32962dcd7d3a96787ce4509e5b248757ba13e7 Mon Sep 17 00:00:00 2001 From: jnubugo Date: Sun, 24 Jul 2022 14:27:20 +0900 Subject: [PATCH 7/9] Create 7DayTSD-Certification-report.md --- .../7DayTSD-Certification-report.md | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 TimeSericesData/7DayTSD-Certification-report.md diff --git a/TimeSericesData/7DayTSD-Certification-report.md b/TimeSericesData/7DayTSD-Certification-report.md new file mode 100644 index 0000000..fccf80d --- /dev/null +++ b/TimeSericesData/7DayTSD-Certification-report.md @@ -0,0 +1,38 @@ +--- +marp: false +date: 2022. 07. 24 +author: 박종범 +version: 1 +--- + +# 7DayTSD-Certification-report. + + +## 개요 +Uncloud graph의 Prometheus-Exporter의 시계열 데이터에 대한 시간연속성 테스트 + +### 절차 +- 24Hour별 데이터 일관성 확인 +- 7Day별 데이터 일관성 확인 + +### 수집 시작 시간 +- 2022:07:17 08:34:28 +스크린샷 2022-07-24 오후 2 14 10 + +### 24Hour별 데이터 일관성 검증 +- 특정 시간 기준으로 1시간 단위 데이터의 연속성 비교 + +스크린샷 2022-07-24 오후 2 16 39 + +2022-07-18 12:00:00 데이터 + +스크린샷 2022-07-24 오후 2 16 51 + +2022-07-18 13:00:00 데이터 + +스크린샷 2022-07-24 오후 2 16 59 + +2022-07-18 14:00:00 데이터 + +### 결론 +1시간 단위 일관성 있는 데이터 제공 -> 백엔드 서버의 메트릭 생성으로 신규값 제공 From e8b93efb22b88401c6a5cd44dd46bdc37439f074 Mon Sep 17 00:00:00 2001 From: jnubugo Date: Sun, 24 Jul 2022 14:33:14 +0900 Subject: [PATCH 8/9] Update 7DayTSD-Certification-report.md --- TimeSericesData/7DayTSD-Certification-report.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/TimeSericesData/7DayTSD-Certification-report.md b/TimeSericesData/7DayTSD-Certification-report.md index fccf80d..11abe21 100644 --- a/TimeSericesData/7DayTSD-Certification-report.md +++ b/TimeSericesData/7DayTSD-Certification-report.md @@ -36,3 +36,9 @@ Uncloud graph의 Prometheus-Exporter의 시계열 데이터에 대한 시간연 ### 결론 1시간 단위 일관성 있는 데이터 제공 -> 백엔드 서버의 메트릭 생성으로 신규값 제공 + +### 신규 이슈 - TSDB 용량 문제 + +현재 인스턴스에 할당된 스토리지: 20GB +사용량: 2022-07-23 14:30:00 (17.97%) ~ 2022-07-24 14:30:00 (17.99%) +=> 1년이상 사용가능, 추후 NAS를 활용한 증설가능 From d02e19be87265d8d9330971a9e4883e4371b9d27 Mon Sep 17 00:00:00 2001 From: jnubugo Date: Sun, 24 Jul 2022 14:35:22 +0900 Subject: [PATCH 9/9] Update 7DayTSD-Certification-report.md --- TimeSericesData/7DayTSD-Certification-report.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/TimeSericesData/7DayTSD-Certification-report.md b/TimeSericesData/7DayTSD-Certification-report.md index 11abe21..7b20cc0 100644 --- a/TimeSericesData/7DayTSD-Certification-report.md +++ b/TimeSericesData/7DayTSD-Certification-report.md @@ -5,7 +5,7 @@ author: 박종범 version: 1 --- -# 7DayTSD-Certification-report. +# 7DayTSD-Certification-report ## 개요 @@ -13,7 +13,7 @@ Uncloud graph의 Prometheus-Exporter의 시계열 데이터에 대한 시간연 ### 절차 - 24Hour별 데이터 일관성 확인 -- 7Day별 데이터 일관성 확인 +- 신규 이슈에 대한 체크 ### 수집 시작 시간 - 2022:07:17 08:34:28 @@ -38,7 +38,11 @@ Uncloud graph의 Prometheus-Exporter의 시계열 데이터에 대한 시간연 1시간 단위 일관성 있는 데이터 제공 -> 백엔드 서버의 메트릭 생성으로 신규값 제공 ### 신규 이슈 - TSDB 용량 문제 +스크린샷 2022-07-24 오후 2 29 39 현재 인스턴스에 할당된 스토리지: 20GB +스크린샷 2022-07-24 오후 2 23 46 + 사용량: 2022-07-23 14:30:00 (17.97%) ~ 2022-07-24 14:30:00 (17.99%) + => 1년이상 사용가능, 추후 NAS를 활용한 증설가능