UNPKG

@citrineos/data

Version:

The OCPP data module which includes all persistence layer implementation.

152 lines 6.71 kB
"use strict"; // Copyright (c) 2023 S44, LLC // Copyright Contributors to the CitrineOS Project // // SPDX-License-Identifier: Apache 2.0 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultSequelizeInstance = void 0; const sequelize_typescript_1 = require("sequelize-typescript"); const tslog_1 = require("tslog"); const ComponentVariable_1 = require("./model/DeviceModel/ComponentVariable"); const _1 = require("."); const DeviceModel_1 = require("./model/DeviceModel"); const MessageInfo_1 = require("./model/MessageInfo"); const Subscription_1 = require("./model/Subscription"); const Tariff_1 = require("./model/Tariff"); const IdTokenAdditionalInfo_1 = require("./model/Authorization/IdTokenAdditionalInfo"); const Location_1 = require("./model/Location"); const LatestStatusNotification_1 = require("./model/Location/LatestStatusNotification"); const TransactionEvent_1 = require("./model/TransactionEvent"); class DefaultSequelizeInstance { constructor() { } static getInstance(config, logger) { if (!DefaultSequelizeInstance.instance) { DefaultSequelizeInstance.config = config; DefaultSequelizeInstance.logger = logger ? logger.getSubLogger({ name: this.name }) : new tslog_1.Logger({ name: this.name }); DefaultSequelizeInstance.instance = this.createSequelizeInstance(); } return DefaultSequelizeInstance.instance; } static initializeSequelize() { return __awaiter(this, arguments, void 0, function* (_sync = false) { var _a, _b; let retryCount = 0; const maxRetries = (_a = this.config.database.maxRetries) !== null && _a !== void 0 ? _a : this.DEFAULT_RETRIES; const retryDelay = (_b = this.config.database.retryDelay) !== null && _b !== void 0 ? _b : this.DEFAULT_RETRY_DELAY; while (retryCount < maxRetries) { try { yield this.instance.authenticate(); this.logger.info('Database connection has been established successfully'); yield this.syncDb(); break; } catch (error) { retryCount++; this.logger.error(`Failed to connect to the database (attempt ${retryCount}/${maxRetries}):`, error); if (retryCount < maxRetries) { this.logger.info(`Retrying in ${retryDelay / 1000} seconds...`); yield new Promise((resolve) => setTimeout(resolve, retryDelay)); } else { this.logger.error('Max retries reached. Unable to establish database connection.'); } } } }); } static syncDb() { return __awaiter(this, void 0, void 0, function* () { if (this.config.database.alter) { yield this.instance.sync({ alter: true }); this.logger.info('Database altered'); } else if (this.config.database.sync) { yield this.instance.sync({ force: true }); this.logger.info('Database synchronized'); } }); } static createSequelizeInstance() { return new sequelize_typescript_1.Sequelize({ host: this.config.database.host, port: this.config.database.port, database: this.config.database.database, dialect: this.config.database.dialect, username: this.config.database.username, password: this.config.database.password, models: [ _1.AdditionalInfo, _1.Authorization, _1.Boot, _1.Certificate, _1.InstalledCertificate, _1.ChangeConfiguration, _1.ChargingNeeds, _1.ChargingProfile, _1.ChargingSchedule, _1.ChargingStation, _1.ChargingStationNetworkProfile, _1.ChargingStationSecurityInfo, _1.ChargingStationSequence, _1.Component, ComponentVariable_1.ComponentVariable, _1.CompositeSchedule, _1.Connector, _1.Evse, _1.EventData, _1.IdToken, IdTokenAdditionalInfo_1.IdTokenAdditionalInfo, _1.IdTokenInfo, _1.Location, _1.MeterValue, MessageInfo_1.MessageInfo, _1.OCPPMessage, _1.Reservation, _1.SalesTariff, _1.SecurityEvent, Location_1.SetNetworkProfile, _1.ServerNetworkProfile, _1.Transaction, TransactionEvent_1.StartTransaction, Location_1.StatusNotification, TransactionEvent_1.StopTransaction, LatestStatusNotification_1.LatestStatusNotification, Subscription_1.Subscription, _1.TransactionEvent, Tariff_1.Tariff, _1.VariableAttribute, _1.VariableCharacteristics, _1.VariableMonitoring, _1.VariableMonitoringStatus, DeviceModel_1.VariableStatus, _1.Variable, _1.LocalListAuthorization, _1.LocalListVersion, _1.LocalListVersionAuthorization, _1.SendLocalList, _1.SendLocalListAuthorization, _1.Tenant, ], logging: (_sql, _timing) => { }, }); } } exports.DefaultSequelizeInstance = DefaultSequelizeInstance; /** * Fields */ DefaultSequelizeInstance.DEFAULT_RETRIES = 5; DefaultSequelizeInstance.DEFAULT_RETRY_DELAY = 5000; DefaultSequelizeInstance.instance = null; //# sourceMappingURL=util.js.map