diff options
-rw-r--r-- | provisioning-bulkcreatedevices-html.lsp | 11 | ||||
-rw-r--r-- | provisioning-controller.lua | 4 | ||||
-rw-r--r-- | provisioning-model.lua | 71 | ||||
-rw-r--r-- | provisioning.roles | 4 |
4 files changed, 88 insertions, 2 deletions
diff --git a/provisioning-bulkcreatedevices-html.lsp b/provisioning-bulkcreatedevices-html.lsp new file mode 100644 index 0000000..5551bee --- /dev/null +++ b/provisioning-bulkcreatedevices-html.lsp @@ -0,0 +1,11 @@ +<% local form, viewlibrary, page_info, session = ... +htmlviewfunctions = require("htmlviewfunctions") +html = require("acf.html") +%> + +<% htmlviewfunctions.displayitem(form, page_info) %> + +<% + local viewtype = cfe({type="hidden", value="stream"}) + htmlviewfunctions.displayitem(cfe({type="form", value={viewtype=viewtype}, label="Bulk Dump Devices", option="Dump", action="bulkdumpdevices"}), page_info) +%> diff --git a/provisioning-controller.lua b/provisioning-controller.lua index 2a81481..70451e3 100644 --- a/provisioning-controller.lua +++ b/provisioning-controller.lua @@ -162,4 +162,8 @@ mymodule.bulkcreatedevices = function( self ) return self.handle_form(self, self.model.get_bulk_create_request, self.model.bulk_create_devices, self.clientdata, "Create", "Bulk Create Devices", "Devices Created") end +mymodule.bulkdumpdevices = function( self ) + return self.handle_form(self, self.model.get_bulk_dump_request, self.model.bulk_dump_devices, self.clientdata, "Dump", "Bulk Dump Devices") +end + return mymodule diff --git a/provisioning-model.lua b/provisioning-model.lua index 0620018..05dc198 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -2417,4 +2417,75 @@ mymodule.bulk_create_devices = function(self, devicelist) return devicelist end +mymodule.get_bulk_dump_request = function(self, clientdata) + local retval = {} + return cfe({ type="group", value=retval, label="Dump Multiple Devices" }) +end + +mymodule.bulk_dump_devices = function(self, dumprequest) + dumprequest.value.devices = cfe({type="raw", value={}, label="devices.csv"}) + local res, err = pcall(function() + local connected = databaseconnect() + + local classes = {} + local reverseclasses = {} + local devicevalues = {} + local columns = {} + local reversecolumns = {} + local devices = mymodule.list_devices(self, {}) + for i,d in ipairs(devices.value.result.value) do + -- Capture all of the classes + for class in pairs(d) do + if class ~= "device_id" and not reverseclasses[class] then + classes[#classes+1] = class + reverseclasses[class] = #classes + end + end + + -- Capture all of the params + devicevalues[i] = get_device_values(d.device_id) + for class,value in pairs(devicevalues[i].value) do + for param in pairs(value) do + if not reversecolumns[class.."."..param] then + columns[#columns+1] = class.."."..param + reversecolumns[class.."."..param] = #columns + end + end + end + end + table.sort(classes) + table.sort(columns) + + local device = {} + for i,c in ipairs(classes) do device[#device+1] = c end + for i,p in ipairs(columns) do device[#device+1] = p end + dumprequest.value.devices.value[#dumprequest.value.devices.value+1] = table.concat(device, ",") + for i,d in ipairs(devicevalues) do + device = {} + for j,c in ipairs(classes) do + device[#device+1] = devices.value.result.value[i][c] or "" + end + for j,p in ipairs(columns) do + local class,param = string.match(p, "([^.]*)%.(.*)") + if d.value[class] and d.value[class][param] then + device[#device+1] = tostring(d.value[class][param]) + else + device[#device+1] = "" + end + end + + dumprequest.value.devices.value[#dumprequest.value.devices.value+1] = table.concat(device, ",") + end + + if connected then provdb.databasedisconnect() end + end) + if not res and err then + dumprequest.errtxt = err + end + + dumprequest.value.devices.value = table.concat(dumprequest.value.devices.value, "\n") + + return dumprequest +end + return mymodule diff --git a/provisioning.roles b/provisioning.roles index e9a7bb0..eafe019 100644 --- a/provisioning.roles +++ b/provisioning.roles @@ -1,3 +1,3 @@ -EDITOR=provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:searchbyextension,provisioning:searchbymac,provisioning:editdeviceparams,provisioning:listrequests,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices +EDITOR=provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:searchbyextension,provisioning:searchbymac,provisioning:editdeviceparams,provisioning:listrequests,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices,provisioning:bulkdumpdevices EXPERT=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:listclassgroups,provisioning:editclassgroup,provisioning:createclassgroup,provisioning:deleteclassgroup,provisioning:listclasses,provisioning:editclass,provisioning:createclass,provisioning:deleteclass,provisioning:listgroups,provisioning:editgroup,provisioning:creategroup,provisioning:deletegroup,provisioning:listparams,provisioning:editparam,provisioning:createparam,provisioning:deleteparam,provisioning:overridedeviceparams,provisioning:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:getdevicevalues -ADMIN=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:listclassgroups,provisioning:editclassgroup,provisioning:createclassgroup,provisioning:deleteclassgroup,provisioning:listclasses,provisioning:editclass,provisioning:createclass,provisioning:deleteclass,provisioning:listgroups,provisioning:editgroup,provisioning:creategroup,provisioning:deletegroup,provisioning:listparams,provisioning:editparam,provisioning:createparam,provisioning:deleteparam,provisioning:editdeviceparams,provisioning:overridedeviceparams,provisioning:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:searchbyextension,provisioning:searchbymac,provisioning:getdevicevalues,provisioning:dumpdatabase,provisioning:getclassvalues,provisioning:listrequests,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices +ADMIN=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:listclassgroups,provisioning:editclassgroup,provisioning:createclassgroup,provisioning:deleteclassgroup,provisioning:listclasses,provisioning:editclass,provisioning:createclass,provisioning:deleteclass,provisioning:listgroups,provisioning:editgroup,provisioning:creategroup,provisioning:deletegroup,provisioning:listparams,provisioning:editparam,provisioning:createparam,provisioning:deleteparam,provisioning:editdeviceparams,provisioning:overridedeviceparams,provisioning:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:searchbyextension,provisioning:searchbymac,provisioning:getdevicevalues,provisioning:dumpdatabase,provisioning:getclassvalues,provisioning:listrequests,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices,provisioning:bulkdumpdevices |