mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Update diagnostics as per Issue discussion
This commit is contained in:
		@@ -7,13 +7,13 @@ module.exports = {
 | 
			
		||||
        runtimeAPI = _runtimeAPI;
 | 
			
		||||
    },
 | 
			
		||||
    getReport: function(req, res) {
 | 
			
		||||
        const diagnosticsOptions = settings.diagnosticsOptions || {};
 | 
			
		||||
        const diagnosticsOpts = settings.diagnostics || {};
 | 
			
		||||
        const opts = {
 | 
			
		||||
            user: req.user,
 | 
			
		||||
            scope: diagnosticsOptions.level || "basic"
 | 
			
		||||
            scope: diagnosticsOpts.level || "basic"
 | 
			
		||||
        }
 | 
			
		||||
        if(diagnosticsOptions.enabled === false || diagnosticsOptions.enabled === "false") {
 | 
			
		||||
            apiUtil.rejectHandler(req, res, {message: "disabled", status: 403, code: "diagnosticsOptions.enabled" })
 | 
			
		||||
        if(diagnosticsOpts.enabled === false || diagnosticsOpts.enabled === "false") {
 | 
			
		||||
            apiUtil.rejectHandler(req, res, {message: "disabled", status: 403, code: "diagnostics.enabled" })
 | 
			
		||||
        } else {
 | 
			
		||||
            runtimeAPI.diagnostics.get(opts)
 | 
			
		||||
            .then(function(result) { res.json(result); })
 | 
			
		||||
 
 | 
			
		||||
@@ -69,19 +69,17 @@ function buildDiagnosticReport(scope, callback) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const now = new Date();
 | 
			
		||||
    const {locale, timeZone} = Intl.DateTimeFormat().resolvedOptions();
 | 
			
		||||
    const report = {
 | 
			
		||||
        report: "diagnostics",
 | 
			
		||||
        scope: scope,
 | 
			
		||||
        version: runtime.settings.version,
 | 
			
		||||
        isStarted: runtime.isStarted(),
 | 
			
		||||
        containerised: isInContainer(),
 | 
			
		||||
        wsl: isInWsl(),
 | 
			
		||||
        time: {
 | 
			
		||||
            timestamp: now.valueOf(),
 | 
			
		||||
            utc: "" + now.toUTCString(),
 | 
			
		||||
            locale: now.toLocaleString(),
 | 
			
		||||
            utc: now.toUTCString(),
 | 
			
		||||
            local: now.toLocaleString(),
 | 
			
		||||
        },
 | 
			
		||||
        intl: {
 | 
			
		||||
            locale, timeZone
 | 
			
		||||
        },
 | 
			
		||||
        intl: Intl.DateTimeFormat().resolvedOptions(),
 | 
			
		||||
        nodejs: {
 | 
			
		||||
            version: process.version,
 | 
			
		||||
            arch: process.arch,
 | 
			
		||||
@@ -89,6 +87,8 @@ function buildDiagnosticReport(scope, callback) {
 | 
			
		||||
            memoryUsage: process.memoryUsage(),
 | 
			
		||||
        },
 | 
			
		||||
        os: {
 | 
			
		||||
            containerised: isInContainer(),
 | 
			
		||||
            wsl: isInWsl(),
 | 
			
		||||
            totalmem: os.totalmem(),
 | 
			
		||||
            freemem: os.freemem(),
 | 
			
		||||
            arch: os.arch(),
 | 
			
		||||
@@ -100,67 +100,69 @@ function buildDiagnosticReport(scope, callback) {
 | 
			
		||||
            version: os.version(),
 | 
			
		||||
        },
 | 
			
		||||
        runtime: {
 | 
			
		||||
            isStarted: runtime.isStarted(),
 | 
			
		||||
            modules: modules,
 | 
			
		||||
            version: runtime.settings.version,
 | 
			
		||||
            settings: {
 | 
			
		||||
                available: runtime.settings.available(),
 | 
			
		||||
                apiMaxLength: runtime.settings.apiMaxLength || "NO SETTING",
 | 
			
		||||
                apiMaxLength: runtime.settings.apiMaxLength || "UNSET",
 | 
			
		||||
                //coreNodesDir: runtime.settings.coreNodesDir,
 | 
			
		||||
                disableEditor: runtime.settings.disableEditor,
 | 
			
		||||
                contextStorage: listContextModules(),
 | 
			
		||||
                debugMaxLength: runtime.settings.debugMaxLength || "NO SETTING",
 | 
			
		||||
                editorTheme: runtime.settings.editorTheme || "NO SETTING",
 | 
			
		||||
                flowFile: runtime.settings.flowFile || "NO SETTING",
 | 
			
		||||
                mqttReconnectTime: runtime.settings.mqttReconnectTime || "NO SETTING",
 | 
			
		||||
                serialReconnectTime: runtime.settings.serialReconnectTime || "NO SETTING",
 | 
			
		||||
                debugMaxLength: runtime.settings.debugMaxLength || "UNSET",
 | 
			
		||||
                editorTheme: runtime.settings.editorTheme || "UNSET",
 | 
			
		||||
                flowFile: runtime.settings.flowFile || "UNSET",
 | 
			
		||||
                mqttReconnectTime: runtime.settings.mqttReconnectTime || "UNSET",
 | 
			
		||||
                serialReconnectTime: runtime.settings.serialReconnectTime || "UNSET",
 | 
			
		||||
 | 
			
		||||
                adminAuth: runtime.settings.adminAuth ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                adminAuth: runtime.settings.adminAuth ? "SET" : "UNSET",
 | 
			
		||||
 | 
			
		||||
                httpAdminRoot: runtime.settings.adminAuth ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                httpAdminCors: runtime.settings.httpAdminCors ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                httpNodeAuth: runtime.settings.httpNodeAuth ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                httpAdminRoot: runtime.settings.adminAuth ? "SET" : "UNSET",
 | 
			
		||||
                httpAdminCors: runtime.settings.httpAdminCors ? "SET" : "UNSET",
 | 
			
		||||
                httpNodeAuth: runtime.settings.httpNodeAuth ? "SET" : "UNSET",
 | 
			
		||||
 | 
			
		||||
                httpAdminRoot: runtime.settings.httpAdminRoot || "NO SETTING",
 | 
			
		||||
                httpAdminCors: runtime.settings.httpAdminCors ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                httpAdminRoot: runtime.settings.httpAdminRoot || "UNSET",
 | 
			
		||||
                httpAdminCors: runtime.settings.httpAdminCors ? "SET" : "UNSET",
 | 
			
		||||
 | 
			
		||||
                httpNodeRoot: runtime.settings.httpNodeRoot || "NO SETTING",
 | 
			
		||||
                httpNodeCors: runtime.settings.httpNodeCors ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                httpNodeRoot: runtime.settings.httpNodeRoot || "UNSET",
 | 
			
		||||
                httpNodeCors: runtime.settings.httpNodeCors ? "SET" : "UNSET",
 | 
			
		||||
 | 
			
		||||
                httpStatic: runtime.settings.httpStatic ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                httpStatic: runtime.settings.httpStaticRoot || "NO SETTING",
 | 
			
		||||
                httpStaticCors: runtime.settings.httpStaticCors ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                httpStatic: runtime.settings.httpStatic ? "SET" : "UNSET",
 | 
			
		||||
                httpStatic: runtime.settings.httpStaticRoot || "UNSET",
 | 
			
		||||
                httpStaticCors: runtime.settings.httpStaticCors ? "SET" : "UNSET",
 | 
			
		||||
 | 
			
		||||
                uiHost: runtime.settings.uiHost ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                uiPort: runtime.settings.uiPort ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                userDir: runtime.settings.userDir ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
                uiHost: runtime.settings.uiHost ? "SET" : "UNSET",
 | 
			
		||||
                uiPort: runtime.settings.uiPort ? "SET" : "UNSET",
 | 
			
		||||
                userDir: runtime.settings.userDir ? "SET" : "UNSET",
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (scope == "admin") {
 | 
			
		||||
        const moreSettings = {
 | 
			
		||||
            adminAuth_type: (runtime.settings.adminAuth && runtime.settings.adminAuth.type) ? runtime.settings.adminAuth.type : "NO SETTING",
 | 
			
		||||
            httpAdminCors: runtime.settings.httpAdminCors ? runtime.settings.httpAdminCors : "NO SETTING",
 | 
			
		||||
            httpNodeCors: runtime.settings.httpNodeCors ? runtime.settings.httpNodeCors : "NO SETTING",
 | 
			
		||||
            httpStaticCors: runtime.settings.httpStaticCors ? "HAS SETTING" : "NO SETTING",
 | 
			
		||||
            settingsFile: runtime.settings.settingsFile ? runtime.settings.settingsFile : "NO SETTING",
 | 
			
		||||
            uiHost: runtime.settings.uiHost ? runtime.settings.uiHost : "NO SETTING",
 | 
			
		||||
            uiPort: runtime.settings.uiPort ? runtime.settings.uiPort : "NO SETTING",
 | 
			
		||||
            userDir: runtime.settings.userDir ? runtime.settings.userDir : "NO SETTING",
 | 
			
		||||
        }
 | 
			
		||||
        const moreNodejs = {
 | 
			
		||||
            execPath: process.execPath,
 | 
			
		||||
            pid: process.pid,
 | 
			
		||||
        }
 | 
			
		||||
        const moreOs = {
 | 
			
		||||
            cpus: os.cpus(),
 | 
			
		||||
            homedir: os.homedir(),
 | 
			
		||||
            hostname: os.hostname(),
 | 
			
		||||
            networkInterfaces: os.networkInterfaces(),
 | 
			
		||||
        }
 | 
			
		||||
        report.runtime.settings = Object.assign({}, report.runtime.settings, moreSettings);
 | 
			
		||||
        report.nodejs = Object.assign({}, report.nodejs, moreNodejs);
 | 
			
		||||
        report.os = Object.assign({}, report.os, moreOs);
 | 
			
		||||
    }
 | 
			
		||||
    // if (scope == "admin") {
 | 
			
		||||
    //     const moreSettings = {
 | 
			
		||||
    //         adminAuth_type: (runtime.settings.adminAuth && runtime.settings.adminAuth.type) ? runtime.settings.adminAuth.type : "UNSET",
 | 
			
		||||
    //         httpAdminCors: runtime.settings.httpAdminCors ? runtime.settings.httpAdminCors : "UNSET",
 | 
			
		||||
    //         httpNodeCors: runtime.settings.httpNodeCors ? runtime.settings.httpNodeCors : "UNSET",
 | 
			
		||||
    //         httpStaticCors: runtime.settings.httpStaticCors ? "SET" : "UNSET",
 | 
			
		||||
    //         settingsFile: runtime.settings.settingsFile ? runtime.settings.settingsFile : "UNSET",
 | 
			
		||||
    //         uiHost: runtime.settings.uiHost ? runtime.settings.uiHost : "UNSET",
 | 
			
		||||
    //         uiPort: runtime.settings.uiPort ? runtime.settings.uiPort : "UNSET",
 | 
			
		||||
    //         userDir: runtime.settings.userDir ? runtime.settings.userDir : "UNSET",
 | 
			
		||||
    //     }
 | 
			
		||||
    //     const moreNodejs = {
 | 
			
		||||
    //         execPath: process.execPath,
 | 
			
		||||
    //         pid: process.pid,
 | 
			
		||||
    //     }
 | 
			
		||||
    //     const moreOs = {
 | 
			
		||||
    //         cpus: os.cpus(),
 | 
			
		||||
    //         homedir: os.homedir(),
 | 
			
		||||
    //         hostname: os.hostname(),
 | 
			
		||||
    //         networkInterfaces: os.networkInterfaces(),
 | 
			
		||||
    //     }
 | 
			
		||||
    //     report.runtime.settings = Object.assign({}, report.runtime.settings, moreSettings);
 | 
			
		||||
    //     report.nodejs = Object.assign({}, report.nodejs, moreNodejs);
 | 
			
		||||
    //     report.os = Object.assign({}, report.os, moreOs);
 | 
			
		||||
    // }
 | 
			
		||||
 | 
			
		||||
    callback(report);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								packages/node_modules/node-red/settings.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								packages/node_modules/node-red/settings.js
									
									
									
									
										vendored
									
									
								
							@@ -224,7 +224,7 @@ module.exports = {
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 * Runtime Settings
 | 
			
		||||
 *  - lang
 | 
			
		||||
 *  - diagnosticsOptions
 | 
			
		||||
 *  - diagnostics
 | 
			
		||||
 *  - logging
 | 
			
		||||
 *  - contextStorage
 | 
			
		||||
 *  - exportGlobalContextKeys
 | 
			
		||||
@@ -240,14 +240,14 @@ module.exports = {
 | 
			
		||||
    /** ### Configure diagnostics options 
 | 
			
		||||
     * - `.enabled`:  When `enabled` is `true` (or unset), diagnostics data will
 | 
			
		||||
     *   be available at http://localhost:1880/diagnostics  
 | 
			
		||||
     * - `.level`: When `level` is "basic" (or unset), the diagnostics will not 
 | 
			
		||||
     *   include sensitive data. Set level to "admin" for detailed diagnostics  
 | 
			
		||||
     * - `.ui`: When `ui` is `true` (or unset), the action `show-system-info` will 
 | 
			
		||||
     *   be available to logged in users of node-red editor  
 | 
			
		||||
    */ 
 | 
			
		||||
    diagnosticsOptions: {
 | 
			
		||||
        /** @type {boolean} enable or disable diagnostics. Must be set to `false` to disable */
 | 
			
		||||
    diagnostics: {
 | 
			
		||||
        /** @type {boolean} `enabled` - enable or disable diagnostics endpoint. Must be set to `false` to disable */
 | 
			
		||||
        enabled: true,
 | 
			
		||||
        /** @type {"basic"|"admin"} diagnostic level can be "basic" (default) or "admin" (more sensitive details are included) */
 | 
			
		||||
        level: "basic",
 | 
			
		||||
        /** @type {boolean} `ui` - enable or disable diagnostics display in the node-red editor. Must be set to `false` to disable */
 | 
			
		||||
        ui: true,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
     /** Configure the logging output */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user