Compare commits
No commits in common. "1a622c140db9434c651feee51ca54304d0296ad3" and "e973ae50da7d9658b888ac03054f6e453635ca34" have entirely different histories.
1a622c140d
...
e973ae50da
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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,15 +132,11 @@ 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()));';
|
||||
|
|
@ -132,7 +146,6 @@ export class ClickhouseService {
|
|||
// for (let query of insertQuery) {
|
||||
try{
|
||||
let retRaw = await connectionData.query(insertRawQuery).toPromise();
|
||||
console.log(retRaw);
|
||||
}
|
||||
catch{
|
||||
console.log(insertRawQuery);
|
||||
|
|
@ -153,15 +166,9 @@ export class ClickhouseService {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
catch {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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);
|
||||
|
|
@ -173,9 +180,5 @@ export class ClickhouseService {
|
|||
// console.log(retEvent);
|
||||
return 1;
|
||||
}
|
||||
catch {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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]"
|
||||
}
|
||||
]
|
||||
|
|
@ -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]))"
|
||||
}
|
||||
]
|
||||
|
|
@ -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
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
@ -170,10 +157,10 @@ 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]) {
|
||||
// if(!arr[i]){
|
||||
// console.log(arr[i], temp, device);
|
||||
arr[i] = 0;
|
||||
}
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue