function configInit()

in greengrass-opcua-adapter-nodejs/config_agent.js [105:256]


function configInit(serverConfigs, callback) {
    jsonFile.readFile(`${folder}/${clientConfigfileName}`, function (err, configList) {
        if (err) {
            throw err;
        }

        if (isEmpty(configList.keepSessionAlive)) {
            throw new Error("configList.keepSessionAlive is empty or whitespace");
        }

        if (!Number.isInteger(configList.connectionStrategy.maxRetry)) {
            throw new Error("configList.connectionStrategy.maxRetry is not a number");
        }

        if (!Number.isInteger(configList.connectionStrategy.initialDelay)) {
            throw new Error("invalid .connectionStrategy.initialDelay is not a number");
        }

        if (!Number.isInteger(configList.connectionStrategy.maxDelay)) {
            throw new Error("connectionStrategy.maxDelay is not a number");
        }

        if (!Number.isInteger(configList.checkServerConfigInterval)) {
            throw new Error("connectionStrategy.maxDelay is not a number");
        }

        clientOptions.keepSessionAlive = configList.keepSessionAlive;
        clientOptions.connectionStrategy.maxRetry = configList.connectionStrategy.maxRetry;
        clientOptions.connectionStrategy.initialDelay = configList.connectionStrategy.initialDelay;
        clientOptions.connectionStrategy.maxDelay = configList.connectionStrategy.maxDelay;
        clientOptions.checkServerConfigInterval = configList.checkServerConfigInterval;

        customerOption.customUploadDataStrategy = configList.customUploadDataStrategy;

        // Adjust the parameter in customerOption
        if (isEmpty(customerOption.customUploadDataStrategy.sendAllDataToCloud)) {
            customerOption.customUploadDataStrategy.sendAllDataToCloud = false;
        }

        // Overwrite the sendAllDataToCloud configuration from environment variable
        if (typeof process.env.AWS_LAMBDA_OPCUA_ADAPTER_SEND_ALL_DATA_TO_CLOUD != 'undefined') {
            console.log(configInit.name + ":process.env.AWS_LAMBDA_OPCUA_ADAPTER_SEND_ALL_DATA_TO_CLOUD: " + process.env.AWS_LAMBDA_OPCUA_ADAPTER_SEND_ALL_DATA_TO_CLOUD);
            if ( process.env.AWS_LAMBDA_OPCUA_ADAPTER_SEND_ALL_DATA_TO_CLOUD == 'true' ) {
                customerOption.customUploadDataStrategy.sendAllDataToCloud = true;
            } else {
                customerOption.customUploadDataStrategy.sendAllDataToCloud = false;
            }
        }

        // Overwrite the pollingInSecond configuration from environment variable
        if (typeof process.env.AWS_LAMBDA_OPCUA_ADAPTER_POLL_IN_SECOND != 'undefined') {
            console.log(configInit.name + ":process.env.AWS_LAMBDA_OPCUA_ADAPTER_POLL_IN_SECOND: " + process.env.AWS_LAMBDA_OPCUA_ADAPTER_POLL_IN_SECOND);
            if ( !isNaN( process.env.AWS_LAMBDA_OPCUA_ADAPTER_POLL_IN_SECOND ) ) {
                customerOption.customUploadDataStrategy.pollingInSecond = +process.env.AWS_LAMBDA_OPCUA_ADAPTER_POLL_IN_SECOND;
            }
        }

        // Read the accumulative white list from environment variable
        if (typeof process.env.AWS_LAMBDA_OPCUA_ADAPTER_ACCUMULATIVE_WHITE_LIST != 'undefined') {
            console.log(configInit.name + ":process.env.AWS_LAMBDA_OPCUA_ADAPTER_ACCUMULATIVE_WHITE_LIST: " + process.env.AWS_LAMBDA_OPCUA_ADAPTER_ACCUMULATIVE_WHITE_LIST);
            // Check if the environment variable is string
            if (typeof process.env.AWS_LAMBDA_OPCUA_ADAPTER_ACCUMULATIVE_WHITE_LIST === 'string')
            {
                customerOption.customUploadDataStrategy.enableAccumulativeData = true;
                customerOption.customUploadDataStrategy.accumulativeWhiteList = process.env.AWS_LAMBDA_OPCUA_ADAPTER_ACCUMULATIVE_WHITE_LIST.split(',');
                console.log("customerOption.customUploadDataStrategy.accumulativeWhiteList.length:"+customerOption.customUploadDataStrategy.accumulativeWhiteList.length);
            }
        }
        console.dir(customerOption);

        readFailTolerance = configList.reportTolerance;
        reportStatus = configList.reportStatus;

        console.log(configInit.name + ":configList.keepSessionAlive: " + configList.keepSessionAlive);
        console.log(configInit.name + ":configList.connectionStrategy.maxRetry: " + configList.connectionStrategy.maxRetry);
        console.log(configInit.name + ":configList.connectionStrategy.initialDelay: " + configList.connectionStrategy.initialDelay);
        console.log(configInit.name + ":configList.connectionStrategy.maxDelay: " + configList.connectionStrategy.maxDelay);
        console.log(configInit.name + ":configList.checkServerConfigInterval: " + configList.checkServerConfigInterval);
    });

    jsonFile.readFile(`${folder}/${certConfigName}`, function (err, configList) {
        if (err) {
            throw err;
        }

        if (isEmptyOrWhitespace(configList.certPath)) {
            throw new Error("configList.certPath is empty or whitespace");
        }

        certConfig.certPath = configList.certPath;

        console.log(configInit.name + ":configList.certPath: " + configList.certPath);

    });

    jsonFile.readFile(`${folder}/${serverConfigfileName}`, function (err, configList) {
        if (err) {
            throw err;
        }
        var stats = fs.statSync(`${folder}/${serverConfigfileName}`);
        var serverFileLastModifyTime = stats.mtime;

        configList["serInfo"].forEach((config)=> {
            if (isEmptyOrWhitespace(config.endpointName)) {
                console.log("invalid endpointName");
                return;
            }

            if (isEmptyOrWhitespace(config.endpointUrl)) {
                console.log("invalid endpointUrl");
                return;
            }

            if (config.OpcNodes.length <= 0) {
                console.log("No OpcNodes!");
                return;
            }
            var serverConfig = {
                server: {
                    name: "",
                    url: "",
                    certExist:false
                },
                userIdentity: null,
                subscriptions: [],
                connection: false
            };
            console.log(configInit.name + ": endpointName: " + config.endpointName);
            console.log(configInit.name + ": endpointUrl: " + config.endpointUrl);
            for (let j = 0; j < config.OpcNodes.length; j += 1) {
                serverConfig.subscriptions.push(config.OpcNodes[j]);
                console.log(configInit.name + " serverConfig.subscriptions.id: " + serverConfig.subscriptions[j].id);
                console.log(configInit.name + " serverConfig.subscriptions.displayName: " + serverConfig.subscriptions[j].displayName);
            }
            console.log(configInit.name + " serverConfig.subscriptions node length:" + serverConfig.subscriptions.length);
            serverConfig.server.url = config.endpointUrl;
            serverConfig.server.name = config.endpointName;

            // set default is certificate mode if user didn't set certExist in published_nodes.json
            if ( config.certExist ) {
                serverConfig.server.certExist = config.certExist;
            } else {
                serverConfig.server.certExist = false;
            }
            console.log(configInit.name + " serverConfig.server.certExist: " + serverConfig.server.certExist);
            serverConfig.server.userIdentity = config.userIdentity;
            serverConfigs.push(serverConfig);
            LastModifiedtime = serverFileLastModifyTime;
        });
        callback();
    });
}