From 60c4cbcc6c0cba6942f287a8dff76ba058e00305 Mon Sep 17 00:00:00 2001 From: DenisN Date: Wed, 16 Jul 2025 11:19:40 -0400 Subject: [PATCH] NewBaseEvents --- src/app.module.ts | 4 +++- src/database/clickhouse/clickhouse.service.ts | 20 ++++++++++++++++++ src/events/events.module.ts | 7 +++++++ src/events/events.service.spec.ts | 18 ++++++++++++++++ src/events/events.service.ts | 21 +++++++++++++++++++ src/status/status.module.ts | 7 +++++++ src/status/status.service.spec.ts | 18 ++++++++++++++++ src/status/status.service.ts | 4 ++++ src/zvksmetrics/zvksmetrics.service.ts | 5 +++++ 9 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/events/events.module.ts create mode 100644 src/events/events.service.spec.ts create mode 100644 src/events/events.service.ts create mode 100644 src/status/status.module.ts create mode 100644 src/status/status.service.spec.ts create mode 100644 src/status/status.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index b233aff..0df6db5 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -5,12 +5,14 @@ import { ZvksmetricsModule } from './zvksmetrics/zvksmetrics.module'; import { GruberModule } from './gruber/gruber.module'; import { DatabaseModule } from './database/database.module'; 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, envFilePath: './.env', - }),], + }), StatusModule, EventsModule,], controllers: [AppController], providers: [AppService], }) diff --git a/src/database/clickhouse/clickhouse.service.ts b/src/database/clickhouse/clickhouse.service.ts index 30f5f1e..79f16fd 100644 --- a/src/database/clickhouse/clickhouse.service.ts +++ b/src/database/clickhouse/clickhouse.service.ts @@ -144,7 +144,12 @@ export class ClickhouseService { 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; @@ -161,4 +166,19 @@ export class ClickhouseService { } return 1; } + + async ClickHouseAddEvents(parameterID: string, parameterName: string, parameterValue: string, parameterBody: string, previousStatus: string, currentStatus: string): Promise{ + let connectionData = await this.ClickHouseDBsCreate(); + 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; + } + } diff --git a/src/events/events.module.ts b/src/events/events.module.ts new file mode 100644 index 0000000..c47466c --- /dev/null +++ b/src/events/events.module.ts @@ -0,0 +1,7 @@ +import { Module } from '@nestjs/common'; +import { EventsService } from './events.service'; + +@Module({ + providers: [EventsService] +}) +export class EventsModule {} diff --git a/src/events/events.service.spec.ts b/src/events/events.service.spec.ts new file mode 100644 index 0000000..f26bdfe --- /dev/null +++ b/src/events/events.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EventsService } from './events.service'; + +describe('EventsService', () => { + let service: EventsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [EventsService], + }).compile(); + + service = module.get(EventsService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/events/events.service.ts b/src/events/events.service.ts new file mode 100644 index 0000000..d064c75 --- /dev/null +++ b/src/events/events.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@nestjs/common'; +import { ClickhouseService } from 'src/database/clickhouse/clickhouse.service'; +import { MetricK2 } from 'src/zvksmetrics/zvksmetrics.service'; +import { classToPlain } from 'class-transformer'; + +@Injectable() +export class EventsService { + async CompareStatus(parameter: MetricK2) : Promise { + let diff = Math.floor(Math.random() * (2)) + 1; + console.log(diff); + if(parameter.status != (parameter.status + diff) ){ + await this.RecordChangedMetricToClicHouse(parameter.id, parameter.name, parameter.value, parameter, parameter.status, parameter.status + diff); + } + return 1; + } + async RecordChangedMetricToClicHouse(parameterID: string, parameterName: string, parameterValue: number, parameterBody: MetricK2, previousStatus: number, currentStatus: number) : Promise { + let rec = new ClickhouseService(); + await rec.ClickHouseAddEvents(parameterID, parameterName, parameterValue.toString(), JSON.stringify(classToPlain(parameterBody)), previousStatus.toString(), currentStatus.toString()); + return 1; + } +} diff --git a/src/status/status.module.ts b/src/status/status.module.ts new file mode 100644 index 0000000..ce8122e --- /dev/null +++ b/src/status/status.module.ts @@ -0,0 +1,7 @@ +import { Module } from '@nestjs/common'; +import { StatusService } from './status.service'; + +@Module({ + providers: [StatusService] +}) +export class StatusModule {} diff --git a/src/status/status.service.spec.ts b/src/status/status.service.spec.ts new file mode 100644 index 0000000..9d20177 --- /dev/null +++ b/src/status/status.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { StatusService } from './status.service'; + +describe('StatusService', () => { + let service: StatusService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [StatusService], + }).compile(); + + service = module.get(StatusService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/status/status.service.ts b/src/status/status.service.ts new file mode 100644 index 0000000..aebcee1 --- /dev/null +++ b/src/status/status.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class StatusService {} diff --git a/src/zvksmetrics/zvksmetrics.service.ts b/src/zvksmetrics/zvksmetrics.service.ts index dbef4de..76c3048 100644 --- a/src/zvksmetrics/zvksmetrics.service.ts +++ b/src/zvksmetrics/zvksmetrics.service.ts @@ -5,6 +5,7 @@ import { response } from 'express'; import { json } from 'node:stream/consumers'; import math, { create, all, evaluate, number, random, complex, string, SQRT1_2 } from 'mathjs'; import { ClickhouseService } from 'src/database/clickhouse/clickhouse.service'; +import { EventsService } from 'src/events/events.service'; import { classToPlain } from 'class-transformer'; @@ -132,6 +133,8 @@ export class ZvksmetricsService { let devices: number[] = [18, 19]; let device_len: number = devices.length; + let compare = new EventsService(); + // const jsonData = require('../conf/devices.json'); // console.log(jsonData); for (let d = 0; d < device_len; d++) { @@ -150,6 +153,8 @@ export class ZvksmetricsService { complexMetric.device = devices[d]; complexMetric.source = metr.source; metrics.push(complexMetric); + + await compare.CompareStatus(complexMetric); } } }