From 0e8a08594aca0be55aaf276432b06f7b8427be27 Mon Sep 17 00:00:00 2001 From: Wouter R Date: Thu, 10 Oct 2013 17:00:16 +0200 Subject: [PATCH 1/2] Update info/logfiles API call to collect print3d logs instead of ultifi logs. Change printer/getProgress to return current, buffered and total gcode lines. Remove unused constants from printer api. --- src/rest/api/api_info.lua | 73 +++++++++++++++++------------------- src/rest/api/api_printer.lua | 17 +++------ 2 files changed, 41 insertions(+), 49 deletions(-) diff --git a/src/rest/api/api_info.lua b/src/rest/api/api_info.lua index 26dc22f..029033c 100644 --- a/src/rest/api/api_info.lua +++ b/src/rest/api/api_info.lua @@ -11,9 +11,10 @@ local LOG_COLLECT_DIRNAME = 'wifibox-logs' local LOG_COLLECT_DIR = TMP_DIR .. '/' .. LOG_COLLECT_DIRNAME local WIFIBOX_LOG_FILENAME = 'wifibox.log' local WIFIBOX_LOG_FILE = TMP_DIR .. '/' .. WIFIBOX_LOG_FILENAME -local ULTIFI_PATH = '/tmp/UltiFi' local SYSLOG_FILENAME = 'syslog' -local ULTIFI_LOG_FILENAME = 'server.log' +local PRINT3D_BASEPATH = '/tmp' +local PRINT3D_LOG_FILENAME_PREFIX = 'print3d-' +local PRINT3D_LOG_FILENAME_SUFFIX = '.log' local LOG_COLLECT_ARCHIVE_FILENAME = LOG_COLLECT_DIRNAME .. '.tgz' local LOG_COLLECT_ARCHIVE_FILE = TMP_DIR .. '/' .. LOG_COLLECT_ARCHIVE_FILENAME @@ -42,41 +43,37 @@ end function M.logfiles(request, response) local rv,msg = lfs.mkdir(LOG_COLLECT_DIR) local rv,msg = lfs.chdir(TMP_DIR) - - local ultip,msg = lfs.attributes(ULTIFI_PATH, 'mode') - - + + --[[ create temporary files ]]-- - + local rv,sig,code = redirectedExecute('cp ' .. WIFIBOX_LOG_FILE .. ' ' .. LOG_COLLECT_DIR) - + local rv,sig,code = os.execute('logread > ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME) - - if ultip and ultip == 'directory' then - for file in lfs.dir(ULTIFI_PATH) do - if file ~= '.' and file ~= '..' then - local srcLogFile = ULTIFI_PATH .. '/' .. file .. '/' .. ULTIFI_LOG_FILENAME - local tgtLogFile = LOG_COLLECT_DIR .. '/' .. file .. '-' .. ULTIFI_LOG_FILENAME - local rv,sig,code = redirectedExecute('cp ' .. srcLogFile .. ' ' .. tgtLogFile) - end + + for file in lfs.dir(PRINT3D_BASEPATH) do + if file:find(PRINT3D_LOG_FILENAME_PREFIX) == 1 and file:find(PRINT3D_LOG_FILENAME_SUFFIX) ~= nil then + local srcLogFile = PRINT3D_BASEPATH .. '/' .. file + local tgtLogFile = LOG_COLLECT_DIR .. '/' .. file + local rv,sig,code = redirectedExecute('cp ' .. srcLogFile .. ' ' .. tgtLogFile) end end - + local rv,sig,code = redirectedExecute('tar czf ' .. LOG_COLLECT_ARCHIVE_FILE .. ' ' .. LOG_COLLECT_DIRNAME) --returns 0 success, 1 error - - + + --[[ add response content ]]-- - + local rv,msg = response:setBinaryFileData(LOG_COLLECT_ARCHIVE_FILE, LOG_COLLECT_ARCHIVE_FILENAME, 'application/x-compressed') if not rv then response:setError("could not set binary data from file '" .. LOG_COLLECT_ARCHIVE_FILE .. "' (" .. msg .. ")") else response:setSuccess() end - - + + --[[ remove temporary files ]]-- - + if ultip and ultip == 'directory' then for file in lfs.dir(ULTIFI_PATH) do if file ~= '.' and file ~= '..' then @@ -85,20 +82,20 @@ function M.logfiles(request, response) end end end - + local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. WIFIBOX_LOG_FILENAME) - + local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME) - + local rv,msg = lfs.rmdir(LOG_COLLECT_DIR) - + local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_ARCHIVE_FILE) end function M.access(request, response) --log:info(" remoteAddress: |"..utils.dump(request.remoteAddress).."|"); --log:info(" controller: |"..utils.dump(accessManager.getController()).."|"); - + -- when there is a controller we check if the printer is idle, -- if so, it should be done printing and we can clear the controller if accessManager.getController() ~= "" then @@ -107,20 +104,20 @@ function M.access(request, response) local rv,msg = printer:getState() if rv then response:setSuccess() - if(state == "idle") then -- TODO: define in constants somewhere + if(state == "idle") then -- TODO: define in constants somewhere accessManager.setController("") -- clear controller end else response:setError(msg) - return + return end end - + local hasControl = accessManager.hasControl(request.remoteAddress) response:setSuccess() response:addData('hasControl', hasControl) - - return + + return end function M.status(request, response) @@ -165,20 +162,20 @@ function M.status(request, response) response:addData('state', rv) else response:setError(msg) - return + return end ]]--- ----TODO: reuse printer/state api - + --printerAPI.temperature(request, response) --printerAPI.progress(request, response) --printerAPI.state(request, response) - + -- access M.access(request, response) - + response:addData('v', 8) - + end return M diff --git a/src/rest/api/api_printer.lua b/src/rest/api/api_printer.lua index 77ebc44..fed9fb5 100644 --- a/src/rest/api/api_printer.lua +++ b/src/rest/api/api_printer.lua @@ -11,12 +11,6 @@ local M = { } -local ULTIFI_BASE_PATH = '/tmp/UltiFi' -local TEMPERATURE_FILE = 'temp.out' -local PROGRESS_FILE = 'progress2.out' -local COMMAND_FILE = 'command.in' -local GCODE_TMP_FILE = 'combined.gc' - function M._global(request, response) -- TODO: list all printers (based on /dev/ttyACM* and /dev/ttyUSB*) response:setSuccess() @@ -48,16 +42,17 @@ function M.progress(request, response) local printer,msg = printerUtils.createPrinterOrFail(argId, response) if not printer then return end - -- NOTE: despite their names, `currentLine` is still the error indicator and `numLines` the message in such case. - local currentLine,numLines = printer:getProgress() + -- NOTE: despite their names, `currentLine` is still the error indicator and `bufferedLines` the message in such case. + local currentLine,bufferedLines,totalLines = printer:getProgress() response:addData('id', argId) if currentLine then response:setSuccess() response:addData('current_line', currentLine) - response:addData('num_lines', numLines) + response:addData('buffered_lines', bufferedLines) + response:addData('total_lines', totalLines) else - response:setError(numLines) + response:setError(bufferedLines) end end @@ -153,7 +148,7 @@ function M.print_POST(request, response) elseif controllerIP == request.remoteAddress then hasControl = true end - + log:info(" hasControl: "..utils.dump(hasControl)) if not hasControl then response:setFail("No control access") From 43eaab4cbfd03a7b39395bd11338b133368ffab4 Mon Sep 17 00:00:00 2001 From: Wouter R Date: Thu, 10 Oct 2013 17:17:23 +0200 Subject: [PATCH 2/2] Fix cleanup in info/logfiles api. --- src/rest/api/api_info.lua | 60 +++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/src/rest/api/api_info.lua b/src/rest/api/api_info.lua index dd753be..a8c5634 100644 --- a/src/rest/api/api_info.lua +++ b/src/rest/api/api_info.lua @@ -43,14 +43,14 @@ end function M.logfiles(request, response) local rv,msg = lfs.mkdir(LOG_COLLECT_DIR) local rv,msg = lfs.chdir(TMP_DIR) - - + + --[[ create temporary files ]]-- - + local rv,sig,code = redirectedExecute('cp ' .. WIFIBOX_LOG_FILE .. ' ' .. LOG_COLLECT_DIR) - + local rv,sig,code = os.execute('logread > ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME) - + for file in lfs.dir(PRINT3D_BASEPATH) do if file:find(PRINT3D_LOG_FILENAME_PREFIX) == 1 and file:find(PRINT3D_LOG_FILENAME_SUFFIX) ~= nil then local srcLogFile = PRINT3D_BASEPATH .. '/' .. file @@ -58,44 +58,42 @@ function M.logfiles(request, response) local rv,sig,code = redirectedExecute('cp ' .. srcLogFile .. ' ' .. tgtLogFile) end end - + local rv,sig,code = redirectedExecute('tar czf ' .. LOG_COLLECT_ARCHIVE_FILE .. ' ' .. LOG_COLLECT_DIRNAME) --returns 0 success, 1 error - - + + --[[ add response content ]]-- - + local rv,msg = response:setBinaryFileData(LOG_COLLECT_ARCHIVE_FILE, LOG_COLLECT_ARCHIVE_FILENAME, 'application/x-compressed') if not rv then response:setError("could not set binary data from file '" .. LOG_COLLECT_ARCHIVE_FILE .. "' (" .. msg .. ")") else response:setSuccess() end - - + + --[[ remove temporary files ]]-- - - if ultip and ultip == 'directory' then - for file in lfs.dir(ULTIFI_PATH) do - if file ~= '.' and file ~= '..' then - local tgtLogFile = LOG_COLLECT_DIR .. '/' .. file .. '-' .. ULTIFI_LOG_FILENAME - local rv,sig,code = redirectedExecute('rm ' .. tgtLogFile) - end + + for file in lfs.dir(LOG_COLLECT_DIR) do + if file:find(PRINT3D_LOG_FILENAME_PREFIX) == 1 and file:find(PRINT3D_LOG_FILENAME_SUFFIX) ~= nil then + local tgtLogFile = LOG_COLLECT_DIR .. '/' .. file + local rv,sig,code = redirectedExecute('rm ' .. tgtLogFile) end end - + local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. WIFIBOX_LOG_FILENAME) - + local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_DIR .. '/' .. SYSLOG_FILENAME) - + local rv,msg = lfs.rmdir(LOG_COLLECT_DIR) - + local rv,sig,code = redirectedExecute('rm ' .. LOG_COLLECT_ARCHIVE_FILE) end function M.access(request, response) --log:info(" remoteAddress: |"..utils.dump(request.remoteAddress).."|"); --log:info(" controller: |"..utils.dump(accessManager.getController()).."|"); - + -- when there is a controller we check if the printer is idle, -- if so, it should be done printing and we can clear the controller if accessManager.getController() ~= "" then @@ -104,31 +102,31 @@ function M.access(request, response) local rv,msg = printer:getState() if rv then response:setSuccess() - if(state == "idle") then -- TODO: define in constants somewhere + if(state == "idle") then -- TODO: define in constants somewhere accessManager.setController("") -- clear controller end else response:setError(msg) - return + return end end - + local hasControl = accessManager.hasControl(request.remoteAddress) response:setSuccess() response:addData('hasControl', hasControl) - - return + + return end function M.status(request, response) - + printerAPI.temperature(request, response) printerAPI.progress(request, response) printerAPI.state(request, response) M.access(request, response) - + response:addData('v', 9) - + end return M