Skip to content

Commit

Permalink
chore: refactor oibus engine service, controller and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
burgerni10 committed Sep 22, 2024
1 parent d03996b commit 32f6b1f
Show file tree
Hide file tree
Showing 91 changed files with 3,751 additions and 4,407 deletions.
5 changes: 1 addition & 4 deletions backend/src/engine/oibus-engine.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ import fs from 'node:fs/promises';
import path from 'node:path';
import { ScanModeDTO } from '../../../shared/model/scan-mode.model';
import { filesExists } from '../service/utils';
import HomeMetricsServiceMock from '../tests/__mocks__/service/home-metrics-service.mock';
import HomeMetricsService from '../service/home-metrics.service';
import { OIBusTimeValue } from '../../../shared/model/engine.model';

jest.mock('../south/south-mqtt/south-mqtt');
Expand All @@ -34,7 +32,6 @@ const anotherLogger: pino.Logger = new PinoLogger();

const southService: SouthService = new SouthServiceMock();
const northService: NorthService = new NorthServiceMock();
const homeMetrics: HomeMetricsService = new HomeMetricsServiceMock();
const encryptionService: EncryptionService = new EncryptionServiceMock('', '');

const nowDateString = '2020-02-02T02:02:02.222Z';
Expand Down Expand Up @@ -190,7 +187,7 @@ describe('OIBusEngine', () => {
(southService.createSouth as jest.Mock).mockReturnValue(createdSouth);
(northService.createNorth as jest.Mock).mockReturnValue(createdNorth);

engine = new OIBusEngine(encryptionService, northService, southService, homeMetrics, logger);
engine = new OIBusEngine(encryptionService, northService, southService, logger);
});

it('it should start', async () => {
Expand Down
17 changes: 5 additions & 12 deletions backend/src/engine/oibus-engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import { NorthConnectorDTO } from '../../../shared/model/north-connector.model';
import { Instant } from '../../../shared/model/types';
import { PassThrough } from 'node:stream';
import { ScanModeDTO } from '../../../shared/model/scan-mode.model';
import HomeMetricsService from '../service/home-metrics.service';
import { OIBusContent } from '../../../shared/model/engine.model';

const CACHE_FOLDER = './cache/data-stream';
Expand All @@ -26,13 +25,7 @@ export default class OIBusEngine extends BaseEngine {
private northConnectors: Map<string, NorthConnector> = new Map<string, NorthConnector>();
private southConnectors: Map<string, SouthConnector> = new Map<string, SouthConnector>();

constructor(
encryptionService: EncryptionService,
northService: NorthService,
southService: SouthService,
private readonly homeMetricsService: HomeMetricsService,
logger: pino.Logger
) {
constructor(encryptionService: EncryptionService, northService: NorthService, southService: SouthService, logger: pino.Logger) {
super(encryptionService, northService, southService, logger, CACHE_FOLDER);
}

Expand Down Expand Up @@ -131,7 +124,7 @@ export default class OIBusEngine extends BaseEngine {
this.logger.child({ scopeType: 'south', scopeId: settings.id, scopeName: settings.name })
);
this.southConnectors.set(settings.id, south);
this.homeMetricsService.addSouth(south, south.settings.id);
// this.homeMetricsService.addSouth(south, south.settings.id);
}

async startSouth(southId: string): Promise<void> {
Expand Down Expand Up @@ -164,7 +157,7 @@ export default class OIBusEngine extends BaseEngine {
this.logger.child({ scopeType: 'north', scopeId: settings.id, scopeName: settings.name })
);
this.northConnectors.set(settings.id, north);
this.homeMetricsService.addNorth(north, north.settings.id);
// this.homeMetricsService.addNorth(north, north.settings.id);
}

async startNorth(northId: string): Promise<void> {
Expand Down Expand Up @@ -196,7 +189,7 @@ export default class OIBusEngine extends BaseEngine {
*/
async deleteSouth(southId: string, name: string): Promise<void> {
await this.stopSouth(southId);
this.homeMetricsService.removeSouth(southId);
// this.homeMetricsService.removeSouth(southId);
this.southConnectors.delete(southId);
const baseFolder = path.resolve(this.cacheFolder, `south-${southId}`);

Expand All @@ -218,7 +211,7 @@ export default class OIBusEngine extends BaseEngine {
*/
async deleteNorth(northId: string, name: string): Promise<void> {
await this.stopNorth(northId);
this.homeMetricsService.removeNorth(northId);
// this.homeMetricsService.removeNorth(northId);
this.northConnectors.delete(northId);

const baseFolder = path.resolve(this.cacheFolder, `north-${northId}`);
Expand Down
121 changes: 41 additions & 80 deletions backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,19 @@ import EncryptionService from './service/encryption.service';
import { createFolder, getCommandLineArguments, getOIBusInfo } from './service/utils';
import RepositoryService from './service/repository.service';
import ReloadService from './service/reload.service';
import EngineMetricsService from './service/engine-metrics.service';
import NorthService from './service/north.service';
import SouthService from './service/south.service';
import OIBusEngine from './engine/oibus-engine';
import HistoryQueryEngine from './engine/history-query-engine';
import HistoryQueryService from './service/history-query.service';
import OIBusService from './service/oibus.service';
import { migrateCrypto, migrateEntities, migrateLogsAndMetrics, migrateSouthCache } from './db/migration-service';
import HomeMetricsService from './service/home-metrics.service';
import OianalyticsCommandService from './service/oia/oianalytics-command.service';
import OIAnalyticsCommandService from './service/oia/oianalytics-command.service';
import OianalyticsRegistrationService from './service/oia/oianalytics-registration.service';
import ProxyServer from './web-server/proxy-server';
import ConnectionService from './service/connection.service';
import OIAnalyticsMessageService from './service/oia/oianalytics-message.service';
import OIAnalyticsConfigurationClient from './service/oia/oianalytics-configuration.client';
import SouthConnectorConfigService from './service/south-connector-config.service';
import JoiValidator from './web-server/controllers/validators/joi.validator';
import OIAnalyticsCommandClient from './service/oia/oianalytics-command.client';
import ScanModeService from './service/scan-mode.service';
import NorthConnectorConfigService from './service/north-connector-config.service';
import SubscriptionService from './service/subscription.service';
Expand Down Expand Up @@ -88,28 +83,14 @@ const LOG_DB_NAME = 'logs.db';

await createFolder(LOG_FOLDER_NAME);
const loggerService = new LoggerService(encryptionService, path.resolve(LOG_FOLDER_NAME));
await loggerService.start(
oibusSettings.id,
oibusSettings.name,
oibusSettings.logParameters,
repositoryService.oianalyticsRegistrationRepository.get()
);
await loggerService.start(oibusSettings, repositoryService.oianalyticsRegistrationRepository.get()!);

const connectionService = new ConnectionService(loggerService.logger!);
const northService = new NorthService(encryptionService, repositoryService);
const southService = new SouthService(encryptionService, repositoryService, connectionService);
const historyQueryService = new HistoryQueryService(repositoryService);

const engineMetricsService = new EngineMetricsService(loggerService.logger!, oibusSettings.id, repositoryService.engineMetricsRepository);
const homeMetricsService = new HomeMetricsService(
oibusSettings.id,
engineMetricsService,
repositoryService.engineMetricsRepository,
repositoryService.northMetricsRepository,
repositoryService.southMetricsRepository
);

const engine = new OIBusEngine(encryptionService, northService, southService, homeMetricsService, loggerService.logger!);
const engine = new OIBusEngine(encryptionService, northService, southService, loggerService.logger!);
const historyQueryEngine = new HistoryQueryEngine(
encryptionService,
northService,
Expand All @@ -118,73 +99,55 @@ const LOG_DB_NAME = 'logs.db';
loggerService.logger!
);

const configurationClient = new OIAnalyticsConfigurationClient(
repositoryService.oianalyticsRegistrationRepository,
encryptionService,
loggerService.logger!
);
const oIAnalyticsMessageService = new OIAnalyticsMessageService(repositoryService, encryptionService, loggerService.logger!);

const commandClient = new OIAnalyticsCommandClient(
const oIBusService = new OIBusService(
new JoiValidator(),
repositoryService.engineRepository,
repositoryService.engineMetricsRepository,
repositoryService.ipFilterRepository,
repositoryService.oianalyticsRegistrationRepository,
encryptionService,
loggerService.logger!
loggerService,
oIAnalyticsMessageService,
engine,
historyQueryEngine
);

const oianalyticsMessageService = new OIAnalyticsMessageService(repositoryService, configurationClient, loggerService.logger!);
oianalyticsMessageService.start();

const oibusService = new OIBusService(engine, historyQueryEngine);

await engine.start();
await historyQueryEngine.start();

const proxyServer = new ProxyServer(loggerService.logger!);
const ipFilters = [
'127.0.0.1',
'::1',
'::ffff:127.0.0.1',
...repositoryService.ipFilterRepository.findAll().map(filter => filter.address)
];
proxyServer.refreshIpFilters(ipFilters);

if (oibusSettings.proxyEnabled) {
await proxyServer.start(oibusSettings.proxyPort!);
}
await oIBusService.startOIBus();

const reloadService = new ReloadService(
loggerService,
repositoryService,
engineMetricsService,
homeMetricsService,
northService,
southService,
engine,
historyQueryEngine,
oibusService,
oianalyticsMessageService,
proxyServer
oIBusService,
oIAnalyticsMessageService,
oIBusService.getProxyServer()
);

const scanModeService = new ScanModeService(
new JoiValidator(),
repositoryService.scanModeRepository,
repositoryService.southCacheRepository,
oianalyticsMessageService,
oIAnalyticsMessageService,
engine
);
const subscriptionService = new SubscriptionService(
new JoiValidator(),
repositoryService.subscriptionRepository,
repositoryService.southConnectorRepository,
repositoryService.northConnectorRepository,
oianalyticsMessageService,
oIAnalyticsMessageService,
engine
);
const ipFilterService = new IPFilterService(
new JoiValidator(),
repositoryService.ipFilterRepository,
oianalyticsMessageService,
proxyServer
oIAnalyticsMessageService,
oIBusService.getProxyServer()
);

const southConnectorConfigService = new SouthConnectorConfigService(
Expand All @@ -194,7 +157,7 @@ const LOG_DB_NAME = 'logs.db';
repositoryService.scanModeRepository,
southService,
reloadService,
oianalyticsMessageService,
oIAnalyticsMessageService,
encryptionService
);

Expand All @@ -205,47 +168,46 @@ const LOG_DB_NAME = 'logs.db';
repositoryService.scanModeRepository,
northService,
reloadService,
oianalyticsMessageService,
oIAnalyticsMessageService,
encryptionService
);

const commandService = new OianalyticsCommandService(
repositoryService,
reloadService,
const oIAnalyticsCommandService = new OIAnalyticsCommandService(
repositoryService.oianalyticsCommandRepository,
repositoryService.oianalyticsRegistrationRepository,
encryptionService,
oianalyticsMessageService,
oIBusService,
scanModeService,
southConnectorConfigService,
northConnectorConfigService,
commandClient,
loggerService.logger!,
binaryFolder
);
commandService.start();
oIAnalyticsCommandService.start();
oIAnalyticsMessageService.start(); // Start after command to send the full config with new version after an update

const registrationService = new OianalyticsRegistrationService(
repositoryService,
const oIAnalyticsRegistrationService = new OianalyticsRegistrationService(
new JoiValidator(),
repositoryService.oianalyticsRegistrationRepository,
repositoryService.engineRepository,
encryptionService,
commandService,
oianalyticsMessageService,
reloadService,
loggerService.logger!
);
registrationService.start();
oIAnalyticsRegistrationService.start();
const server = new WebServer(
oibusSettings.id,
oibusSettings.port,
encryptionService,
scanModeService,
subscriptionService,
ipFilterService,
oIAnalyticsRegistrationService,
oIAnalyticsCommandService,
oIBusService,
reloadService,
registrationService,
repositoryService,
southService,
northService,
oibusService,
engineMetricsService,
southConnectorConfigService,
northConnectorConfigService,
loggerService.createChildLogger('web-server')
Expand All @@ -258,12 +220,11 @@ const LOG_DB_NAME = 'logs.db';
if (stopping) return;
console.info('SIGINT (Ctrl+C) received. Stopping everything.');
stopping = true;
await oibusService.stopOIBus();
await commandService.stop();
await oianalyticsMessageService.stop();
await proxyServer.stop();
await oIBusService.stopOIBus();
await oIAnalyticsCommandService.stop();
await oIAnalyticsMessageService.stop();
await server.stop();
registrationService.stop();
oIAnalyticsRegistrationService.stop();
loggerService.stop();
console.info('OIBus stopped');
stopping = false;
Expand Down
35 changes: 35 additions & 0 deletions backend/src/model/engine.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { BaseEntity } from './types';
import { LogLevel } from '../../../shared/model/engine.model';

export interface EngineSettings extends BaseEntity {
name: string;
port: number;
version: string;
proxyEnabled: boolean;
proxyPort: number | null;
logParameters: {
console: {
level: LogLevel;
};
file: {
level: LogLevel;
maxFileSize: number;
numberOfFiles: number;
};
database: {
level: LogLevel;
maxNumberOfLogs: number;
};
loki: {
level: LogLevel;
interval: number;
address: string;
username: string;
password: string;
};
oia: {
level: LogLevel;
interval: number;
};
};
}
14 changes: 0 additions & 14 deletions backend/src/model/ip-filter.model.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,6 @@
import { BaseEntity } from './types';
import { IPFilterDTO } from '../../../shared/model/ip-filter.model';

export interface IPFilter extends BaseEntity {
address: string;
description: string;
}

export interface IPFilterCommand {
address: string;
description: string;
}

export const toIPFilterDTO = (ipFilter: IPFilter): IPFilterDTO => {
return {
id: ipFilter.id,
address: ipFilter.address,
description: ipFilter.description
};
};
Loading

0 comments on commit 32f6b1f

Please sign in to comment.