UNPKG

antfarm

Version:

File automation framework for ants.

137 lines (118 loc) 3.65 kB
import {Logger} from "./logger"; import {WebhookNest} from "../nest/webhookNest"; import {Server} from "./server"; import {InterfaceManager} from "../ui/interfaceManager"; import {AntfarmOptions} from "./options"; import {Emailer} from "./emailer"; import {EmailCredentials} from "./emailCredentials"; const fs = require("fs"); /** * The environment class controls all aspects of the antfarm environment, like options, logging, * and constructing globally referenced objects. */ export class Environment { protected _options: AntfarmOptions; protected logger: Logger; protected _server: Server; protected _emailer: Emailer; protected hookRoutes = []; protected hookInterfaceRoutes = []; constructor(options: AntfarmOptions) { this.logger = new Logger(options); this.options = options; } /** * Sets the options and creates other environmental objects if necessary. * @param options */ public set options(options: AntfarmOptions) { let e = this; if (options.auto_managed_folder_directory) { try { fs.statSync(options.auto_managed_folder_directory); } catch (err) { e.log(3, `Auto managed directory "${options.auto_managed_folder_directory}" does not exist.`, this); } } this._options = options; if (options.port) { e.createServer(); e.server.createLogServer(e.logger); } if (options.email_credentials) { e.createEmailer(); } } /** * Get the Antfarm options. * @returns {AntfarmOptions} */ public get options() { return this._options; } /** * Creates an Emailer object to send emails. */ protected createEmailer() { let e = this; // Get options needed and pass to emailer let credentials = e.options.email_credentials; e._emailer = new Emailer(e, credentials); } public get emailer() { return this._emailer; } /** * Return the auto managed folder directory, if set. * @returns {string} */ public get autoManagedFolderDirectory() { return this.options.auto_managed_folder_directory; } /** * Creates the server. */ protected createServer() { this._server = new Server(this); } /** * Get the server instance. * @returns {Server} */ public get server() { return this._server; } /** * Adds a webhook to the webhook server. * @param nest */ public addWebhook(nest: WebhookNest) { let e = this; e.server.addWebhook(nest); } /** * Adds a webhook interface to the webhook server. * @param im */ public addWebhookInterface(im: InterfaceManager) { let e = this; e.server.addWebhookInterface(im); } public toString() { return "Environment"; } /** * Adds a log entry to the Logger instance. * @param type {number} The log level. 0 = debug, 1 = info, 2 = warning, 3 = error * @param message {string} Log message. * @param actor {any} Instance which triggers the action being logged. * @param instances {any[]} Array of of other involved instances. * #### Example * ```js * job.e.log(1, `Transferred to Tunnel "${tunnel.getName()}".`, job, [oldTunnel]); * ``` */ public log(type: number, message: string, actor?: any, instances = []) { this.logger.log(type, message, actor, instances); } }