Compare commits

..

No commits in common. "1a622c140db9434c651feee51ca54304d0296ad3" and "e973ae50da7d9658b888ac03054f6e453635ca34" have entirely different histories.

9 changed files with 133 additions and 1781 deletions

View File

@ -8,8 +8,6 @@ import { ConfigModule } from '@nestjs/config';
import { StatusModule } from './status/status.module';
import { EventsModule } from './events/events.module';
@Module({
imports: [ZvksmetricsModule, GruberModule, DatabaseModule, ConfigModule.forRoot({
isGlobal: true,
@ -19,6 +17,3 @@ import { EventsModule } from './events/events.module';
providers: [AppService],
})
export class AppModule {}
ConfigModule.forRoot();

View File

@ -6,14 +6,14 @@ import { isInternalThread } from 'node:worker_threads';
export class ClickhouseService {
async ClickHouseConnect(): Promise<ClickHouse>{
let connectionData = new ClickHouse({
// url: 'http://192.168.2.37',
url: process.env.DATABASE_URL,
port: process.env.DATABASE_PORT,
// port: 8123,
url: 'http://192.168.2.37',
port: 8123,
// url: DATABASE_NAME,
// PORT: DATABASE_PORT,
debug: false,
basicAuth: {
username: process.env.DATABASE_USER,
password: process.env.USER_PASSWORD,
username: 'root',
password: 'dbss',
},
isUseGzip: false,
trimQuery: false,
@ -40,7 +40,25 @@ export class ClickhouseService {
async ClickHouseDBsCreate(): Promise<ClickHouse> {
let connectionData = await this.ClickHouseConnect();
try {
// let queries = [
// 'DROP TABLE IF EXISTS session_temp',
// `CREATE TABLE IF NOT EXISTS session_temp (
// id UInt128,
// body TEXT,
// ips Array(UInt32),
// ueries Nested (
// id UInt32,
// act String,
// uptime DateTime64
// ),
// create_date DateTime64,
// update_time DateTime64,
// ) ENGINE = MergeTree()
// PRIMARY KEY (id)`
// ];
let queries = [
`CREATE TABLE IF NOT EXISTS raw_parameters (
EventDataTime DateTime64,
@ -114,68 +132,53 @@ export class ClickhouseService {
}
// console.log(connectionData);
return connectionData;}
catch (e) {
return e;
}
return connectionData;
}
async ClickHouseAddRecords(recordFormat: string, parameterBody: any): Promise<any>{
let connectionData = await this.ClickHouseDBsCreate();
try {
switch(recordFormat){
case 'raw':
let insertRawQuery = 'INSERT INTO raw_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
// console.log(insertQuery);
insertRawQuery = insertRawQuery.replace('{{parameterBody}}', parameterBody);
// console.log(insertRawQuery);
// for (let query of insertQuery) {
try{
let retRaw = await connectionData.query(insertRawQuery).toPromise();
console.log(retRaw);
}
catch{
console.log(insertRawQuery);
}
// console.log(retRaw);
// }
break;
case 'complex':
let insertComplexQuery = 'INSERT INTO complex_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
// console.log(insertQuery);
insertComplexQuery = insertComplexQuery.replace('{{parameterBody}}', parameterBody);
// console.log(insertComplexQuery);
// for (let query of insertQuery) {
let retComplex = await connectionData.query(insertComplexQuery).toPromise();
// console.log(retComplex);
// }
break;
}
return 1;
switch(recordFormat){
case 'raw':
let insertRawQuery = 'INSERT INTO raw_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
// console.log(insertQuery);
insertRawQuery = insertRawQuery.replace('{{parameterBody}}', parameterBody);
// console.log(insertRawQuery);
// for (let query of insertQuery) {
try{
let retRaw = await connectionData.query(insertRawQuery).toPromise();
}
catch{
console.log(insertRawQuery);
}
// console.log(retRaw);
// }
break;
case 'complex':
let insertComplexQuery = 'INSERT INTO complex_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
// console.log(insertQuery);
insertComplexQuery = insertComplexQuery.replace('{{parameterBody}}', parameterBody);
// console.log(insertComplexQuery);
// for (let query of insertQuery) {
let retComplex = await connectionData.query(insertComplexQuery).toPromise();
// console.log(retComplex);
// }
break;
}
catch {
return 0;
}
return 1;
}
async ClickHouseAddEvents(parameterID: string, parameterName: string, parameterValue: string, parameterBody: string, previousStatus: string, currentStatus: string): Promise<any>{
let connectionData = await this.ClickHouseDBsCreate();
try {
let insertEventQuery = 'INSERT INTO status_events VALUES(toDateTime(now()), {{parameterID}}, \'{{parameterName}}\', {{parameterValue}}, \'{{parameterBody}}\', {{previousStatus}}, {{currentStatus}}, toDateTime(now()));';
insertEventQuery = insertEventQuery.replace('{{parameterID}}', parameterID);
insertEventQuery = insertEventQuery.replace('{{parameterName}}', parameterName);
insertEventQuery = insertEventQuery.replace('{{parameterValue}}', parameterValue);
insertEventQuery = insertEventQuery.replace('{{parameterBody}}', parameterBody);
insertEventQuery = insertEventQuery.replace('{{previousStatus}}', previousStatus);
insertEventQuery = insertEventQuery.replace('{{currentStatus}}', currentStatus);
let retEvent = await connectionData.query(insertEventQuery).toPromise();
// console.log(retEvent);
return 1;
}
catch {
return 0;
}
let insertEventQuery = 'INSERT INTO status_events VALUES(toDateTime(now()), {{parameterID}}, \'{{parameterName}}\', {{parameterValue}}, \'{{parameterBody}}\', {{previousStatus}}, {{currentStatus}}, toDateTime(now()));';
insertEventQuery = insertEventQuery.replace('{{parameterID}}', parameterID);
insertEventQuery = insertEventQuery.replace('{{parameterName}}', parameterName);
insertEventQuery = insertEventQuery.replace('{{parameterValue}}', parameterValue);
insertEventQuery = insertEventQuery.replace('{{parameterBody}}', parameterBody);
insertEventQuery = insertEventQuery.replace('{{previousStatus}}', previousStatus);
insertEventQuery = insertEventQuery.replace('{{currentStatus}}', currentStatus);
let retEvent = await connectionData.query(insertEventQuery).toPromise();
// console.log(retEvent);
return 1;
}
}

View File

@ -1,6 +1,5 @@
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ConfigService } from '@nestjs/config';
async function bootstrap() {
const app = await NestFactory.create(AppModule);

View File

@ -2,583 +2,259 @@
{
"id": "10001",
"name": "cpu_utilization",
"desription": "Загруженность центрального процессора",
"values": {
"arr": [
"cpurawidle",
"cpurawuser",
"cpurawnice",
"cpurawsystem",
"cpurawwait",
"cpurawinterrupt"
],
"prevarr": [
"cpurawidle",
"cpurawuser",
"cpurawnice",
"cpurawsystem",
"cpurawwait",
"cpurawinterrupt"
]
},
"values": {"arr":["cpurawidle", "cpurawuser", "cpurawnice", "cpurawsystem", "cpurawwait", "cpurawinterrupt"],"prevarr":["cpurawidle", "cpurawuser", "cpurawnice", "cpurawsystem", "cpurawwait", "cpurawinterrupt"]},
"formula": "((arr[2]-prevarr[2])+(arr[3]-prevarr[3])+(arr[4]-prevarr[4])+(arr[6]-prevarr[6]))/((arr[1]-prevarr[1])+(arr[2]-prevarr[2])+(arr[3]-prevarr[3])+(arr[4]-prevarr[4])+(arr[5]-prevarr[5])+(arr[6]-prevarr[6]))*100"
},
{
"id": "10002",
"name": "cpu_load_average_1",
"desription": "Средняя загруженность центрального процессора в периоде 1-ой минуты",
"values": {
"arr": [
"cpu1min"
]
},
"values": {"arr":["cpu1min"]},
"formula": "arr[1]"
},
{
"id": "10003",
"name": "cpu_load_average_5",
"desription": "Средняя загруженность центрального процессора в периоде 5-и минут",
"values": {
"arr": [
"cpu5min"
]
},
"values": {"arr":["cpu5min"]},
"formula": "arr[1]"
},
{
"id": "10004",
"name": "cpu_load_average_15",
"desription": "Средняя загруженность центрального процессора в периоде 15-и минут",
"values": {
"arr": [
"cpu15min"
]
},
"values": {"arr":["cpu15min"]},
"formula": "arr[1]"
},
{
"id": "10005",
"name": "ram_usage",
"desription": "Объем использования оперативной памяти",
"values": {
"arr": [
"totalMemory",
"totalMemoryAvail"
]
},
"values": {"arr":["totalMemory", "totalMemoryAvail"]},
"formula": "(arr[1]-arr[2])/arr[1]*100"
},
{
"id": "10006",
"name": "disk_usage",
"desription": "Объем использования ресурсов области хранения данных",
"values": {
"arr": [
"totalDiskSize",
"useDiskSize"
]
},
"values": {"arr":["totalDiskSize", "useDiskSize"]},
"formula": "(arr[1]-arr[2])/arr[1]*100"
},
{
"id": "10007",
"name": "disk_read_rate",
"desription": "Скорость чтения из области хранения данных",
"values": {
"arr": [
"diskReadAccess"
],
"prevarr": [
"diskReadAccess"
]
},
"values": {"arr":["diskReadAccess"], "prevarr":["diskReadAccess"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10008",
"name": "disk_write_rate",
"desription": "Скорость записи в область хранения данных",
"values": {
"arr": [
"diskWriteAccess"
],
"prevarr": [
"diskWriteAccess"
]
},
"values": {"arr":["diskWriteAccess"], "prevarr":["diskWriteAccess"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10009",
"name": "network_interface_rx_Eth_1",
"desription": "Скорость приема данных интерфейса Eth1",
"values": {
"arr": [
"speed1",
"ifInOctets1"
],
"prevarr": [
"speed1",
"ifInOctets1"
]
},
"values": {"arr":["speed1", "ifInOctets1"], "prevarr":["speed1", "ifInOctets1"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10010",
"name": "network_interface_tx_Eth_1",
"desription": "Скорость передачи данных интерфейса Eth1",
"values": {
"arr": [
"speed1",
"ifOutOctets1"
],
"prevarr": [
"speed1",
"ifOutOctets1"
]
},
"values": {"arr":["speed1", "ifOutOctets1"], "prevarr":["speed1", "ifOutOctets1"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10011",
"name": "network_interface_rx_Eth_2",
"desription": "Скорость приема данных интерфейса Eth2",
"values": {
"arr": [
"speed2",
"ifInOctets2"
],
"prevarr": [
"speed2",
"ifInOctets2"
]
},
"values": {"arr":["speed2", "ifInOctets2"], "prevarr":["speed2", "ifInOctets2"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10012",
"name": "network_interface_tx_Eth_2",
"desription": "Скорость передачи данных интерфейса Eth2",
"values": {
"arr": [
"speed2",
"ifOutOctets2"
],
"prevarr": [
"speed2",
"ifOutOctets2"
]
},
"values": {"arr":["speed2", "ifOutOctets2"], "prevarr":["speed2", "ifOutOctets2"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10013",
"name": "network_interface_rx_Eth_3",
"desription": "Скорость приема данных интерфейса Eth3",
"values": {
"arr": [
"speed3",
"ifInOctets3"
],
"prevarr": [
"speed3",
"ifInOctets3"
]
},
"values": {"arr":["speed3", "ifInOctets3"], "prevarr":["speed3", "ifInOctets3"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10014",
"name": "network_interface_tx_Eth_3",
"desription": "Скорость передачи данных интерфейса Eth3",
"values": {
"arr": [
"speed3",
"ifOutOctets3"
],
"prevarr": [
"speed3",
"ifOutOctets3"
]
},
"values": {"arr":["speed3", "ifOutOctets3"], "prevarr":["speed3", "ifOutOctets3"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10015",
"name": "network_interface_rx_Eth_4",
"desription": "Скорость приема данных интерфейса Eth4",
"values": {
"arr": [
"speed4",
"ifInOctets4"
],
"prevarr": [
"speed4",
"ifInOctets4"
]
},
"values": {"arr":["speed4", "ifInOctets4"], "prevarr":["speed4", "ifInOctets4"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10016",
"name": "network_interface_tx_Eth_4",
"desription": "Скорость передачи данных интерфейса Eth4",
"values": {
"arr": [
"speed4",
"ifOutOctets4"
],
"prevarr": [
"speed4",
"ifOutOctets4"
]
},
"values": {"arr":["speed4", "ifOutOctets4"], "prevarr":["speed4", "ifOutOctets4"]},
"formula": "(arr[2]-prevarr[2])/arr[1]*100"
},
{
"id": "10017",
"name": "network_interfaces_read_packets_errors_Eth_1",
"desription": "Количество ошибок при чтении пакетов на интерфейсе Eth1",
"values": {
"arr": [
"ifInErrors1"
],
"prevarr": [
"ifInErrors1"
]
},
"values": {"arr":["ifInErrors1"], "prevarr":["ifInErrors1"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10018",
"name": "network_interfaces_write_packets_errors_Eth_1",
"desription": "Количество ошибок при отправки пакетов на интерфейсе Eth1",
"values": {
"arr": [
"ifOutErrors1"
],
"prevarr": [
"ifOutErrors1"
]
},
"values": {"arr":["ifOutErrors1"], "prevarr":["ifOutErrors1"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10019",
"name": "network_interfaces_read_packets_errors_Eth_2",
"desription": "Количество ошибок при чтении пакетов на интерфейсе Eth2",
"values": {
"arr": [
"ifInErrors2"
],
"prevarr": [
"ifInErrors2"
]
},
"values": {"arr":["ifInErrors2"], "prevarr":["ifInErrors2"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10020",
"name": "network_interfaces_write_packets_errors_Eth_2",
"desription": "Количество ошибок при отправки пакетов на интерфейсе Eth2",
"values": {
"arr": [
"ifOutErrors2"
],
"prevarr": [
"ifOutErrors2"
]
},
"values": {"arr":["ifOutErrors2"], "prevarr":["ifOutErrors2"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10021",
"name": "network_interfaces_read_packets_errors_Eth_3",
"desription": "Количество ошибок при чтении пакетов на интерфейсе Eth3",
"values": {
"arr": [
"ifInErrors3"
],
"prevarr": [
"ifInErrors3"
]
},
"values": {"arr":["ifInErrors3"], "prevarr":["ifInErrors3"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10022",
"name": "network_interfaces_write_packets_errors_Eth_3",
"desription": "Количество ошибок при отправки пакетов на интерфейсе Eth3",
"values": {
"arr": [
"ifOutErrors3"
],
"prevarr": [
"ifOutErrors3"
]
},
"values": {"arr":["ifOutErrors3"], "prevarr":["ifOutErrors3"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10023",
"name": "network_interfaces_read_packets_errors_Eth_4",
"desription": "Количество ошибок при чтении пакетов на интерфейсе Eth4",
"values": {
"arr": [
"ifInErrors4"
],
"prevarr": [
"ifInErrors4"
]
},
"values": {"arr":["ifInErrors4"], "prevarr":["ifInErrors4"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10024",
"name": "network_interfaces_write_packets_errors_Eth_4",
"desription": "Количество ошибок при отправки пакетов на интерфейсе Eth4",
"values": {
"arr": [
"ifOutErrors4"
],
"prevarr": [
"ifOutErrors4"
]
},
"values": {"arr":["ifOutErrors4"], "prevarr":["ifOutErrors4"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10025",
"name": "network_interfaces_read_packets_discarded_Eth_1",
"desription": "Количество не обработанных пакетов на интерфейсе Eth1 при отправки данных",
"values": {
"arr": [
"ifInDiscard1"
],
"prevarr": [
"ifInDiscard1"
]
},
"values": {"arr":["ifInDiscard1"], "prevarr":["ifInDiscard1"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10026",
"name": "network_interfaces_write_packets_discarded_Eth_1",
"desription": "Количество не обработанных пакетов на интерфейсе Eth1 при получении данных",
"values": {
"arr": [
"ifOutDiscard1"
],
"prevarr": [
"ifOutDiscard1"
]
},
"values": {"arr":["ifOutDiscard1"], "prevarr":["ifOutDiscard1"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10027",
"name": "network_interfaces_read_packets_discarded_Eth_2",
"desription": "Количество не обработанных пакетов на интерфейсе Eth2 при отправки данных",
"values": {
"arr": [
"ifInDiscard2"
],
"prevarr": [
"ifInDiscard2"
]
},
"values": {"arr":["ifInDiscard2"], "prevarr":["ifInDiscard2"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10028",
"name": "network_interfaces_write_packets_discarded_Eth_2",
"desription": "Количество не обработанных пакетов на интерфейсе Eth1 при получении данных",
"values": {
"arr": [
"ifOutDiscard2"
],
"prevarr": [
"ifOutDiscard2"
]
},
"values": {"arr":["ifOutDiscard2"], "prevarr":["ifOutDiscard2"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10029",
"name": "network_interfaces_read_packets_discarded_Eth_3",
"desription": "Количество не обработанных пакетов на интерфейсе Eth3 при отправки данных",
"values": {
"arr": [
"ifInDiscard3"
],
"prevarr": [
"ifInDiscard3"
]
},
"values": {"arr":["ifInDiscard3"], "prevarr":["ifInDiscard3"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10030",
"name": "network_interfaces_write_packets_discarded_Eth_3",
"desription": "Количество не обработанных пакетов на интерфейсе Eth3 при получении данных",
"values": {
"arr": [
"ifOutDiscard3"
],
"prevarr": [
"ifOutDiscard3"
]
},
"values": {"arr":["ifOutDiscard3"], "prevarr":["ifOutDiscard3"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10031",
"name": "network_interfaces_read_packets_discarded_Eth_4",
"desription": "Количество не обработанных пакетов на интерфейсе Eth4 при отправки данных",
"values": {
"arr": [
"ifInDiscard4"
],
"prevarr": [
"ifInDiscard4"
]
},
"values": {"arr":["ifInDiscard4"], "prevarr":["ifInDiscard4"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10032",
"name": "network_interfaces_write_packets_discarded_Eth_4",
"desription": "Количество не обработанных пакетов на интерфейсе Eth4 при получении данных",
"values": {
"arr": [
"ifOutDiscard4"
],
"prevarr": [
"ifOutDiscard4"
]
},
"values": {"arr":["ifOutDiscard4"], "prevarr":["ifOutDiscard4"]},
"formula": "(arr[1]-prevarr[1])"
},
{
"id": "10033",
"name": "response_icmp",
"desription": "Количество полученных ответов по протоколу ICMP",
"values": {
"arr": [
"ping_check"
]
},
"values": {"arr":["ping_check"]},
"formula": "arr[1]"
},
{
"id": "10034",
"name": "server_uptime",
"desription": "Текущее время безотказной работы сервера",
"values": {
"arr": [
"upTime"
]
},
"values": {"arr":["upTime"]},
"formula": "arr[1]"
},
{
"id": "10035",
"name": "total_participants",
"desription": "Текущее количество участников конференции",
"values": {
"arr": [
"TotalParticipants"
]
},
"values": {"arr":["TotalParticipants"]},
"formula": "arr[1]"
},
{
"id": "10036",
"name": "registered_abonents",
"desription": "Текущее количество зарегистрированных пользователей",
"values": {
"arr": [
"RegisteredAbonents"
]
},
"values": {"arr":["RegisteredAbonents"]},
"formula": "arr[1]"
},
{
"id": "10037",
"name": "webcasts_HLS_clients",
"desription": "Текущее количество клиентов, участвувающих в HLS WEB-трансляции ",
"values": {
"arr": [
"WebcastsHLSclients"
]
},
"values": {"arr":["WebcastsHLSclients"]},
"formula": "arr[1]"
},
{
"id": "10038",
"name": "total_P2P_rooms",
"desription": "Общее количество P2P зон общения",
"values": {
"arr": [
"TotalP2Prooms"
]
},
"values": {"arr":["TotalP2Prooms"]},
"formula": "arr[1]"
},
{
"id": "10039",
"name": "conferences_total",
"desription": "Общее количество зарегистрированных конференций",
"values": {
"arr": [
"Conferencestotal"
]
},
"values": {"arr":["Conferencestotal"]},
"formula": "arr[1]"
},
{
"id": "10040",
"name": "conferences_active",
"desription": "Общее количество текущих активных конференций",
"values": {
"arr": [
"ConferencesActive"
]
},
"values": {"arr":["ConferencesActive"]},
"formula": "arr[1]"
},
{
"id": "10041",
"name": "records_active",
"desription": "Текущее количество ведущихся записей",
"values": {
"arr": [
"RecordsActive"
]
},
"values": {"arr":["RecordsActive"]},
"formula": "arr[1]"
},
{
"id": "10042",
"name": "number_of_records_saved",
"desription": "Общее количество записанных записей",
"values": {
"arr": [
"NumberRecordsSaved"
]
},
"values": {"arr":["NumberRecordsSaved"]},
"formula": "arr[1]"
},
{
"id": "10043",
"name": "replication_status",
"desription": "Статус репликации данных",
"values": {
"arr": [
"replicationStatus"
]
},
"values": {"arr":["replicationStatus"]},
"formula": "arr[1]"
}
]

View File

@ -1,51 +0,0 @@
[
{
"id": "90001",
"name": "server_li",
"desription": "Индекс загрузки сервера - Server Load Index",
"values": {
"statusarr": [
"cpu_load_average_1",
"ram_usage",
"disk_usage",
"disk_read_rate",
"disk_write_rate",
"network_interface_rx_Eth_1",
"network_interface_tx_Eth_1",
"network_interface_rx_Eth_2",
"network_interface_tx_Eth_2",
"network_interface_rx_Eth_3",
"network_interface_tx_Eth_3",
"network_interface_rx_Eth_4",
"network_interface_tx_Eth_4"
],
"warr": [
"0.4",
"0.3",
"0.2",
"0.1"
]
},
"formula": "100 * (1 - (statusarr[1]*warr[1]+statusarr[2]*warr[1]+statusarr[3]*warr[4]+statusarr[4]*warr[3]+statusarr[4]*warr[3]+statusarr[5]*warr[3]+statusarr[6]*warr[3]+statusarr[7]*warr[3]+statusarr[8]*warr[3]+statusarr[9]*warr[3]+statusarr[10]*warr[3]+statusarr[11]*warr[3]+statusarr[12]*warr[3]+statusarr[13]*warr[3])/(warr[1]+warr[1]+warr[4]+warr[3]+warr[3]+warr[3]+warr[3]+warr[3]+warr[3]+warr[3]+warr[3]+warr[3]+warr[3]+warr[3]))"
},
{
"id": "90002",
"name": "application_li",
"desription": "Индекс нагрузки приложения - Application Load Index",
"values": {
"statusarr": [
"total_participants",
"conferences_active",
"registered_abonents",
"total_P2P_rooms"
],
"warr": [
"0.4",
"0.3",
"0.2",
"0.1"
]
},
"formula": "100 * (1 - (statusarr[1]*warr[1]+statusarr[2]*warr[2]+statusarr[3]*warr[4]+statusarr[4]*warr[3]+statusarr[4]*warr[3])/(warr[1]+warr[2]+warr[4]+warr[4]))"
}
]

View File

@ -1 +0,0 @@
{"formula": "100 * (1 - (cpu_load_average_1*0.4+ram_usage*0.4+disk_usage*0.1+disk_read_rate*0.2+disk_write_rate*0.2+network_interface_rx_Eth_1*0.2+network_interface_tx_Eth_1*0.2+network_interface_rx_Eth_2*0.2+network_interface_tx_Eth_2*0.2+network_interface_rx_Eth_3*0.2+network_interface_tx_Eth_3*0.2+network_interface_rx_Eth_4*0.2+network_interface_tx_Eth_4*0.2))"}

File diff suppressed because one or more lines are too long

View File

@ -46,35 +46,6 @@ export class ZvksmetricsController {
return ret;
}
//Заглушка для будующей API под интеграционные значения метрик
@Options('integration/:code')
async showIntegrationMetrics(@Param('code', ParseIntPipe) code: number): Promise<JSON> {
let ret: JSON = JSON.parse('{"result":"null"}');
if (code === 7777) {
return await this.metricsService.showIntegrationMetricsConfig('File Name');
}
return ret;
}
//Заглушка для будующей API под интеграционные значения метрик
@Options('formulas/:code')
async showIntegrationFormula(@Param('code', ParseIntPipe) code: number): Promise<JSON> {
let ret: JSON = JSON.parse('{"result":"normalek"}');
if (code === 3333) {
return await this.metricsService.showFormulas('File Name');
}
return ret;
}
@Post('formulas/:code')
async setFormulas(@Body() inputFormulas: any, @Param('code', ParseIntPipe) code: number): Promise<string> {
let ret: string = "Controller Error";
if (code === 1111) {
return await this.metricsService.saveFormulas(inputFormulas);
}
return ret;
}
@Post('input')
async getPostMessage(@Body() inputMetrics: any): Promise<string> {
// console.log(inputMetrics);

View File

@ -1,4 +1,3 @@
import { ConfigModule, ConfigService } from '@nestjs/config';
import { Body, Injectable } from '@nestjs/common';
import axios, { Axios, AxiosResponse } from 'axios';
import { readFile, writeFile } from 'node:fs/promises';
@ -47,10 +46,9 @@ export class MetricsRanges {
};
@Injectable()
export class MetricsCalculation {
export class ComplexMetricsCalculation {
id: string;
name: string;
desription: string;
values: string;
formula: string;
};
@ -69,28 +67,18 @@ export class ZvksmetricsService {
complex.service_name = inp.service_name;
complex.metrics = [];
let integration: K2Metrics = new K2Metrics();
integration.service_name = inp.service_name;
integration.metrics = [];
let model: ComplexMetricsCalculation[] = [];
model = await this.setComplexMetrics();
let scope: MetricsRanges[] = [];
scope = await this.setMetricsRanges();
let model: MetricsCalculation[] = [];
model = await this.setComplexMetrics();
let intgr: MetricsCalculation[] = [];
intgr = await this.setIntegrationMetrics();
if (!prev) {
prev = inp;
}
// console.log(prev);
let intermediate = await this.getComplexMetricsValues(inp, prev, complex, model, scope);
// console.log(intermediate);
let integrate = await this.getIntegrationMetricsValues(intermediate, integration, intgr, scope);
// console.log(integrate);
// console.log(intermediate);
let ctp: any = classToPlain(intermediate);
@ -109,8 +97,7 @@ export class ZvksmetricsService {
// let editedMetrics : K2Metrics = await this.getMetrics (inp, comlexCalc, scope);
let responseFromExporter: any = await this.sendMetrics(intermediate);
let responseFromExporter1: any = await this.sendMetrics(inp);
let responseFromExporter2: any = await this.sendMetrics(integrate);
console.log(responseFromExporter2);
prev = inp;
return responseFromExporter;
@ -141,7 +128,7 @@ export class ZvksmetricsService {
// return complexData;
// }
async getComplexMetricsValues(inputData: K2Metrics, prevousData: K2Metrics, complexData: K2Metrics, complexCalc: MetricsCalculation[], scope: MetricsRanges[]): Promise<K2Metrics> {
async getComplexMetricsValues(inputData: K2Metrics, prevousData: K2Metrics, complexData: K2Metrics, complexCalc: ComplexMetricsCalculation[], scope: MetricsRanges[]): Promise<K2Metrics> {
let length: number = complexCalc.length;
let metrics: MetricK2[] = complexData.metrics;
@ -152,11 +139,11 @@ export class ZvksmetricsService {
// const jsonData = require('../conf/devices.json');
// console.log(jsonData);
let uptimeElements = inputData.metrics.filter(element => element.name == 'upTime');
if (uptimeElements) {
for (let uptime of uptimeElements) {
let uptimeElements = inputData.metrics.filter(element=> element.name == 'upTime');
if(uptimeElements){
for(let uptime of uptimeElements){
let uptStr: any = uptime?.value.toString().split(' ');
uptime.value = (+uptStr[0]) * 3600 + (uptStr[2]) * 60 + (+uptStr[4]);
uptime.value = (+uptStr[0])*3600+(uptStr[2])*60+(+uptStr[4]);
}
}
for (let d = 0; d < device_len; d++) {
@ -170,12 +157,12 @@ export class ZvksmetricsService {
complexMetric.type = inputData.metrics[0].type;
complexMetric.addr = inputData.metrics[0].addr;
complexMetric.value = val;
complexMetric.description = complexCalc[i].desription;
complexMetric.description = complexCalc[i].name;
complexMetric.status = await this.showStatus(scope, complexMetric.name, val);
complexMetric.device = devices[d];
complexMetric.source = metr.source + ', complex';
complexMetric.source = metr.source;
metrics.push(complexMetric);
await compare.CompareStatus(complexMetric);
}
}
@ -186,43 +173,6 @@ export class ZvksmetricsService {
return complexData;
}
async getIntegrationMetricsValues(complexData: K2Metrics, integrationData: K2Metrics, intgrationCalc: MetricsCalculation[], scope: MetricsRanges[]): Promise<K2Metrics> {
let length: number = intgrationCalc.length;
let metrics: MetricK2[] = integrationData.metrics;
let devices: number[] = [18, 19];
let device_len: number = devices.length;
let compare = new EventsService();
for (let d = 0; d < device_len; d++) {
for (let i = 0; i < length; i++) {
let metr = { "source": "" };
let val = await this.setIntegrationMetricValue(intgrationCalc[i].values, intgrationCalc[i].formula, intgrationCalc[i].name, complexData.metrics, devices[d], metr);
if (val != null || val != undefined) {
let integrationMetric = new MetricK2();
integrationMetric.id = intgrationCalc[i].id;
integrationMetric.name = intgrationCalc[i].name;
integrationMetric.type = complexData.metrics[0].type;
integrationMetric.addr = complexData.metrics[0].addr;
integrationMetric.value = val;
integrationMetric.description = intgrationCalc[i].desription;
integrationMetric.status = await this.showStatus(scope, integrationMetric.name, val);
integrationMetric.device = devices[d];
integrationMetric.source = metr.source.replace(', complex', ', integration');
metrics.push(integrationMetric);
await compare.CompareStatus(integrationMetric);
}
}
}
// console.log(integrationData.metrics);
return integrationData;
}
async setComplexMetricValue(value: string, formula: string, currMetrics: MetricK2[], prevMetrics: MetricK2[], device: number, obj: any): Promise<any> {
const val = JSON.parse(JSON.stringify(value));
let arr = val.arr;
@ -236,10 +186,10 @@ export class ZvksmetricsService {
let temp = arr[i];
arr[i] = currMetrics.find(element => element.name == arr[i] && element.device == device)?.value;
if (!arr[i]) {
// console.log(arr[i], temp, device);
arr[i] = 0;
}
// if(!arr[i]){
// console.log(arr[i], temp, device);
// arr[i]=0;
// }
}
let prevarr = val.prevarr;
if (prevarr) {
@ -256,49 +206,7 @@ export class ZvksmetricsService {
let result: number = evaluate(formula, val);
// console.log(result);
return result;
} catch {
return null;
}
}
async setIntegrationMetricValue(value: string, formula: string, metricName: string, metrics: MetricK2[], device: number, obj: any): Promise<any> {
const val = JSON.parse(JSON.stringify(value));
let arr = val.statusarr;
let arr_len: number = 13; //arr.length;
// console.log (metricName);
if (metricName == "application_li") {
arr = val.statusarr;
arr_len = 4;
}
// console.log(arr);
obj.source = metrics.find(element => element.name == arr[0] && element.device == device)?.source;
for (let i = 0; i < arr_len; i++) {
// let temp = arr[i];
// if(metricName == "server_li"){
arr[i] = metrics.find(element => element.name == arr[i] && element.device == device)?.status;
if (arr[i] != 0) {
arr[i]--;
}
// console.log(arr[i]);
// }
// if(metricName == "application_li"){
// arr[i] = metrics.find(element => element.name == arr[i] && element.device == device)?.value;
// }
// // console.log(arr[i]);
// if (arr[i] == undefined || arr[i] == null || Number.isNaN(arr[i])) {
// arr[i] = Math.random() * 10;
// }
// console.log(arr[i]);
}
try {
let result: number = evaluate(formula, val);
// console.log(metricName, result);
return result;
// console.log(result);
} catch {
return null;
}
@ -315,7 +223,7 @@ export class ZvksmetricsService {
async sendMetrics(inputData: K2Metrics): Promise<string> {
let resp: any;
let path: any = process.env.IM_UPDATE;
let path: string = 'http://192.168.2.34:9050/update';
let body: any = JSON.stringify(inputData);
let options: any = {
headers: { 'Content-Type': 'application/json' }
@ -349,7 +257,7 @@ export class ZvksmetricsService {
}
async setMetricsRanges(@Body() rangesData: any = null): Promise<MetricsRanges[]> {
let url: any = process.env.METRICS_RANGES;
let url: string = 'http://192.168.2.39:9999/api/ranges/9999';
let options: any = {
headers: { 'Content-Type': 'application/json' }
};
@ -365,7 +273,7 @@ export class ZvksmetricsService {
async saveRanges(inputRanges: string): Promise<any> {
let ret: any;
let filePath: any = process.env.RANGES_CONFIG;
let filePath = './src/zvksmetrics/conf/ranges.json';
// console.log(inputRanges);
let inp: string = JSON.stringify(inputRanges);
try {
@ -379,24 +287,8 @@ export class ZvksmetricsService {
return ret;
}
async saveFormulas(inputFormulas: string): Promise<any> {
let ret: any;
let filePath: any = process.env.FORMULAS_CONFIG;
// console.log(inputRanges);
let inp: string = JSON.stringify(inputFormulas);
try {
await writeFile(filePath, inp);
ret = "200 OK";
}
catch {
ret = "Error write file";
console.log(ret);
}
return ret;
}
async setComplexMetrics(@Body() complexData: any = null): Promise<MetricsCalculation[]> {
let url: any = process.env.COMPLEX_METRICS;
async setComplexMetrics(@Body() complexData: any = null): Promise<ComplexMetricsCalculation[]> {
let url: string = 'http://192.168.2.39:9999/api/complex/5555';
let options: any = {
headers: { 'Content-Type': 'application/json' }
};
@ -410,9 +302,9 @@ export class ZvksmetricsService {
return complexData;
}
async showRangesOptions(filePath: any): Promise<JSON> {
async showRangesOptions(filePath: string): Promise<JSON> {
let content: JSON = JSON.parse('{"name":"name"}');
filePath = process.env.RANGES_CONFIG;
filePath = './src/zvksmetrics/conf/ranges.json';
try {
content = JSON.parse(await readFile(filePath, { encoding: 'utf8' }));
}
@ -423,24 +315,9 @@ export class ZvksmetricsService {
return content;
}
async setIntegrationMetrics(@Body() integrationData: any = null): Promise<MetricsCalculation[]> {
let url: any = process.env.INTEGRATION_METRICS;
let options: any = {
headers: { 'Content-Type': 'application/json' }
};
await axios.options(url, options).then((response) => {
integrationData = response.data;
}).catch((error) => {
integrationData = error;
});
// console.log(rangesData);
return integrationData;
}
async showComplexMetricsConfig(filePath: any): Promise<JSON> {
async showComplexMetricsConfig(filePath: string): Promise<JSON> {
let content: JSON = JSON.parse('{"name":"name"}');
filePath = process.env.COMPLEX_CONFIG;
filePath = './src/zvksmetrics/conf/complex.json';
try {
content = JSON.parse(await readFile(filePath, { encoding: 'utf8' }));
}
@ -451,32 +328,5 @@ export class ZvksmetricsService {
return content;
}
async showIntegrationMetricsConfig(filePath: any): Promise<JSON> {
let content: JSON = JSON.parse('{"name":"name"}');
filePath = process.env.INTEGRATION_CONFIG;
try {
content = JSON.parse(await readFile(filePath, { encoding: 'utf8' }));
}
catch {
console.log('Error read file');
}
return content;
}
async showFormulas(filePath: any): Promise<JSON> {
let content: JSON = JSON.parse('{"name":"name"}');
filePath = process.env.FORMULAS_CONFIG;
try {
content = JSON.parse(await readFile(filePath, { encoding: 'utf8' }));
}
catch {
console.log('Error read file');
}
return content;
}
};