summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2015-11-12 16:01:58 +0000
committerTed Trask <ttrask01@yahoo.com>2015-11-12 16:01:58 +0000
commitd4a0c067b01f2e7d22d3a1dacba77f216fdbfd5a (patch)
treeec0112e0ff44f77d4556fda1adff93bbc7ca86ce
parent9246785c3c65a536ac2218ff9096ec98fceb5f99 (diff)
downloadacf-provisioning-d4a0c067b01f2e7d22d3a1dacba77f216fdbfd5a.tar.bz2
acf-provisioning-d4a0c067b01f2e7d22d3a1dacba77f216fdbfd5a.tar.xz
Add bulkdumpdevices action to export devices to CSV file
-rw-r--r--provisioning-bulkcreatedevices-html.lsp11
-rw-r--r--provisioning-controller.lua4
-rw-r--r--provisioning-model.lua71
-rw-r--r--provisioning.roles4
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