diff --git a/src/main.lua b/src/main.lua index 097104f..d839669 100644 --- a/src/main.lua +++ b/src/main.lua @@ -125,7 +125,7 @@ end -- @treturn bool True on success, false on error. local function setupLogger() local logStream = io.stderr -- use stderr as hard-coded default target - local logLevel = log.LEVEL.debug -- use debug logging as hard-coded default level + local logLevel = log.LEVEL.verbose -- use verbose logging as hard-coded default level local logTargetSetting = settings.getSystemKey('logfile') local logLevelSetting = settings.get('system.log.level') @@ -178,7 +178,7 @@ local function setupLogger() end if logLevelError then - log:error("uci config specifies invalid log level '" .. logLevelSetting .. "', using debug level as fallback") + log:error("uci config specifies invalid log level '" .. logLevelSetting .. "', using verbose level as fallback") rv = false end @@ -222,10 +222,10 @@ local function main(environment) local rq = RequestClass.new(environment, postData, confDefaults.DEBUG_API) if rq:getRequestMethod() == 'CMDLINE' and rq:get('autowifi') ~= nil then - + local version = updater.formatVersion(updater.getCurrentVersion()); log:info("Doodle3D version: "..util.dump(version)) - + log:info("running in autowifi mode") local rv,msg = setupAutoWifiMode() @@ -255,7 +255,7 @@ local function main(environment) .. "/" .. (rq:getRealApiFunctionName() or "")) if rq:getRequestMethod() ~= 'CMDLINE' then log:info("remote IP/port: " .. rq:getRemoteHost() .. "/" .. rq:getRemotePort()) - --log:debug("user agent: " .. rq:getUserAgent()) + --log:verbose("user agent: " .. rq:getUserAgent()) end local response, err = rq:handle() diff --git a/src/network/netconfig.lua b/src/network/netconfig.lua index addf197..3c2bbb4 100644 --- a/src/network/netconfig.lua +++ b/src/network/netconfig.lua @@ -25,9 +25,9 @@ M.WWW_RENAME_NAME = '/www-regular' M.CONNECTING_FAILED = -1 M.NOT_CONNECTED = 0 M.CONNECTING = 1 -M.CONNECTED = 2 -M.CREATING = 3 -M.CREATED = 4 +M.CONNECTED = 2 +M.CREATING = 3 +M.CREATED = 4 local function reloadBit(dlist, itemname) if dlist[itemname] == nil then dlist[itemname] = '' end @@ -62,10 +62,10 @@ function M.switchConfiguration(components) for k,v in pairs(components) do local fname = k .. '_' .. v if type(reconf[fname]) == 'function' then - log:debug("reconfiguring component '" .. k .. "' (" .. v .. ")") + log:verbose("reconfiguring component '" .. k .. "' (" .. v .. ")") reconf[fname](dirtyList) else - log:warn("unknown component or action '" .. fname .. "' skipped") + log:warning("unknown component or action '" .. fname .. "' skipped") end end @@ -84,15 +84,15 @@ function M.commitComponent(c) end function M.reloadComponent(c, silent) - log:info("reloading component '" .. c .. "'") + log:info("reloading component '" .. c .. "'") local command = 'reload' local cmd = '/etc/init.d/' .. c .. ' '..command - if silent ~= nil and silent then + if silent ~= nil and silent then cmd = cmd .. ' &> /dev/null' os.execute(cmd) else rv = utils.captureCommandOutput(cmd) - log:debug(" result reloading component '" .. c .. "' (cmd: '"..cmd.."'): \n"..utils.dump(rv)) + log:verbose(" result reloading component '" .. c .. "' (cmd: '"..cmd.."'): \n"..utils.dump(rv)) end end @@ -213,7 +213,7 @@ function reconf.dnsredir_add(dirtyList) local redirText = '/#/' .. settings.get('network.ap.address') local sname = utils.getUciSectionName('dhcp', 'dnsmasq') if sname == nil then return log:error("dhcp config does not contain a dnsmasq section") end - if uci:get('dhcp', sname, 'address') ~= nil then return log:debug("DNS address redirection already in place, not re-adding", false) end + if uci:get('dhcp', sname, 'address') ~= nil then return log:verbose("DNS address redirection already in place, not re-adding", false) end uci:set('dhcp', sname, 'address', {redirText}) commitBit(dirtyList, 'dhcp'); reloadBit(dirtyList, 'dnsmasq') @@ -230,7 +230,7 @@ end --TODO: handle os.rename() return values (nil+msg on error) function reconf.wwwcaptive_add(dirtyList) if utils.exists(M.WWW_CAPTIVE_INDICATOR) then - return log:debug("WWW captive directory already in place, not redoing", false) + return log:verbose("WWW captive directory already in place, not redoing", false) end local rv,reason = os.rename('/www', M.WWW_RENAME_NAME) if rv == true then @@ -241,7 +241,7 @@ function reconf.wwwcaptive_add(dirtyList) end end function reconf.wwwcaptive_rm(dirtyList) - if not utils.exists(M.WWW_CAPTIVE_INDICATOR) then return log:debug("WWW captive directory not in place, not undoing", false) end + if not utils.exists(M.WWW_CAPTIVE_INDICATOR) then return log:verbose("WWW captive directory not in place, not undoing", false) end os.remove('/www') if os.rename(M.WWW_RENAME_NAME, '/www') ~= true then return log:error("Could not rename " .. M.WWW_RENAME_NAME .. " to /www") @@ -275,16 +275,16 @@ end -- @return True on success or nil+msg on error. function M.setupAccessPoint(ssid) M.setStatus(M.CREATING,"Creating access point '"..ssid.."'..."); - - -- add access point configuration + + -- add access point configuration M.switchConfiguration({apnet="add_noreload"}) wifi.activateConfig(ssid) -- NOTE: dnsmasq must be reloaded after network or it will be unable to serve IP addresses M.switchConfiguration({ wifiiface="add", network="reload", staticaddr="add", dhcppool="add_noreload", wwwredir="add", dnsredir="add" }) M.switchConfiguration({dhcp="reload"}) - + M.setStatus(M.CREATED,"Access point created"); - + local ds = wifi.getDeviceState() --log:info(" network/status: ") log:info(" ssid: ".. utils.dump(ds.ssid)) @@ -298,10 +298,10 @@ function M.setupAccessPoint(ssid) log:info(" signal: ".. utils.dump(ds.signal)) log:info(" noise: ".. utils.dump(ds.noise)) log:info(" raw: ".. utils.dump(ds)) - + local localip = wifi.getLocalIP() log:info(" localip: "..utils.dump(localip))]]-- - + return true end @@ -311,14 +311,14 @@ end -- @tparam string ssid The SSID to use for the access point. -- @return True on success or nil+msg on error. function M.enableAccessPoint(ssid) - log:debug("enableAccessPoint ssid: ".. utils.dump(ssid)) - + log:verbose("enableAccessPoint ssid: ".. utils.dump(ssid)) + M.switchConfiguration{apnet="add_noreload"} wifi.activateConfig(ssid) - + local ds = wifi.getDeviceState() - log:debug(" ssid: ".. utils.dump(ds.ssid)) - + log:verbose(" ssid: ".. utils.dump(ds.ssid)) + return true end @@ -332,7 +332,7 @@ end function M.associateSsid(ssid, passphrase, recreate) log:info("netconfig:associateSsid: "..(ssid or "")..", "..(recreate or "")) M.setStatus(M.CONNECTING,"Connecting..."); - + -- see if previously configured network for given ssid exists local cfg = nil for _, net in ipairs(wifi.getConfigs()) do @@ -341,7 +341,7 @@ function M.associateSsid(ssid, passphrase, recreate) break end end - + -- if not, or if newly created configuration is requested, create a new configuration if cfg == nil or recreate ~= nil then local scanResult, msg = wifi.getScanInfo(ssid) @@ -365,16 +365,16 @@ function M.associateSsid(ssid, passphrase, recreate) --M.switchConfiguration{ wifiiface="add", apnet="rm", staticaddr="rm", dhcppool="rm", wwwredir="rm", dnsredir="rm", wireless="reload" } --M.switchConfiguration{ wifiiface="add", staticaddr="rm", dhcppool="rm", wwwredir="rm", dnsredir="rm", wireless="reload" } M.switchConfiguration({ wifiiface="add", staticaddr="rm", dhcppool="rm", wwwredir="rm", dnsredir="rm" }) - + -- we check if we get a ssid and ip in max 5 seconds - -- if not there is probably a issue + -- if not there is probably a issue local attemptInterval = 1 local maxAttempts = 5 local attempt = 0 local nextAttemptTime = os.time() while true do if os.time() > nextAttemptTime then - log:debug("associated check "..utils.dump(attempt).."/"..utils.dump(maxAttempts)) + log:verbose("associated check "..utils.dump(attempt).."/"..utils.dump(maxAttempts)) if wifi.getLocalIP() ~= nil and wifi.getDeviceState().ssid == ssid then break else @@ -390,18 +390,18 @@ function M.associateSsid(ssid, passphrase, recreate) end end end - + -- signin to connect.doodle3d.com local success, output = signin.signin() if success then log:info("Signed in") - else + else log:info("Signing in failed") end - + -- report we are connected after signin attempt M.setStatus(M.CONNECTED,"Connected"); - + return true end --- Disassociate wlan device as client from all SSID's. @@ -411,7 +411,7 @@ end function M.disassociate() M.setStatus(M.NOT_CONNECTED,"Not connected"); - + wifi.activateConfig() return wifi.restart() end diff --git a/src/network/signin.lua b/src/network/signin.lua index 7f20f32..3ad9fe2 100644 --- a/src/network/signin.lua +++ b/src/network/signin.lua @@ -28,54 +28,54 @@ local SIGNING_IN_STATUS = 2 -- function M.signin() - --log:debug("signin:signin"); + --log:verbose("signin:signin"); local code, msg = M.getStatus() - --log:debug(" status: "..utils.dump(code).." "..utils.dump(msg)); + --log:verbose(" status: "..utils.dump(code).." "..utils.dump(msg)); -- if we are already signin in, skip if(code == SIGNING_IN_STATUS) then - log:debug(" skipping signin") + log:verbose(" skipping signin") return end M.setStatus(SIGNING_IN_STATUS,"signing in") local baseurl = "http://connect.doodle3d.com/api/signin.php" - + local attemptInterval = 1 local maxAttempts = 20 local attempt = 0 - + local nextAttemptTime = os.time() - + local localip = "" local signinResponse = "" while true do if os.time() > nextAttemptTime then - log:debug("signin attempt "..utils.dump(attempt).."/"..utils.dump(maxAttempts)) + log:verbose("signin attempt "..utils.dump(attempt).."/"..utils.dump(maxAttempts)) local signedin = false local localip = wifi.getLocalIP(); - --log:debug(" localip: "..utils.dump(localip)) + --log:verbose(" localip: "..utils.dump(localip)) if localip ~= nil then - + local wifiboxid = wifi.getSubstitutedSsid(settings.get('network.cl.wifiboxid')) wifiboxid = urlcode.escape(wifiboxid) - + local cmd = "wget -q -T 2 -t 1 -O - "..baseurl.."?wifiboxid="..wifiboxid.."\\&localip="..localip; signinResponse = utils.captureCommandOutput(cmd); - log:debug(" signin response: \n"..utils.dump(signinResponse)) + log:verbose(" signin response: \n"..utils.dump(signinResponse)) local success = signinResponse:match('"status":"success"') - log:debug(" success: "..utils.dump(success)) + log:verbose(" success: "..utils.dump(success)) if success ~= nil then signedin = true else - log:warn("signin failed request failed (response: "..utils.dump(signinResponse)..")") + log:warning("signin failed request failed (response: "..utils.dump(signinResponse)..")") end - else - log:warn("signin failed no local ip found (attempt: "..utils.dump(attempt).."/"..utils.dump(maxAttempts)..")") + else + log:warning("signin failed no local ip found (attempt: "..utils.dump(attempt).."/"..utils.dump(maxAttempts)..")") end - + if signedin then break else @@ -90,7 +90,7 @@ function M.signin() end end end - + M.setStatus(IDLE_STATUS,"idle") return string.len(signinResponse) > 0, signinResponse end diff --git a/src/network/wlanconfig.lua b/src/network/wlanconfig.lua index ad2a5aa..1b149c8 100644 --- a/src/network/wlanconfig.lua +++ b/src/network/wlanconfig.lua @@ -126,9 +126,10 @@ end --returns the wireless local ip address function M.getLocalIP() local ifconfig, rv = utils.captureCommandOutput("ifconfig wlan0"); - --log:debug(" ifconfig: \n"..utils.dump(ifconfig)); - local localip = ifconfig:match('inet addr:([%d\.]+)') - return localip; + --log:verbose(" ifconfig: \n"..utils.dump(ifconfig)); + + local localip = ifconfig:match('inet addr:([%d%.]+)') + return localip end function M.getDeviceName() @@ -241,7 +242,7 @@ function M.createConfigFromScanInfo(info, passphrase, disabled) uci:foreach('wireless', 'wifi-iface', function(s) --if s.bssid == info.bssid then if s.ssid == info.ssid then - log:debug("removing old wireless config for net '" .. s.ssid .. "'") + log:verbose("removing old wireless config for net '" .. s.ssid .. "'") uci:delete('wireless', s['.name']) -- return false --keep looking, just in case multiple entries with this bssid exist end diff --git a/src/rest/api/api_printer.lua b/src/rest/api/api_printer.lua index 7376db5..9cd44bc 100644 --- a/src/rest/api/api_printer.lua +++ b/src/rest/api/api_printer.lua @@ -194,7 +194,7 @@ function M.print_POST(request, response) end if argIsFirst == true then - log:debug("clearing all gcode for " .. printer:getId()) + log:verbose("clearing all gcode for " .. printer:getId()) response:addData('gcode_clear',true) local rv,msg = printer:clearGcode() diff --git a/src/rest/api/api_sketch.lua b/src/rest/api/api_sketch.lua index 021548a..06375d9 100644 --- a/src/rest/api/api_sketch.lua +++ b/src/rest/api/api_sketch.lua @@ -133,7 +133,7 @@ function M._global_POST(request, response) local sketchIdx = listSize > 0 and sketches[listSize] + 1 or 1 local sketchFile = M.SKETCH_DIR .. '/' .. constructSketchFilename(sketchIdx) - log:debug("saving sketch #" .. sketchIdx .. " (" .. argData:len() .. " bytes)") + log:verbose("saving sketch #" .. sketchIdx .. " (" .. argData:len() .. " bytes)") local saveFile,msg = io.open(sketchFile, 'w') if not saveFile then diff --git a/src/rest/request.lua b/src/rest/request.lua index 48d4773..5c52c8f 100644 --- a/src/rest/request.lua +++ b/src/rest/request.lua @@ -167,7 +167,8 @@ setmetatable(M, { }) --This function initializes itself using various environment variables, the arg array and the given postData ---NOTE: if debugging is enabled, commandline arguments 'm' and 'f' override requested module and function +--NOTE: if debugging is enabled, commandline argument 'p' (path) overrides requested module and function and +-- 'r' (rqType) overrides request method function M.new(environment, postData, debugEnabled) local self = setmetatable({}, M) diff --git a/src/rest/response.lua b/src/rest/response.lua index 869b813..580d2b7 100644 --- a/src/rest/response.lua +++ b/src/rest/response.lua @@ -15,7 +15,7 @@ local settings = require('util.settings') local defaults = require('conf_defaults') local utils = require('util.utils') local log = require('util.logger') - + local M = {} M.__index = M @@ -167,10 +167,10 @@ function M:send() io.write("\r\n") io.write(self.binaryData) end - - if self.body.status ~= "success" then - log:debug("Response:"..utils.dump(self.body.status).." ("..utils.dump(self.body.msg)..")") - end + + if self.body.status ~= "success" then + log:verbose("Response:"..utils.dump(self.body.status).." ("..utils.dump(self.body.msg)..")") + end end --- Sets the response object to return binary data instead of JSON as its body. diff --git a/src/script/d3d-updater.lua b/src/script/d3d-updater.lua index 9ba4ed1..9cdb0ff 100644 --- a/src/script/d3d-updater.lua +++ b/src/script/d3d-updater.lua @@ -82,7 +82,7 @@ local baseUrl = M.DEFAULT_BASE_URL -- default, can be overwritten by M.setBaseUr -- @string msg The message to log. local function P(lvl, msg) if log then - if lvl == -1 then log:debug(msg) + if lvl == -1 then log:verbose(msg) elseif lvl == 0 or lvl == 1 then log:info(msg) end else @@ -90,7 +90,7 @@ local function P(lvl, msg) end end ---- Log a debug message, this function wraps @{P}. +--- Log a debug/verbose message, this function wraps @{P}. -- The message will be logged with level -1 and be prefixed with '(DBG)'. -- @string msg The message to log. local function D(msg) P(-1, (log and msg or "(DBG) " .. msg)) end diff --git a/src/util/logger.lua b/src/util/logger.lua index e10072c..39ac173 100644 --- a/src/util/logger.lua +++ b/src/util/logger.lua @@ -13,30 +13,31 @@ local utils = require('util.utils') local M = {} -local logLevel, logVerbose, logStream +local logLevel, logVerboseFmt, logStream ---- Available log levels +--- Available log levels (starting at 1) -- @table LEVEL M.LEVEL = { - 'debug', -- for debug messages - 'info', -- for informational messages - 'warn', -- for warnings (something is wrong/fishy but not neccesarily problematic) - 'error', -- for recoverable errors - 'fatal' -- for unrecoverable errors + 'quiet', -- not used for logging, only for setting levels + 'error', -- fatal or non-fatal error condition + 'warning', -- possibly troublesome situation + 'info', -- information about what the application is doing + 'verbose', -- extra trail information on what the application is doing + 'bulk' -- debug information (in large amounts) } --- M.LEVEL already has idx=>name entries, now create name=>idx entries +-- M.LEVEL already has idx=>name entries, now create name=>idx entries so it can be indexed both ways for i,v in ipairs(M.LEVEL) do M.LEVEL[v] = i end -local function log(level, msg, verbose) - if level >= logLevel then +local function log(level, msg, verboseFmt) + if level <= logLevel then local now = os.date('%m-%d %H:%M:%S') local i = debug.getinfo(3) --the stack frame just above the logger call - local v = verbose - if v == nil then v = logVerbose end + local v = verboseFmt + if v == nil then v = logVerboseFmt end local name = i.name or "(nil)" local vVal = 'nil' local m = (type(msg) == 'string') and msg or utils.dump(msg) @@ -52,21 +53,30 @@ end --- Initializes the logger. -- @tparam @{util.logger.LEVEL} level Minimum level of messages to log. -- @tparam bool verbose Write verbose log messages (include file/line inforomation). -function M:init(level, verbose) - logLevel = level or M.LEVEL.warn - logVerbose = verbose or false +function M:init(level, verboseFmt) + logLevel = level or M.LEVEL.warning + logVerboseFmt = verboseFmt or false logStream = stream or io.stdout end +function M:setLevel(level, verboseFmt) + logLevel = level or M.LEVEL.warning + logVerboseFmt = verboseFmt or false +end + -- pass nil as stream to reset to stdout function M:setStream(stream) logStream = stream or io.stdout end -function M:debug(msg, verbose) log(M.LEVEL.debug, msg, verbose); return true end -function M:info(msg, verbose) log(M.LEVEL.info, msg, verbose); return true end -function M:warn(msg, verbose) log(M.LEVEL.warn, msg, verbose); return true end -function M:error(msg, verbose) log(M.LEVEL.error, msg, verbose); return false end -function M:fatal(msg, verbose) log(M.LEVEL.fatal, msg, verbose); return false end +function M:getLevel() + return logLevel, logVerboseFmt +end + +function M:error(msg, verboseFmt) log(M.LEVEL.error, msg, verboseFmt); return false end +function M:warning(msg, verboseFmt) log(M.LEVEL.warning, msg, verboseFmt); return true end +function M:info(msg, verboseFmt) log(M.LEVEL.info, msg, verboseFmt); return true end +function M:verbose(msg, verboseFmt) log(M.LEVEL.verbose, msg, verboseFmt); return true end +function M:bulk(msg, verboseFmt) log(M.LEVEL.bulk, msg, verboseFmt); return true end return M diff --git a/src/util/printer.lua b/src/util/printer.lua index 4bc1670..13ec827 100644 --- a/src/util/printer.lua +++ b/src/util/printer.lua @@ -81,7 +81,7 @@ end --returns a printer instance or nil (and sets error state on response in the latter case) function M.createPrinterOrFail(deviceId, response) - --log:debug("API:printer:createPrinterOrFail: "..utils.dump(deviceId)) + --log:verbose("API:printer:createPrinterOrFail: "..utils.dump(deviceId)) local msg,printer = nil, nil if deviceId == nil or deviceId == "" then @@ -98,6 +98,8 @@ function M.createPrinterOrFail(deviceId, response) return nil end + printer:setLocalLogLevel(log:getLevel()) + return printer end