diff options
author | Ted Trask <ttrask01@yahoo.com> | 2015-11-12 16:01:58 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2015-11-12 16:01:58 +0000 |
commit | d4a0c067b01f2e7d22d3a1dacba77f216fdbfd5a (patch) | |
tree | ec0112e0ff44f77d4556fda1adff93bbc7ca86ce /provisioning-model.lua | |
parent | 9246785c3c65a536ac2218ff9096ec98fceb5f99 (diff) | |
download | acf-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.lua | 71 |
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 |