Difference between revisions of "Scripts/ControlliCDR"

From Wiquipedia
Jump to navigation Jump to search
(Aggiornato comando bash per manipolare output log BigQuery)
 
Line 3: Line 3:
 
Lo script seguente genera comandi cURL e query per il processamento di ricariche che erano state erroneamente marcate come "fantasma".
 
Lo script seguente genera comandi cURL e query per il processamento di ricariche che erano state erroneamente marcate come "fantasma".
 
Esso dipende dalla presenza di 3 file:
 
Esso dipende dalla presenza di 3 file:
* cdr.json: file JSON contenente tutti i CDR che hanno generato errore. E' possibile generarlo con un comando bash sull'output dei log di BigQuery contenente solo le righe contenenti la stringa "CDR:". L'output del comando qui sotto deve poi essere modificato cancellando la virgola finale nell'ultima riga e aggiungendo le parentesi quadre '[' e ']' in modo da renderlo un JSON valido.
+
* cdr.json: file JSON contenente tutti i CDR che hanno generato errore. E' possibile generarlo con un comando bash sull'output dei log di BigQuery contenente solo le righe contenenti la stringa "CDR:".  Il file da esportare da BigQuery deve essere un CSV per poter poi utilizzare il comando seguente. L'output del comando qui sotto deve poi essere modificato cancellando la virgola finale nell'ultima riga e aggiungendo le parentesi quadre '[' e ']' in modo da renderlo un JSON valido.
 
   <syntaxhighlight lang="bash">
 
   <syntaxhighlight lang="bash">
   $ cat logs.txt  | sed 's/[^{]*\({.*}\)/\1,/g'
+
   $ cat logs.txt  | sed 's/[^{]*\({.*}\)/\1,/g' | egrep -v '^"' | sed 's/""/"/g'
 
   </syntaxhighlight>
 
   </syntaxhighlight>
  

Latest revision as of 15:38, 14 May 2021

Script per il processamento di CDR non correttamente processati[edit | edit source]

Lo script seguente genera comandi cURL e query per il processamento di ricariche che erano state erroneamente marcate come "fantasma". Esso dipende dalla presenza di 3 file:

  • cdr.json: file JSON contenente tutti i CDR che hanno generato errore. E' possibile generarlo con un comando bash sull'output dei log di BigQuery contenente solo le righe contenenti la stringa "CDR:". Il file da esportare da BigQuery deve essere un CSV per poter poi utilizzare il comando seguente. L'output del comando qui sotto deve poi essere modificato cancellando la virgola finale nell'ultima riga e aggiungendo le parentesi quadre '[' e ']' in modo da renderlo un JSON valido.
  $ cat logs.txt  | sed 's/[^{]*\({.*}\)/\1,/g' | egrep -v '^"' | sed 's/""/"/g'
  • sessionid_ricariche_aperte.json: un elenco (array JSON) dei session_id delle ricariche aperte.
  • ricariche_da_chiudere.json: array JSON delle ricariche da chiudere ricavato dall'elenco nel file sessionid_ricariche_aperte.json con la query generata alla riga 37 (da decommentare).

Alla riga 53 (da decommentare) genera una query per recuperare i dati dei voucher degli utenti a cui fanno riferimento le ricariche da chiudere. La cosa può essere utile per verificare se per gli utenti verrà generato o no un debito.

 1 const fs = require('fs');
 2 
 3 function parseFile(filename) {
 4   const rawData = fs.readFileSync(filename);
 5   return JSON.parse(rawData);
 6 }
 7 
 8 const cdrs = parseFile('cdr.json');
 9 
10 const uniqueObjects = cdrs.reduce((arr, e) => {
11   const objString = JSON.stringify(e);
12   if (!arr.includes(objString)) {
13     arr.push(objString);
14   }
15   return arr;
16 }, []).map((e) => {
17   return JSON.parse(e);
18 });
19 
20 const sessionIds = parseFile('sessionid_ricariche_aperte.json');
21 
22 const notProcessedCdrs = uniqueObjects.filter((e) => {
23   return sessionIds.includes(e.session_id);
24 });
25 
26 console.log('Inizio cURL --------\n\n\n');
27 notProcessedCdrs.map((e) => {
28   console.log(`curl --location --request POST 'https://api.readytopark.it/v1/webhooks/charge-detail-record' --header 'Content-Type: application/json' --data-raw '${JSON.stringify(e)}'`);
29   console.log('echo');
30 });
31 console.log('Fine cURL --------\n\n\n');
32 
33 const sessionIdList = notProcessedCdrs.map((e) => {
34   return `'${e.session_id}'`;
35 });
36 
37 //console.log(`db.charges.find({sessionId: {$in: [${sessionIdList}]}}, {sessionId: 1, userId: 1, status: 1})`);
38 
39 const closeableCharges = parseFile('ricariche_da_chiudere.json');
40 const userIds = closeableCharges.map((e) => {
41   let userIdWithNoGhost = e.userId.replace('GHOST_', '');
42   console.log(`db.charges.updateOne({sessionId: '${e.sessionId}'}, {$set: {userId: '${userIdWithNoGhost}'}});`);
43   return `'${userIdWithNoGhost}'`;
44 });
45 
46 const uniqueUserIds = userIds.reduce((arr, e) => {
47   if (!arr.includes(e)) {
48     arr.push(e);
49   }
50   return arr;
51 }, []);
52 
53 //console.log(`db.vouchers.find({user_id: {$in: [${userIds}]}, residual_amount: {$gt: 0}, expiration_date: {$gt: new Date()}}, {user_id:1, residual_amount: 1, expiration_date: 1})`);