class Configuration {

    public static String getConfigReport() {
    	LoggingService.logDebug(MODULE_NAME, "Start get Config Report");
        String ipAddress = IOFogNetworkInterfaceManager.getInstance().getCurrentIpAddress();
        String networkInterface = getNetworkInterfaceInfo();
        ipAddress = "".equals(ipAddress) ? "unable to retrieve ip address" : ipAddress;

        StringBuilder result = new StringBuilder();
        // iofog UUID
        result.append(buildReportLine(getIofogUuidMessage(), isNotBlank(iofogUuid) ? iofogUuid : "not provisioned"));
        //ip address
        result.append(buildReportLine(getIpAddressMessage(), ipAddress));
        // network interface
        result.append(buildReportLine(getConfigParamMessage(NETWORK_INTERFACE), networkInterface));
        // developer mode
        result.append(buildReportLine(getConfigParamMessage(DEV_MODE), (developerMode ? "on" : "off")));
        // controller url
        result.append(buildReportLine(getConfigParamMessage(CONTROLLER_URL), controllerUrl));
        // controller cert dir
        result.append(buildReportLine(getConfigParamMessage(CONTROLLER_CERT), controllerCert));
        // docker url
        result.append(buildReportLine(getConfigParamMessage(DOCKER_URL), dockerUrl));
        // disk usage limit
        result.append(buildReportLine(getConfigParamMessage(DISK_CONSUMPTION_LIMIT), format("%.2f GiB", diskLimit)));
        // disk directory
        result.append(buildReportLine(getConfigParamMessage(DISK_DIRECTORY), diskDirectory));
        // memory ram limit
        result.append(buildReportLine(getConfigParamMessage(MEMORY_CONSUMPTION_LIMIT), format("%.2f MiB", memoryLimit)));
        // cpu usage limit
        result.append(buildReportLine(getConfigParamMessage(PROCESSOR_CONSUMPTION_LIMIT), format("%.2f%%", cpuLimit)));
        // log disk limit
        result.append(buildReportLine(getConfigParamMessage(LOG_DISK_CONSUMPTION_LIMIT), format("%.2f GiB", logDiskLimit)));
        // log file directory
        result.append(buildReportLine(getConfigParamMessage(LOG_DISK_DIRECTORY), logDiskDirectory));
        // log files count
        result.append(buildReportLine(getConfigParamMessage(LOG_FILE_COUNT), format("%d", logFileCount)));
        // log files level
        result.append(buildReportLine(getConfigParamMessage(LOG_LEVEL), format("%s", logLevel)));
        // status update frequency
        result.append(buildReportLine(getConfigParamMessage(STATUS_FREQUENCY), format("%d", statusFrequency)));
        // status update frequency
        result.append(buildReportLine(getConfigParamMessage(CHANGE_FREQUENCY), format("%d", changeFrequency))); 
        // scan devices frequency
        result.append(buildReportLine(getConfigParamMessage(DEVICE_SCAN_FREQUENCY), format("%d", deviceScanFrequency)));
        // post diagnostics frequency
        result.append(buildReportLine(getConfigParamMessage(POST_DIAGNOSTICS_FREQ), format("%d", postDiagnosticsFreq)));
        // log file directory
        result.append(buildReportLine(getConfigParamMessage(WATCHDOG_ENABLED), (watchdogEnabled ? "on" : "off")));
        // gps mode
        result.append(buildReportLine(getConfigParamMessage(GPS_MODE), gpsMode.name().toLowerCase()));
        // gps coordinates
        result.append(buildReportLine(getConfigParamMessage(GPS_COORDINATES), gpsCoordinates));
        //fog type
        result.append(buildReportLine(getConfigParamMessage(FOG_TYPE), fogType.name().toLowerCase()));
        // docker pruning frequency
        result.append(buildReportLine(getConfigParamMessage(DOCKER_PRUNING_FREQUENCY), format("%d", dockerPruningFrequency)));
        // available disk threshold
        result.append(buildReportLine(getConfigParamMessage(AVAILABLE_DISK_THRESHOLD), format("%d", availableDiskThreshold)));
        // is ready to upgrade scan frequency
        result.append(buildReportLine(getConfigParamMessage(READY_TO_UPGRADE_SCAN_FREQUENCY), format("%d", readyToUpgradeScanFrequency)));

        LoggingService.logDebug(MODULE_NAME, "Finished get Config Report");
        
        return result.toString();
    }

}