From 20ad29c64939d66e0a3c3054cbf1a983e73e7193 Mon Sep 17 00:00:00 2001 From: DenisN Date: Tue, 10 Jun 2025 05:04:16 -0400 Subject: [PATCH] Rangers Method --- src/zvksmetrics/conf/ranges.json | 12 +- src/zvksmetrics/conf/ranges123.json | 0 src/zvksmetrics/conf/ranges_temp.json | 385 ++++++++++++++++++++++ src/zvksmetrics/zvksmetrics.controller.ts | 12 +- src/zvksmetrics/zvksmetrics.service.ts | 70 ++-- 5 files changed, 451 insertions(+), 28 deletions(-) create mode 100644 src/zvksmetrics/conf/ranges123.json create mode 100644 src/zvksmetrics/conf/ranges_temp.json diff --git a/src/zvksmetrics/conf/ranges.json b/src/zvksmetrics/conf/ranges.json index 680de19..7c1fd5c 100644 --- a/src/zvksmetrics/conf/ranges.json +++ b/src/zvksmetrics/conf/ranges.json @@ -3,16 +3,16 @@ "name": "cpu_utilization", "ranges": [ {"min": 0, "max": 60, "status": 1}, - {"min": 61, "max": 80, "status": 2}, - {"min": 81, "max": 90, "status": 3}, - {"min": 91, "max": 100, "status": 4} + {"min": 60, "max": 80, "status": 2}, + {"min": 80, "max": 90, "status": 3}, + {"min": 90, "max": 100, "status": 4} ] }, { "name": "cpu_load_average_1", "ranges": [ {"min": 0, "max": 60, "status": 1}, - {"min": 61, "max": 80, "status": 2}, + {"min": 60, "max": 80, "status": 2}, {"min": 81, "max": 90, "status": 3}, {"min": 91, "max": 100, "status": 4} ] @@ -38,8 +38,8 @@ { "name": "ram_usage", "ranges": [ - {"min": 0, "max": 60, "status": 1}, - {"min": 61, "max": 80, "status": 2}, + {"min": 0, "max": 30, "status": 1}, + {"min": 30, "max": 80, "status": 2}, {"min": 81, "max": 90, "status": 3}, {"min": 91, "max": 100, "status": 4} ] diff --git a/src/zvksmetrics/conf/ranges123.json b/src/zvksmetrics/conf/ranges123.json new file mode 100644 index 0000000..e69de29 diff --git a/src/zvksmetrics/conf/ranges_temp.json b/src/zvksmetrics/conf/ranges_temp.json new file mode 100644 index 0000000..7c1fd5c --- /dev/null +++ b/src/zvksmetrics/conf/ranges_temp.json @@ -0,0 +1,385 @@ +[ + { + "name": "cpu_utilization", + "ranges": [ + {"min": 0, "max": 60, "status": 1}, + {"min": 60, "max": 80, "status": 2}, + {"min": 80, "max": 90, "status": 3}, + {"min": 90, "max": 100, "status": 4} + ] + }, + { + "name": "cpu_load_average_1", + "ranges": [ + {"min": 0, "max": 60, "status": 1}, + {"min": 60, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "cpu_load_average_5", + "ranges": [ + {"min": 0, "max": 60, "status": 1}, + {"min": 61, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "cpu_load_average_15", + "ranges": [ + {"min": 0, "max": 60, "status": 1}, + {"min": 61, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "ram_usage", + "ranges": [ + {"min": 0, "max": 30, "status": 1}, + {"min": 30, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "disk_usage", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "disk_read_rate", + "ranges": [ + {"min": 0, "max": 100, "status": 1}, + {"min": 101, "max": 300, "status": 2}, + {"min": 301, "max": 500, "status": 3}, + {"min": 501, "max": 5000, "status": 4} + ] + }, + { + "name": "disk_write_rate", + "ranges": [ + {"min": 0, "max": 100, "status": 1}, + {"min": 101, "max": 300, "status": 2}, + {"min": 301, "max": 500, "status": 3}, + {"min": 501, "max": 5000, "status": 4} + ] + }, + { + "name": "network_interface_rx_Eth_1", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interface_tx_Eth_1", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interface_rx_Eth_2", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interface_tx_Eth_2", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interface_rx_Eth_3", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interface_tx_Eth_3", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interface_rx_Eth_4", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interface_tx_Eth_4", + "ranges": [ + {"min": 0, "max": 70, "status": 1}, + {"min": 71, "max": 80, "status": 2}, + {"min": 81, "max": 90, "status": 3}, + {"min": 91, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_errors_Eth_1", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_errors_Eth_1", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_errors_Eth_2", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_errors_Eth_2", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_errors_Eth_3", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_errors_Eth_3", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_errors_Eth_4", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_errors_Eth_4", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_discarded_Eth_1", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_discarded_Eth_1", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_discarded_Eth_2", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_discarded_Eth_2", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_discarded_Eth_3", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_discarded_Eth_3", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_read_packets_discarded_Eth_4", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "network_interfaces_write_packets_discarded_Eth_4", + "ranges": [ + {"min": 0, "max": 1, "status": 1}, + {"min": 2, "max": 10, "status": 2}, + {"min": 11, "max": 20, "status": 3}, + {"min": 21, "max": 100, "status": 4} + ] + }, + { + "name": "response_icmp", + "ranges": [ + {"min": 0, "max": 100, "status": 1}, + {"min": 101, "max": 200, "status": 2}, + {"min": 201, "max": 300, "status": 3}, + {"min": 301, "max": 1000, "status": 4} + ] + }, + { + "name": "server_uptime", + "ranges": [ + {"min": 0, "max": 0, "status": 4}, + {"min": 1, "max": 1000, "status": 1} + ] + }, + { + "name": "total_participants", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "registered_abonents", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "webcasts_HLS_clients", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "total_P2P_rooms", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "conferences_total", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "conferences_active", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "records_active", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "number_of_records_saved", + "ranges": [ + {"min": 0, "max": 10, "status": 1}, + {"min": 11, "max": 30, "status": 2}, + {"min": 31, "max": 50, "status": 3}, + {"min": 51, "max": 1000, "status": 4} + ] + }, + { + "name": "replication_status", + "ranges": [ + {"min": 0, "max": 0, "status": 4}, + {"min": 1, "max": 1, "status": 1} + ] + } +] \ No newline at end of file diff --git a/src/zvksmetrics/zvksmetrics.controller.ts b/src/zvksmetrics/zvksmetrics.controller.ts index 5648948..af07c6c 100644 --- a/src/zvksmetrics/zvksmetrics.controller.ts +++ b/src/zvksmetrics/zvksmetrics.controller.ts @@ -26,6 +26,16 @@ export class ZvksmetricsController { return ret; } +//Заглушка для будующей API под граничные значения + @Post('ranges/:code') + async setRanges(@Body() inputRanges: any, @Param('code', ParseIntPipe) code: number): Promise { + let ret: string = "Controller Error"; + if (code === 9999) { + return await this.metricsService.saveRanges(inputRanges); + } + return ret; + } + //Заглушка для будующей API под комплексные значения метрик @Options('complex/:code') async showComplexMetrics(@Param('code', ParseIntPipe) code: number): Promise { @@ -38,7 +48,7 @@ export class ZvksmetricsController { @Post('input') async getPostMessage(@Body() inputMetrics: any): Promise { - console.log(inputMetrics); + // console.log(inputMetrics); let out: any = await this.metricsService.useStatusModel(inputMetrics); return out; } diff --git a/src/zvksmetrics/zvksmetrics.service.ts b/src/zvksmetrics/zvksmetrics.service.ts index 8e63a56..52b5e49 100644 --- a/src/zvksmetrics/zvksmetrics.service.ts +++ b/src/zvksmetrics/zvksmetrics.service.ts @@ -1,6 +1,6 @@ import { Body, Injectable } from '@nestjs/common'; import axios, { Axios, AxiosResponse } from 'axios'; -import { readFile } from 'node:fs/promises'; +import { readFile, writeFile } from 'node:fs/promises'; import { response } from 'express'; import { json } from 'node:stream/consumers'; import math, { create, all, evaluate, number, random, complex, string } from 'mathjs' @@ -22,8 +22,8 @@ export class MetricK2 { @Injectable() export class K2Metrics { service_name: string; - device: number; - source: string; + // device: number; + // source: string; //endpoint_name: string; metrics: MetricK2[]; }; @@ -74,10 +74,11 @@ export class ZvksmetricsService { // console.log(prev); let intermediate = await this.getComplexMetricsValues(inp, prev, complex, model, scope); + // console.log(intermediate); - const val = JSON.parse(JSON.stringify(model[0].values)); + // const val = JSON.parse(JSON.stringify(model[0].values)); // let editedMetrics : K2Metrics = await this.getMetrics (inp, comlexCalc, scope); let responseFromExporter: any = await this.sendMetrics(intermediate); @@ -89,7 +90,7 @@ export class ZvksmetricsService { } - async getMetrics(inputData: K2Metrics, comlexCalc: ComplexMetricsCalculation[], scope: MetricsRanges[]): Promise { + async getMetrics(inputData: K2Metrics, scope: MetricsRanges[]): Promise { let arr: MetricK2[] = inputData.metrics; let length: number = arr.length; @@ -101,6 +102,18 @@ export class ZvksmetricsService { return inputData; } + // async getComplexMetrics(complexData: K2Metrics, scope: MetricsRanges[]): Promise { + // let arr: MetricK2[] = complexData.metrics; + // let length: number = arr.length; + + // for (let i = 0; i < length; i++) { + // arr[i].status = await this.setMetricsStatus(arr[i], scope); + // } + // complexData.metrics = arr; + + // return complexData; + // } + async getComplexMetricsValues(inputData: K2Metrics, prevousData: K2Metrics, complexData: K2Metrics, complexCalc: ComplexMetricsCalculation[], scope: MetricsRanges[]): Promise { let length: number = complexCalc.length; let metrics: MetricK2[] = complexData.metrics; @@ -114,22 +127,23 @@ export class ZvksmetricsService { for (let i = 0; i < length; i++) { let metr = {"source": ""}; let val = await this.setComplexMetricValue(complexCalc[i].values, complexCalc[i].formula, inputData.metrics, prevousData.metrics, devices[d], metr); - let status = 3; - let complexMetric = new MetricK2(); - complexMetric.id = complexCalc[i].id; - complexMetric.name = complexCalc[i].name; - complexMetric.type = inputData.metrics[0].type; - complexMetric.addr = inputData.metrics[0].addr; - complexMetric.value = val; - complexMetric.description = complexCalc[i].name; - complexMetric.status = status; - complexMetric.device = devices[d]; - complexMetric.source = metr.source; - metrics.push(complexMetric); + if(val){ + let complexMetric = new MetricK2(); + complexMetric.id = complexCalc[i].id; + complexMetric.name = complexCalc[i].name; + complexMetric.type = inputData.metrics[0].type; + complexMetric.addr = inputData.metrics[0].addr; + complexMetric.value = val; + complexMetric.description = complexCalc[i].name; + complexMetric.status = await this.showStatus(scope, complexMetric.name, val); + complexMetric.device = devices[d]; + complexMetric.source = metr.source; + metrics.push(complexMetric); + } } } - console.log(complexData); + console.log(complexData.metrics); return complexData; } @@ -160,17 +174,17 @@ export class ZvksmetricsService { async setMetricsStatus(metric: MetricK2, scope: MetricsRanges[]): Promise { if (metric && scope) { - return await this.showStatus(scope, metric.id, metric.value); + return await this.showStatus(scope, metric.name, metric.value); } else { - return 4; + return 5; } } async sendMetrics(inputData: K2Metrics): Promise { let resp: any; let path: string = 'http://192.168.2.34:9050/update'; - let body: any = inputData; + let body: any = JSON.stringify(inputData); let options: any = { headers: { 'Content-Type': 'application/json' } }; @@ -217,6 +231,20 @@ export class ZvksmetricsService { return rangesData; } + async saveRanges(inputRanges: any): Promise { + let ret: any; + let filePath = './src/zvksmetrics/conf/ranges123.json'; + console.log(inputRanges); + try{ + ret = await writeFile(filePath, inputRanges, 'utf8'); + } + catch{ + ret = "Error write file"; + console.log(ret); + } + return ret; + } + async setComplexMetrics(@Body() complexData: any = null): Promise { let url: string = 'http://192.168.2.39:9999/api/complex/5555'; let options: any = {