Scripts/ControlliCDR
Jump to navigation
Jump to search
Level 2
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:". 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'
- 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})`);