From aa872bf7821eaf016c639b2e1b02dda5cb558505 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 30 Apr 2022 21:43:39 +0800 Subject: [PATCH] working --- server/plugins-manager.js | 38 ++++++++++++++++++++++++++++++++++++ server/server.js | 2 ++ server/uptime-kuma-server.js | 12 ++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 server/plugins-manager.js diff --git a/server/plugins-manager.js b/server/plugins-manager.js new file mode 100644 index 00000000..214c5cca --- /dev/null +++ b/server/plugins-manager.js @@ -0,0 +1,38 @@ +const fs = require("fs"); +const { log } = require("../src/util"); + +class PluginsManager { + + pluginList = []; + + /** + * Plugins Dir + */ + pluginsDir; + + constructor(dir) { + this.pluginsDir = dir; + + if (! fs.existsSync(this.pluginsDir)) { + fs.mkdirSync(this.pluginsDir, { recursive: true }); + } + + let list = fs.readdirSync(this.pluginsDir); + + this.pluginList = []; + for (let item of list) { + let indexFile = this.pluginsDir + item + "/index.js"; + + if (fs.existsSync(indexFile)) { + this.pluginList.push(require(indexFile)); + log.debug("plugin", indexFile); + log.info("plugin", `${item} loaded`); + } + } + } + +} + +module.exports = { + PluginsManager +}; diff --git a/server/server.js b/server/server.js index 2a4a5a4d..36075a93 100644 --- a/server/server.js +++ b/server/server.js @@ -153,6 +153,8 @@ let needSetup = false; Database.init(args); await initDatabase(testMode); + server.loadPlugins(Database.dataDir + "plugins/"); + exports.entryPage = await setting("entryPage"); await StatusPage.loadDomainMappingList(); diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index 605ba533..483d7920 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -7,6 +7,7 @@ const { R } = require("redbean-node"); const { log } = require("../src/util"); const Database = require("./database"); const util = require("util"); +const { PluginsManager } = require("./plugins-manager"); /** * `module.exports` (alias: `server`) should be inside this class, in order to avoid circular dependency issue. @@ -35,6 +36,12 @@ class UptimeKumaServer { */ indexHTML = ""; + /** + * Plugins Manager + * @type {PluginsManager} + */ + pluginsManager = null; + static getInstance(args) { if (UptimeKumaServer.instance == null) { UptimeKumaServer.instance = new UptimeKumaServer(args); @@ -126,6 +133,11 @@ class UptimeKumaServer { errorLogStream.end(); } + + loadPlugins(dir) { + this.pluginsManager = new PluginsManager(dir); + } + } module.exports = {