Variables
parent
9b18bf46a6
commit
630f4f9658
|
|
@ -12,5 +12,4 @@ RUN npm run build
|
|||
|
||||
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"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nestjs/common": "^11.0.1",
|
||||
"@nestjs/core": "^11.0.1",
|
||||
"@nestjs/platform-express": "^11.0.1",
|
||||
"@nestjs/common": "^11.1.3",
|
||||
"@nestjs/config": "^4.0.2",
|
||||
"@nestjs/core": "^11.1.3",
|
||||
"@nestjs/platform-express": "^11.1.3",
|
||||
"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",
|
||||
"mqtt": "^5.10.4",
|
||||
"mqtt": "^5.13.1",
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"rxjs": "^7.8.2",
|
||||
"source-map-resolve": "0.6.0",
|
||||
"source-map-url": "0.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/eslintrc": "^3.2.0",
|
||||
"@eslint/js": "^9.18.0",
|
||||
"@nestjs/cli": "^11.0.0",
|
||||
"@nestjs/schematics": "^11.0.0",
|
||||
"@nestjs/testing": "^11.0.1",
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@eslint/js": "^9.29.0",
|
||||
"@nestjs/cli": "^11.0.7",
|
||||
"@nestjs/schematics": "^11.0.5",
|
||||
"@nestjs/testing": "^11.1.3",
|
||||
"@swc/cli": "^0.6.0",
|
||||
"@swc/core": "^1.10.7",
|
||||
"@types/express": "^5.0.0",
|
||||
"@swc/core": "^1.12.6",
|
||||
"@types/express": "^5.0.3",
|
||||
"@types/jest": "^29.5.14",
|
||||
"@types/node": "^22.10.7",
|
||||
"@types/supertest": "^6.0.2",
|
||||
"eslint": "^9.18.0",
|
||||
"eslint-config-prettier": "^10.0.1",
|
||||
"eslint-plugin-prettier": "^5.2.2",
|
||||
"globals": "^16.0.0",
|
||||
"@types/node": "^22.15.33",
|
||||
"@types/supertest": "^6.0.3",
|
||||
"eslint": "^9.29.0",
|
||||
"eslint-config-prettier": "^10.1.5",
|
||||
"eslint-plugin-prettier": "^5.5.0",
|
||||
"globals": "^16.2.0",
|
||||
"jest": "^29.7.0",
|
||||
"prettier": "^3.4.2",
|
||||
"prettier": "^3.6.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"supertest": "^7.0.0",
|
||||
"ts-jest": "^29.2.5",
|
||||
"supertest": "^7.1.1",
|
||||
"ts-jest": "^29.4.0",
|
||||
"ts-loader": "^9.5.2",
|
||||
"ts-node": "^10.9.2",
|
||||
"tsconfig-paths": "^4.2.0",
|
||||
"typescript": "^5.7.3",
|
||||
"typescript-eslint": "^8.20.0"
|
||||
"typescript": "^5.8.3",
|
||||
"typescript-eslint": "^8.35.0"
|
||||
},
|
||||
"jest": {
|
||||
"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 { GruberModule } from './gruber/gruber.module';
|
||||
import { DatabaseModule } from './database/database.module';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
|
||||
@Module({
|
||||
imports: [ZvksmetricsModule, GruberModule, DatabaseModule],
|
||||
imports: [ZvksmetricsModule, GruberModule, DatabaseModule, ConfigModule.forRoot({
|
||||
isGlobal: true,
|
||||
envFilePath: './.env',
|
||||
}),],
|
||||
controllers: [AppController],
|
||||
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 { 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 {}
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
await this.metricsService.useStatusModel(inputMetrics);
|
||||
// let a = await this.metricsService.showStatus();
|
||||
// console.log(inputMetrics);
|
||||
console.log(inputMetrics);
|
||||
return sum.value;
|
||||
}
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ export class ZvksmetricsController {
|
|||
return ret;
|
||||
}
|
||||
|
||||
//Заглушка для будующей API под граничные значения
|
||||
//Заглушка для будующей API под граничные значения
|
||||
@Post('ranges/:code')
|
||||
async setRanges(@Body() inputRanges: any, @Param('code', ParseIntPipe) code: number): Promise<string> {
|
||||
let ret: string = "Controller Error";
|
||||
|
|
@ -48,8 +48,9 @@ export class ZvksmetricsController {
|
|||
|
||||
@Post('input')
|
||||
async getPostMessage(@Body() inputMetrics: any): Promise<string> {
|
||||
// console.log(inputMetrics);
|
||||
console.log(inputMetrics);
|
||||
let out: any = await this.metricsService.useStatusModel(inputMetrics);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,10 @@ import axios, { Axios, AxiosResponse } from 'axios';
|
|||
import { readFile, writeFile } from 'node:fs/promises';
|
||||
import { response } from 'express';
|
||||
import { json } from 'node:stream/consumers';
|
||||
import math, { create, all, evaluate, number, random, complex, string, 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()
|
||||
|
|
@ -75,7 +78,12 @@ export class ZvksmetricsService {
|
|||
|
||||
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));
|
||||
|
|
@ -118,16 +126,16 @@ export class ZvksmetricsService {
|
|||
let length: number = complexCalc.length;
|
||||
let metrics: MetricK2[] = complexData.metrics;
|
||||
|
||||
let devices: number [] = [18,19];
|
||||
let devices: number[] = [18, 19];
|
||||
let device_len: number = devices.length;
|
||||
|
||||
// const jsonData = require('../conf/devices.json');
|
||||
// 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++) {
|
||||
let metr = {"source": ""};
|
||||
let metr = { "source": "" };
|
||||
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();
|
||||
complexMetric.id = complexCalc[i].id;
|
||||
complexMetric.name = complexCalc[i].name;
|
||||
|
|
@ -177,7 +185,7 @@ export class ZvksmetricsService {
|
|||
}
|
||||
|
||||
// console.log(obj.soure);
|
||||
try{
|
||||
try {
|
||||
let result: number = evaluate(formula, val);
|
||||
// console.log(result);
|
||||
return result;
|
||||
|
|
@ -251,11 +259,11 @@ export class ZvksmetricsService {
|
|||
let filePath = './src/zvksmetrics/conf/ranges.json';
|
||||
console.log(inputRanges);
|
||||
let inp: string = JSON.stringify(inputRanges);
|
||||
try{
|
||||
try {
|
||||
await writeFile(filePath, inp);
|
||||
ret = "200 OK";
|
||||
}
|
||||
catch{
|
||||
catch {
|
||||
ret = "Error write file";
|
||||
console.log(ret);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue