|
1 | | -const fs = require('fs'); |
2 | | -const config = require('./config/appConf'); |
3 | | -let software = config.software; |
4 | | -let softwareTitles = software.map((item) => item.libCalName); |
5 | | -let allData = []; |
6 | | -const { Parser } = require('json2csv'); |
7 | | - |
8 | | -// softwareTitles = ['Adobe Creative Cloud', 'Logic Pro']; |
9 | | - |
10 | | -let json = summarizeStats(softwareTitles); |
11 | | -// console.log(JSON.stringify(json, null, 2)); |
12 | | -const parser = new Parser(); |
13 | | -const csv = parser.parse(json); |
14 | | -console.log(csv); |
15 | | - |
16 | | -function summarizeStats(softwareTitles) { |
17 | | - softwareTitles.forEach((softwareTitle) => { |
18 | | - let folder = softwareTitle.replace(/ /g, ''); |
19 | | - // get all files that aren't directories |
20 | | - let files, anonFiles; |
21 | | - if (fs.existsSync(`./logs/dailyStats/${folder}`) != false) { |
22 | | - files = fs.readdirSync(`./logs/dailyStats/${folder}`, { |
23 | | - withFileTypes: true, |
24 | | - }); |
25 | | - try { |
26 | | - anonFiles = fs.readdirSync(`./logs/dailyStats/${folder}/anon`, { |
27 | | - withFileTypes: true, |
28 | | - }); |
29 | | - } catch (err) { |
30 | | - anonFiles = []; |
31 | | - } |
32 | | - files.push(...anonFiles); // all files, anonymous and not |
33 | | - files = [...new Set(files)]; // remove duplicates |
34 | | - files = files.filter((file) => file.isFile()); // remove directories |
35 | | - files.sort((a, b) => (a.name > b.name ? 1 : -1)); // sort by date |
36 | | - files.forEach((file) => { |
37 | | - let date = file.name.split('.')[0]; |
38 | | - let usage = getDateStats(softwareTitle, date); |
39 | | - updateOrAddEntry({ date, softwareTitle, usage }); |
40 | | - }); |
41 | | - } |
42 | | - }); |
43 | | - return allData; |
44 | | -} |
45 | | - |
46 | | -function updateOrAddEntry(newEntry) { |
47 | | - let found = false; |
48 | | - |
49 | | - for (let i = 0; i < allData.length; i++) { |
50 | | - if (allData[i].date === newEntry.date) { |
51 | | - allData[i][newEntry.softwareTitle] = newEntry.usage; |
52 | | - found = true; |
53 | | - break; |
54 | | - } |
55 | | - } |
56 | | - |
57 | | - if (!found) { |
58 | | - let obj = { date: newEntry.date, [newEntry.softwareTitle]: newEntry.usage }; |
59 | | - allData.push(obj); |
60 | | - } |
61 | | -} |
62 | | - |
63 | | -function getDateStats(softwareTitle, date) { |
64 | | - let folder = softwareTitle.replace(/ /g, ''); |
65 | | - let filepath = './logs/dailyStats/' + folder + '/' + date + '.json'; |
66 | | - let anonpath = './logs/dailyStats/' + folder + '/anon/' + date + '.json'; |
67 | | - let data; |
68 | | - if (fs.existsSync(filepath)) { |
69 | | - data = require(`./logs/dailyStats/${folder}/${date}.json`); |
70 | | - } else if (fs.existsSync(anonpath)) { |
71 | | - data = require(`./logs/dailyStats/${folder}/anon/${date}.json`); |
72 | | - } else { |
73 | | - console.log('No file found for ' + softwareTitle + ' on ' + date); |
74 | | - return; |
| 1 | +const dailyStatsService = require('./services/dailyStatsService'); |
| 2 | +const yargs = require('yargs'); |
| 3 | +const argv = yargs(process.argv.slice(2)).argv; |
| 4 | + |
| 5 | +const allowedFormats = ['json', 'csv']; // allowed formats |
| 6 | +if (argv.format) { |
| 7 | + if (!allowedFormats.includes(argv.format)) { |
| 8 | + console.log('Invalid format. Use json or csv'); |
| 9 | + process.exit(1); |
75 | 10 | } |
76 | | - let confirmedBookings = data.filter((item) => item.status == 'Confirmed'); |
77 | | - let skipCheckins = confirmedBookings.filter( |
78 | | - (item) => !item.toDate.match(date + 'T00:00:00') |
79 | | - ); |
80 | | - let distinctUsers = [...new Set(skipCheckins.map((item) => item.email))]; |
81 | | - let totalUsage = distinctUsers.length; |
82 | | - // console.log(softwareTitle + ',' + date + ',' + totalUsage); |
83 | | - return totalUsage; |
| 11 | + console.log(dailyStatsService(argv.format)); |
| 12 | +} else { |
| 13 | + console.log(dailyStatsService()); |
84 | 14 | } |
0 commit comments