Variables
parent
9b18bf46a6
commit
630f4f9658
|
|
@ -12,5 +12,4 @@ RUN npm run build
|
||||||
|
|
||||||
EXPOSE 9999
|
EXPOSE 9999
|
||||||
|
|
||||||
CMD ["npm", "run", "start:dev"]
|
ENTRYPOINT ["node", "dist/main"]
|
||||||
|
|
||||||
|
|
|
||||||
51
package.json
51
package.json
|
|
@ -20,44 +20,47 @@
|
||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nestjs/common": "^11.0.1",
|
"@nestjs/common": "^11.1.3",
|
||||||
"@nestjs/core": "^11.0.1",
|
"@nestjs/config": "^4.0.2",
|
||||||
"@nestjs/platform-express": "^11.0.1",
|
"@nestjs/core": "^11.1.3",
|
||||||
|
"@nestjs/platform-express": "^11.1.3",
|
||||||
"axios": "1.8.4",
|
"axios": "1.8.4",
|
||||||
"mathjs": "^14.4.0",
|
"class-transformer": "^0.5.1",
|
||||||
|
"clickhouse": "^2.6.0",
|
||||||
|
"mathjs": "^14.5.2",
|
||||||
"module": "^1.2.5",
|
"module": "^1.2.5",
|
||||||
"mqtt": "^5.10.4",
|
"mqtt": "^5.13.1",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"rxjs": "^7.8.1",
|
"rxjs": "^7.8.2",
|
||||||
"source-map-resolve": "0.6.0",
|
"source-map-resolve": "0.6.0",
|
||||||
"source-map-url": "0.4.1"
|
"source-map-url": "0.4.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "^3.2.0",
|
"@eslint/eslintrc": "^3.3.1",
|
||||||
"@eslint/js": "^9.18.0",
|
"@eslint/js": "^9.29.0",
|
||||||
"@nestjs/cli": "^11.0.0",
|
"@nestjs/cli": "^11.0.7",
|
||||||
"@nestjs/schematics": "^11.0.0",
|
"@nestjs/schematics": "^11.0.5",
|
||||||
"@nestjs/testing": "^11.0.1",
|
"@nestjs/testing": "^11.1.3",
|
||||||
"@swc/cli": "^0.6.0",
|
"@swc/cli": "^0.6.0",
|
||||||
"@swc/core": "^1.10.7",
|
"@swc/core": "^1.12.6",
|
||||||
"@types/express": "^5.0.0",
|
"@types/express": "^5.0.3",
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/node": "^22.10.7",
|
"@types/node": "^22.15.33",
|
||||||
"@types/supertest": "^6.0.2",
|
"@types/supertest": "^6.0.3",
|
||||||
"eslint": "^9.18.0",
|
"eslint": "^9.29.0",
|
||||||
"eslint-config-prettier": "^10.0.1",
|
"eslint-config-prettier": "^10.1.5",
|
||||||
"eslint-plugin-prettier": "^5.2.2",
|
"eslint-plugin-prettier": "^5.5.0",
|
||||||
"globals": "^16.0.0",
|
"globals": "^16.2.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"prettier": "^3.4.2",
|
"prettier": "^3.6.0",
|
||||||
"source-map-support": "^0.5.21",
|
"source-map-support": "^0.5.21",
|
||||||
"supertest": "^7.0.0",
|
"supertest": "^7.1.1",
|
||||||
"ts-jest": "^29.2.5",
|
"ts-jest": "^29.4.0",
|
||||||
"ts-loader": "^9.5.2",
|
"ts-loader": "^9.5.2",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
"tsconfig-paths": "^4.2.0",
|
"tsconfig-paths": "^4.2.0",
|
||||||
"typescript": "^5.7.3",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.20.0"
|
"typescript-eslint": "^8.35.0"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"moduleFileExtensions": [
|
"moduleFileExtensions": [
|
||||||
|
|
|
||||||
2611
pnpm-lock.yaml
2611
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,2 @@
|
||||||
|
onlyBuiltDependencies:
|
||||||
|
- '@swc/core'
|
||||||
|
|
@ -4,9 +4,13 @@ import { AppService } from './app.service';
|
||||||
import { ZvksmetricsModule } from './zvksmetrics/zvksmetrics.module';
|
import { ZvksmetricsModule } from './zvksmetrics/zvksmetrics.module';
|
||||||
import { GruberModule } from './gruber/gruber.module';
|
import { GruberModule } from './gruber/gruber.module';
|
||||||
import { DatabaseModule } from './database/database.module';
|
import { DatabaseModule } from './database/database.module';
|
||||||
|
import { ConfigModule } from '@nestjs/config';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [ZvksmetricsModule, GruberModule, DatabaseModule],
|
imports: [ZvksmetricsModule, GruberModule, DatabaseModule, ConfigModule.forRoot({
|
||||||
|
isGlobal: true,
|
||||||
|
envFilePath: './.env',
|
||||||
|
}),],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
providers: [AppService],
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { ClickhouseService } from './clickhouse.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
providers: [ClickhouseService]
|
||||||
|
})
|
||||||
|
export class ClickhouseModule {}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { ClickhouseService } from './clickhouse.service';
|
||||||
|
|
||||||
|
describe('ClickhouseService', () => {
|
||||||
|
let service: ClickhouseService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [ClickhouseService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<ClickhouseService>(ClickhouseService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { ClickHouse } from 'clickhouse';
|
||||||
|
import { isInternalThread } from 'node:worker_threads';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ClickhouseService {
|
||||||
|
async ClickHouseConnect(parameterBody: any): Promise<any> {
|
||||||
|
let variable = new ClickHouse({
|
||||||
|
// url: 'http://192.168.2.37',
|
||||||
|
// port: 8123,
|
||||||
|
url: DATABASE_NAME,
|
||||||
|
PORT: DATABASE_PORT,
|
||||||
|
debug: false,
|
||||||
|
basicAuth: {
|
||||||
|
username: 'root',
|
||||||
|
password: 'dbss',
|
||||||
|
},
|
||||||
|
isUseGzip: false,
|
||||||
|
trimQuery: false,
|
||||||
|
usePost: false,
|
||||||
|
format: "json", // "json" || "csv" || "tsv"
|
||||||
|
raw: false,
|
||||||
|
config: {
|
||||||
|
session_id: 'session_id if neeed',
|
||||||
|
session_timeout: 60,
|
||||||
|
output_format_json_quote_64bit_integers: 0,
|
||||||
|
enable_http_compression: 0,
|
||||||
|
database: 'zvks',
|
||||||
|
},
|
||||||
|
|
||||||
|
// This object merge with request params (see request lib docs)
|
||||||
|
// reqParams: {
|
||||||
|
// ...
|
||||||
|
// },
|
||||||
|
});
|
||||||
|
|
||||||
|
// 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 (
|
||||||
|
EventTimestamp DateTime64,
|
||||||
|
ParameterBody String,
|
||||||
|
CreateDate DateTime64,
|
||||||
|
) ENGINE = MergeTree()
|
||||||
|
PRIMARY KEY (EventTimestamp)`
|
||||||
|
];
|
||||||
|
|
||||||
|
let insertQuery = '\nINSERT INTO raw_parameters VALUES(toDateTime(now()), \'{{parameterBody}}\', toDateTime(now()));';
|
||||||
|
insertQuery = insertQuery.replace('{{parameterBody}}', parameterBody);
|
||||||
|
|
||||||
|
console.log(insertQuery);
|
||||||
|
// console.log(insertQuery);
|
||||||
|
queries.push(insertQuery);
|
||||||
|
|
||||||
|
for (let query of queries) {
|
||||||
|
let r = await variable.query(query).toPromise();
|
||||||
|
// console.log(query, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(variable);
|
||||||
|
return variable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,10 @@
|
||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
|
import { DatabaseService } from './database.service';
|
||||||
|
import { ClickhouseModule } from './clickhouse/clickhouse.module';
|
||||||
|
import { PostgresqlModule } from './postgresql/postgresql.module';
|
||||||
|
|
||||||
@Module({})
|
@Module({
|
||||||
|
providers: [DatabaseService],
|
||||||
|
imports: [ClickhouseModule, PostgresqlModule]
|
||||||
|
})
|
||||||
export class DatabaseModule {}
|
export class DatabaseModule {}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { DatabaseService } from './database.service';
|
||||||
|
|
||||||
|
describe('DatabaseService', () => {
|
||||||
|
let service: DatabaseService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [DatabaseService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<DatabaseService>(DatabaseService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class DatabaseService {}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { PostgresqlService } from './postgresql.service';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
providers: [PostgresqlService]
|
||||||
|
})
|
||||||
|
export class PostgresqlModule {}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { PostgresqlService } from './postgresql.service';
|
||||||
|
|
||||||
|
describe('PostgresqlService', () => {
|
||||||
|
let service: PostgresqlService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [PostgresqlService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<PostgresqlService>(PostgresqlService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class PostgresqlService {}
|
||||||
|
|
@ -12,7 +12,7 @@ export class ZvksmetricsController {
|
||||||
let sum: any = { value: (a + b) / 4 * b + a };
|
let sum: any = { value: (a + b) / 4 * b + a };
|
||||||
await this.metricsService.useStatusModel(inputMetrics);
|
await this.metricsService.useStatusModel(inputMetrics);
|
||||||
// let a = await this.metricsService.showStatus();
|
// let a = await this.metricsService.showStatus();
|
||||||
// console.log(inputMetrics);
|
console.log(inputMetrics);
|
||||||
return sum.value;
|
return sum.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ export class ZvksmetricsController {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Заглушка для будующей API под граничные значения
|
//Заглушка для будующей API под граничные значения
|
||||||
@Post('ranges/:code')
|
@Post('ranges/:code')
|
||||||
async setRanges(@Body() inputRanges: any, @Param('code', ParseIntPipe) code: number): Promise<string> {
|
async setRanges(@Body() inputRanges: any, @Param('code', ParseIntPipe) code: number): Promise<string> {
|
||||||
let ret: string = "Controller Error";
|
let ret: string = "Controller Error";
|
||||||
|
|
@ -48,8 +48,9 @@ export class ZvksmetricsController {
|
||||||
|
|
||||||
@Post('input')
|
@Post('input')
|
||||||
async getPostMessage(@Body() inputMetrics: any): Promise<string> {
|
async getPostMessage(@Body() inputMetrics: any): Promise<string> {
|
||||||
// console.log(inputMetrics);
|
console.log(inputMetrics);
|
||||||
let out: any = await this.metricsService.useStatusModel(inputMetrics);
|
let out: any = await this.metricsService.useStatusModel(inputMetrics);
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,10 @@ import axios, { Axios, AxiosResponse } from 'axios';
|
||||||
import { readFile, writeFile } from 'node:fs/promises';
|
import { readFile, writeFile } from 'node:fs/promises';
|
||||||
import { response } from 'express';
|
import { response } from 'express';
|
||||||
import { json } from 'node:stream/consumers';
|
import { json } from 'node:stream/consumers';
|
||||||
import math, { create, all, evaluate, number, random, complex, string, SQRT1_2 } from 'mathjs'
|
import math, { create, all, evaluate, number, random, complex, string, SQRT1_2 } from 'mathjs';
|
||||||
|
import { ClickhouseService } from 'src/database/clickhouse/clickhouse.service';
|
||||||
|
import { classToPlain } from 'class-transformer';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
|
|
@ -75,7 +78,12 @@ export class ZvksmetricsService {
|
||||||
|
|
||||||
let intermediate = await this.getComplexMetricsValues(inp, prev, complex, model, scope);
|
let intermediate = await this.getComplexMetricsValues(inp, prev, complex, model, scope);
|
||||||
|
|
||||||
console.log(intermediate);
|
// console.log(intermediate);
|
||||||
|
let ctp: any = classToPlain(intermediate);
|
||||||
|
let parameterBody: string = JSON.stringify(ctp);
|
||||||
|
// console.log(parameterBody);
|
||||||
|
let abc = new ClickhouseService();
|
||||||
|
abc.ClickHouseConnect(parameterBody);
|
||||||
|
|
||||||
|
|
||||||
// const val = JSON.parse(JSON.stringify(model[0].values));
|
// const val = JSON.parse(JSON.stringify(model[0].values));
|
||||||
|
|
@ -118,16 +126,16 @@ export class ZvksmetricsService {
|
||||||
let length: number = complexCalc.length;
|
let length: number = complexCalc.length;
|
||||||
let metrics: MetricK2[] = complexData.metrics;
|
let metrics: MetricK2[] = complexData.metrics;
|
||||||
|
|
||||||
let devices: number [] = [18,19];
|
let devices: number[] = [18, 19];
|
||||||
let device_len: number = devices.length;
|
let device_len: number = devices.length;
|
||||||
|
|
||||||
// const jsonData = require('../conf/devices.json');
|
// const jsonData = require('../conf/devices.json');
|
||||||
// console.log(jsonData);
|
// console.log(jsonData);
|
||||||
for (let d = 0; d<device_len; d++){
|
for (let d = 0; d < device_len; d++) {
|
||||||
for (let i = 0; i < length; i++) {
|
for (let i = 0; i < length; i++) {
|
||||||
let metr = {"source": ""};
|
let metr = { "source": "" };
|
||||||
let val = await this.setComplexMetricValue(complexCalc[i].values, complexCalc[i].formula, inputData.metrics, prevousData.metrics, devices[d], metr);
|
let val = await this.setComplexMetricValue(complexCalc[i].values, complexCalc[i].formula, inputData.metrics, prevousData.metrics, devices[d], metr);
|
||||||
if(val !=null || val != undefined){
|
if (val != null || val != undefined) {
|
||||||
let complexMetric = new MetricK2();
|
let complexMetric = new MetricK2();
|
||||||
complexMetric.id = complexCalc[i].id;
|
complexMetric.id = complexCalc[i].id;
|
||||||
complexMetric.name = complexCalc[i].name;
|
complexMetric.name = complexCalc[i].name;
|
||||||
|
|
@ -177,7 +185,7 @@ export class ZvksmetricsService {
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log(obj.soure);
|
// console.log(obj.soure);
|
||||||
try{
|
try {
|
||||||
let result: number = evaluate(formula, val);
|
let result: number = evaluate(formula, val);
|
||||||
// console.log(result);
|
// console.log(result);
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -251,11 +259,11 @@ export class ZvksmetricsService {
|
||||||
let filePath = './src/zvksmetrics/conf/ranges.json';
|
let filePath = './src/zvksmetrics/conf/ranges.json';
|
||||||
console.log(inputRanges);
|
console.log(inputRanges);
|
||||||
let inp: string = JSON.stringify(inputRanges);
|
let inp: string = JSON.stringify(inputRanges);
|
||||||
try{
|
try {
|
||||||
await writeFile(filePath, inp);
|
await writeFile(filePath, inp);
|
||||||
ret = "200 OK";
|
ret = "200 OK";
|
||||||
}
|
}
|
||||||
catch{
|
catch {
|
||||||
ret = "Error write file";
|
ret = "Error write file";
|
||||||
console.log(ret);
|
console.log(ret);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue