307 lines
10 KiB
JavaScript
307 lines
10 KiB
JavaScript
import ServiceRegistry from "../service/v1/system/serviceRegistry.js";
|
|
import TranslationService from "../service/v1/system/translationService.js";
|
|
import StringService from "../service/v1/system/stringService.js";
|
|
import MongoDB from "../db/v1/MongoDB.js";
|
|
import NetworkService from "../service/v1/infrastructure/networkService.js";
|
|
import EmailService from "../service/v1/infrastructure/emailService.js";
|
|
import BufferService from "../service/v1/infrastructure/bufferService.js";
|
|
import StatusService from "../service/v1/infrastructure/statusService.js";
|
|
import NotificationUtils from "../service/v1/infrastructure/notificationUtils.js";
|
|
import NotificationService from "../service/v1/infrastructure/notificationService.js";
|
|
import ErrorService from "../service/v1/infrastructure/errorService.js";
|
|
import SuperSimpleQueueHelper from "../service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js";
|
|
import SuperSimpleQueue from "../service/v1/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js";
|
|
import UserService from "../service/v1/business/userService.js";
|
|
import CheckService from "../service/v1/business/checkService.js";
|
|
import DiagnosticService from "../service/v1/business/diagnosticService.js";
|
|
import InviteService from "../service/v1/business/inviteService.js";
|
|
import MaintenanceWindowService from "../service/v1/business/maintenanceWindowService.js";
|
|
import MonitorService from "../service/v1/business/monitorService.js";
|
|
import papaparse from "papaparse";
|
|
import axios from "axios";
|
|
import got from "got";
|
|
import ping from "ping";
|
|
import http from "http";
|
|
import https from "https";
|
|
import Docker from "dockerode";
|
|
import net from "net";
|
|
import fs from "fs";
|
|
import path from "path";
|
|
import nodemailer from "nodemailer";
|
|
import pkg from "handlebars";
|
|
const { compile } = pkg;
|
|
import mjml2html from "mjml";
|
|
import jwt from "jsonwebtoken";
|
|
import crypto from "crypto";
|
|
import { games } from "gamedig";
|
|
import jmespath from "jmespath";
|
|
import { GameDig } from "gamedig";
|
|
|
|
import { fileURLToPath } from "url";
|
|
import { ObjectId } from "mongodb";
|
|
|
|
// DB Modules
|
|
import { NormalizeData, NormalizeDataUptimeDetails } from "../utils/dataUtils.js";
|
|
import { GenerateAvatarImage } from "../utils/imageProcessing.js";
|
|
import { ParseBoolean } from "../utils/utils.js";
|
|
|
|
// Models
|
|
import Check from "../db/v1/models/Check.js";
|
|
import Monitor from "../db/v1/models/Monitor.js";
|
|
import User from "../db/v1/models/User.js";
|
|
import InviteToken from "../db/v1/models/InviteToken.js";
|
|
import StatusPage from "../db/v1/models/StatusPage.js";
|
|
import Team from "../db/v1/models/Team.js";
|
|
import MaintenanceWindow from "../db/v1/models/MaintenanceWindow.js";
|
|
import MonitorStats from "../db/v1/models/MonitorStats.js";
|
|
import Notification from "../db/v1/models/Notification.js";
|
|
import RecoveryToken from "../db/v1/models/RecoveryToken.js";
|
|
import AppSettings from "../db/v1/models/AppSettings.js";
|
|
|
|
import InviteModule from "../db/v1/modules/inviteModule.js";
|
|
import CheckModule from "../db/v1/modules/checkModule.js";
|
|
import StatusPageModule from "../db/v1/modules/statusPageModule.js";
|
|
import UserModule from "../db/v1/modules/userModule.js";
|
|
import MaintenanceWindowModule from "../db/v1/modules/maintenanceWindowModule.js";
|
|
import MonitorModule from "../db/v1/modules/monitorModule.js";
|
|
import NotificationModule from "../db/v1/modules/notificationModule.js";
|
|
import RecoveryModule from "../db/v1/modules/recoveryModule.js";
|
|
import SettingsModule from "../db/v1/modules/settingsModule.js";
|
|
|
|
// V2 Business
|
|
import AuthServiceV2 from "../service/v2/business/AuthService.js";
|
|
import CheckServiceV2 from "../service/v2/business/CheckService.js";
|
|
import InviteServiceV2 from "../service/v2/business/InviteService.js";
|
|
import MaintenanceServiceV2 from "../service/v2/business/MaintenanceService.js";
|
|
import MonitorServiceV2 from "../service/v2/business/MonitorService.js";
|
|
import MonitorStatsServiceV2 from "../service/v2/business/MonitorStatsService.js";
|
|
import NotificationChannelServiceV2 from "../service/v2/business/NotificationChannelService.js";
|
|
import QueueServiceV2 from "../service/v2/business/QueueService.js";
|
|
import UserServiceV2 from "../service/v2/business/UserService.js";
|
|
|
|
// V2 Infra
|
|
import DiscordServiceV2 from "../service/v2/infrastructure/NotificationServices/Discord.js";
|
|
import EmailServiceV2 from "../service/v2/infrastructure/NotificationServices/Email.js";
|
|
import SlackServiceV2 from "../service/v2/infrastructure/NotificationServices/Slack.js";
|
|
import WebhookServiceV2 from "../service/v2/infrastructure/NotificationServices/Webhook.js";
|
|
import JobGeneratorV2 from "../service/v2/infrastructure/JobGenerator.js";
|
|
import JobQueueV2 from "../service/v2/infrastructure/JobQueue.js";
|
|
import NetworkServiceV2 from "../service/v2/infrastructure/NetworkService.js";
|
|
import NotificationServiceV2 from "../service/v2/infrastructure/NotificationService.js";
|
|
import StatusServiceV2 from "../service/v2/infrastructure/StatusService.js";
|
|
|
|
export const initializeServices = async ({ logger, envSettings, settingsService }) => {
|
|
const serviceRegistry = new ServiceRegistry({ logger });
|
|
ServiceRegistry.instance = serviceRegistry;
|
|
|
|
const translationService = new TranslationService(logger);
|
|
await translationService.initialize();
|
|
|
|
const stringService = new StringService(translationService);
|
|
|
|
// Create DB
|
|
const checkModule = new CheckModule({ logger, Check, Monitor, User });
|
|
const inviteModule = new InviteModule({ InviteToken, crypto, stringService });
|
|
const statusPageModule = new StatusPageModule({ StatusPage, NormalizeData, stringService });
|
|
const userModule = new UserModule({ User, Team, GenerateAvatarImage, ParseBoolean, stringService });
|
|
const maintenanceWindowModule = new MaintenanceWindowModule({ MaintenanceWindow });
|
|
const monitorModule = new MonitorModule({
|
|
Monitor,
|
|
MonitorStats,
|
|
Check,
|
|
stringService,
|
|
fs,
|
|
path,
|
|
fileURLToPath,
|
|
ObjectId,
|
|
NormalizeData,
|
|
NormalizeDataUptimeDetails,
|
|
});
|
|
const notificationModule = new NotificationModule({ Notification, Monitor });
|
|
const recoveryModule = new RecoveryModule({ User, RecoveryToken, crypto, stringService });
|
|
const settingsModule = new SettingsModule({ AppSettings });
|
|
|
|
const db = new MongoDB({
|
|
logger,
|
|
envSettings,
|
|
checkModule,
|
|
inviteModule,
|
|
statusPageModule,
|
|
userModule,
|
|
maintenanceWindowModule,
|
|
monitorModule,
|
|
notificationModule,
|
|
recoveryModule,
|
|
settingsModule,
|
|
});
|
|
|
|
await db.connect();
|
|
|
|
const networkService = new NetworkService({
|
|
axios,
|
|
got,
|
|
https,
|
|
jmespath,
|
|
GameDig,
|
|
ping,
|
|
logger,
|
|
http,
|
|
Docker,
|
|
net,
|
|
stringService,
|
|
settingsService,
|
|
});
|
|
const emailService = new EmailService(settingsService, fs, path, compile, mjml2html, nodemailer, logger);
|
|
const bufferService = new BufferService({ db, logger, envSettings });
|
|
const statusService = new StatusService({ db, logger, buffer: bufferService });
|
|
|
|
const notificationUtils = new NotificationUtils({
|
|
stringService,
|
|
emailService,
|
|
});
|
|
|
|
const notificationService = new NotificationService({
|
|
emailService,
|
|
db,
|
|
logger,
|
|
networkService,
|
|
stringService,
|
|
notificationUtils,
|
|
});
|
|
|
|
const errorService = new ErrorService();
|
|
|
|
const superSimpleQueueHelper = new SuperSimpleQueueHelper({
|
|
db,
|
|
logger,
|
|
networkService,
|
|
statusService,
|
|
notificationService,
|
|
});
|
|
|
|
const superSimpleQueue = await SuperSimpleQueue.create({
|
|
envSettings,
|
|
db,
|
|
logger,
|
|
helper: superSimpleQueueHelper,
|
|
});
|
|
|
|
// Business services
|
|
const userService = new UserService({
|
|
crypto,
|
|
db,
|
|
emailService,
|
|
settingsService,
|
|
logger,
|
|
stringService,
|
|
jwt,
|
|
errorService,
|
|
jobQueue: superSimpleQueue,
|
|
});
|
|
const checkService = new CheckService({
|
|
db,
|
|
settingsService,
|
|
stringService,
|
|
errorService,
|
|
});
|
|
const diagnosticService = new DiagnosticService();
|
|
const inviteService = new InviteService({
|
|
db,
|
|
settingsService,
|
|
emailService,
|
|
stringService,
|
|
errorService,
|
|
});
|
|
const maintenanceWindowService = new MaintenanceWindowService({
|
|
db,
|
|
settingsService,
|
|
stringService,
|
|
errorService,
|
|
});
|
|
const monitorService = new MonitorService({
|
|
db,
|
|
settingsService,
|
|
jobQueue: superSimpleQueue,
|
|
stringService,
|
|
emailService,
|
|
papaparse,
|
|
logger,
|
|
errorService,
|
|
games,
|
|
});
|
|
|
|
// V2 Services
|
|
const checkServiceV2 = new CheckServiceV2();
|
|
const inviteServiceV2 = new InviteServiceV2();
|
|
const maintenanceServiceV2 = new MaintenanceServiceV2();
|
|
const monitorStatsServiceV2 = new MonitorStatsServiceV2();
|
|
const notificationChannelServiceV2 = new NotificationChannelServiceV2();
|
|
const userServiceV2 = new UserServiceV2();
|
|
const discordServiceV2 = new DiscordServiceV2();
|
|
const emailServiceV2 = new EmailServiceV2(userServiceV2);
|
|
const slackServiceV2 = new SlackServiceV2();
|
|
const webhookServiceV2 = new WebhookServiceV2();
|
|
const networkServiceV2 = new NetworkServiceV2();
|
|
const statusServiceV2 = new StatusServiceV2();
|
|
const notificationServiceV2 = new NotificationServiceV2(userServiceV2);
|
|
const jobGeneratorV2 = new JobGeneratorV2(
|
|
networkServiceV2,
|
|
checkServiceV2,
|
|
monitorStatsServiceV2,
|
|
statusServiceV2,
|
|
notificationServiceV2,
|
|
maintenanceServiceV2
|
|
);
|
|
const jobQueueV2 = await JobQueueV2.create(jobGeneratorV2);
|
|
const authServiceV2 = new AuthServiceV2(jobQueueV2);
|
|
const monitorServiceV2 = new MonitorServiceV2(jobQueueV2);
|
|
const queueServiceV2 = new QueueServiceV2(jobQueueV2);
|
|
|
|
const services = {
|
|
//v1
|
|
settingsService,
|
|
translationService,
|
|
stringService,
|
|
db,
|
|
networkService,
|
|
emailService,
|
|
bufferService,
|
|
statusService,
|
|
notificationService,
|
|
jobQueue: superSimpleQueue,
|
|
userService,
|
|
checkService,
|
|
diagnosticService,
|
|
inviteService,
|
|
maintenanceWindowService,
|
|
monitorService,
|
|
errorService,
|
|
logger,
|
|
//v2
|
|
jobQueueV2,
|
|
authServiceV2,
|
|
checkServiceV2,
|
|
inviteServiceV2,
|
|
maintenanceServiceV2,
|
|
monitorServiceV2,
|
|
monitorStatsServiceV2,
|
|
notificationChannelServiceV2,
|
|
queueServiceV2,
|
|
userServiceV2,
|
|
discordServiceV2,
|
|
emailServiceV2,
|
|
slackServiceV2,
|
|
webhookServiceV2,
|
|
networkServiceV2,
|
|
statusServiceV2,
|
|
notificationServiceV2,
|
|
jobGeneratorV2,
|
|
};
|
|
|
|
Object.values(services).forEach((service) => {
|
|
ServiceRegistry.register(service.serviceName, service);
|
|
});
|
|
|
|
return services;
|
|
};
|