summaryrefslogtreecommitdiffstats
path: root/provisioning-model.lua
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 /provisioning-model.lua
parent9246785c3c65a536ac2218ff9096ec98fceb5f99 (diff)
downloadacf-provisioning-d4a0c067b01f2e7d22d3a1dacba77f216fdbfd5a.tar.bz2
acf-provisioning-d4a0c067b01f2e7d22d3a1dacba77f216fdbfd5a.tar.xz
Add bulkdumpdevices action to export devices to CSV file
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r--provisioning-model.lua71
1 files changed, 71 insertions, 0 deletions
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