lua api - mellotron - 05.08.2023
hi please i need your help, i use this lua api code to get json data and save it on csv file but when many user send request i have the lines that get mixed up. please how to fixe it.
Code: <?
require('apps')
require('socket.url')
action = socket.url.unescape( getvar('action') or 'none' )
storagename = socket.url.unescape( getvar('storagename') or 'none')
format = socket.url.unescape( getvar('format') or 'string' )
storagevalue = socket.url.unescape( getvar('value') or '{}')
-- Modification pour gérer le nom de fichier et le répertoire
filename = socket.url.unescape( getvar('storagename') or 'none')
folder = '/home/ftp/Rapport_SatCl/Jour/'
if action == 'storageset' then
if storagename ~= 'none' then
if format == 'json' then
storagevalue = json.decode(storagevalue)
end
-- Création et enregistrement du fichier CSV
if filename ~= 'none' then
local ip = ngx.var.remote_addr
local filepath = folder..storagename..".csv"
local file = io.open(filepath, "a")
-- Ajout des entêtes de colonnes
if file:seek('end') == 0 then
file:write("datetime;agenceName;name;caisse;cheque;gestion_de_compte;autre_service;tres_satisfait;satisfait;un_peu_satifait;pas_satisfait;pas_du_tout_satisfait;pas_du_tout;pas_vraiment;plutot_bien;bien;tres_bien;oui;non;commentaire;telephone\n")
end
for i, row in ipairs(storagevalue) do
file:write( row['datetime'] ..";"..row['agenceName']..";"..row['name']..";" .. row['caisse'] .. ";" .. row['cheque'] .. ";" .. row['gestion_de_compte'] .. ";" ..row['autres_services'] .. ";" .. row['tres_satisfait'] .. ";" .. row['satisfait'] .. ";" .. row['un_peu_satifait'] .. ";" .. row['pas_satisfait'] .. ";" .. row['pas_du_tout_satisfait'] .. ";" ..row['pas_du_tout']..";" ..row['pas_vraiment'] .. ";" .. row['plutot_bien'] .. ";" .. row['bien'] .. ";" .. row['tres_bien'] ..";" .. row['oui'] .. ";" .. row['non'] .. ";" .. row['commentaire'] .. ";" .. row['telephone'] .. "\n")
end
file:close()
print('file saved as: ' .. filepath)
else
print('no filename specified')
end
end
?>
RE: lua api - admin - 07.08.2023
You can create a scheduled script to write data to CSV and use storage lists for storing temporary entries. This will solve the issue with writing in parallel.
This code adds an entry to the end of the list named mylist. Note that the value can only be a string, but not a Lua table.
Code: key = 'mylist'
value = 'some string value'
storage.exec('rpush', key, value)
This code reads all entries from the list named mylist. All read entries are removed. New entries entries that can be added when the script is already running are not affected.
Code: key = 'mylist'
values = storage.exec('lrange', key, 0, -1)
if type(values) == 'table' then
for _, value in ipairs(values) do
-- do something with value
end
-- remove read entries from the list
storage.exec('ltrim', key, #values, -1)
end
RE: lua api - mellotron - 13.08.2023
(07.08.2023, 08:22)admin Wrote: You can create a scheduled script to write data to CSV and use storage lists for storing temporary entries. This will solve the issue with writing in parallel.
This code adds an entry to the end of the list named mylist. Note that the value can only be a string, but not a Lua table.
Code: key = 'mylist'
value = 'some string value'
storage.exec('rpush', key, value)
This code reads all entries from the list named mylist. All read entries are removed. New entries entries that can be added when the script is already running are not affected.
Code: key = 'mylist'
values = storage.exec('lrange', key, 0, -1)
if type(values) == 'table' then
for _, value in ipairs(values) do
-- do something with value
end
-- remove read entries from the list
storage.exec('ltrim', key, #values, -1)
end
Thanks
RE: lua api - mellotron - 24.08.2023
(05.08.2023, 08:59)mellotron Wrote: hi please i need your help, i use this lua api code to get json data and save it on csv file but when many user send request i have the lines that get mixed up. please how to fixe it.
Code: <?
require('apps')
require('socket.url')
action = socket.url.unescape( getvar('action') or 'none' )
storagename = socket.url.unescape( getvar('storagename') or 'none')
format = socket.url.unescape( getvar('format') or 'string' )
storagevalue = socket.url.unescape( getvar('value') or '{}')
-- Modification pour gérer le nom de fichier et le répertoire
filename = socket.url.unescape( getvar('storagename') or 'none')
folder = '/home/ftp/Rapport_SatCl/Jour/'
if action == 'storageset' then
if storagename ~= 'none' then
if format == 'json' then
storagevalue = json.decode(storagevalue)
end
-- Création et enregistrement du fichier CSV
if filename ~= 'none' then
local ip = ngx.var.remote_addr
local filepath = folder..storagename..".csv"
local file = io.open(filepath, "a")
-- Ajout des entêtes de colonnes
if file:seek('end') == 0 then
file:write("datetime;agenceName;name;caisse;cheque;gestion_de_compte;autre_service;tres_satisfait;satisfait;un_peu_satifait;pas_satisfait;pas_du_tout_satisfait;pas_du_tout;pas_vraiment;plutot_bien;bien;tres_bien;oui;non;commentaire;telephone\n")
end
for i, row in ipairs(storagevalue) do
file:write( row['datetime'] ..";"..row['agenceName']..";"..row['name']..";" .. row['caisse'] .. ";" .. row['cheque'] .. ";" .. row['gestion_de_compte'] .. ";" ..row['autres_services'] .. ";" .. row['tres_satisfait'] .. ";" .. row['satisfait'] .. ";" .. row['un_peu_satifait'] .. ";" .. row['pas_satisfait'] .. ";" .. row['pas_du_tout_satisfait'] .. ";" ..row['pas_du_tout']..";" ..row['pas_vraiment'] .. ";" .. row['plutot_bien'] .. ";" .. row['bien'] .. ";" .. row['tres_bien'] ..";" .. row['oui'] .. ";" .. row['non'] .. ";" .. row['commentaire'] .. ";" .. row['telephone'] .. "\n")
end
file:close()
print('file saved as: ' .. filepath)
else
print('no filename specified')
end
end
?>
hi is it possible to use more than one storage lis on wiser??
RE: lua api - admin - 24.08.2023
Use a different storage key name.
RE: lua api - mellotron - 24.08.2023
(24.08.2023, 08:13)admin Wrote: Use a different storage key name.
ok thanks
|