-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgetUsageData.js
129 lines (119 loc) · 3.84 KB
/
getUsageData.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// get daily usage data from LibCal Api
// write each day to a file in logs/dailyStats/{folder}
// run this on the command line with:
// node getUsageData.js
// set the date params when prompted and select a software pkg to get stats for
const inquirer = require('inquirer');
const config = require('./config/appConf');
const LibCalApi = require('./models/LibCalApi');
const libCalConf = require('./config/libCal');
const lcapi = new LibCalApi(libCalConf);
const fs = require('fs');
const path = require('path');
const dayjs = require('dayjs');
const yargs = require('yargs');
const argv = yargs(process.argv.slice(2)).argv;
const chrono = require('chrono-node');
const { asyncForEach } = require('./helpers/utils');
// const { sleep } = require('./helpers/utils');
// const path = require('path');
const software = config.software;
const { genList } = require('./helpers/utils');
const e = require('express');
const timer = (ms) => new Promise((res) => setTimeout(res, ms));
function help() {
console.log('Usage: node getUsageData.js');
console.log('Options:');
console.log(
' --startDate=YYYY-MM-DD (also supports dates like "two weeks ago" or "yesterday")'
);
console.log(' --endDate=YYYY-MM-DD (or other date format)');
console.log(' --libCalCid=libCalCid or "all"');
console.log(' --help');
}
async function runQuery(date, cid, folder) {
let res = await lcapi.getBookings(cid, date);
let dir = path.resolve(__dirname + '/logs/dailyStats/' + folder);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, 0744);
}
fs.writeFile(
dir + '/' + date + '.json',
JSON.stringify(res, null, 2),
(err) => {
if (err) {
console.error(err);
return;
}
//file written successfully
}
);
}
async function getStats(startDate, endDate, cid, softwareName) {
console.log('softwareName: ', softwareName);
const folder = softwareName.replace(/ /g, '');
let date = startDate;
// console.log(startDate, endDate, softwareName, folder, cid);
while (date <= endDate) {
await runQuery(date, cid, folder);
console.log(date);
date = dayjs(date).add(1, 'day').format('YYYY-MM-DD');
await timer(1500);
}
}
async function main() {
let startDate, endDate, cid;
// console.log('argv: ', argv);
if (argv.h === true) {
help();
return;
} else {
console.log('For help, run with -h');
}
if (argv.startDate && argv.endDate && argv.libCalCid) {
startDate = argv.startDate;
endDate = argv.endDate;
cid = argv.libCalCid.toString();
} else {
const getStart = await inquirer.prompt({
type: 'input',
name: 'startDate',
message: 'Start date?',
});
const getEnd = await inquirer.prompt({
type: 'input',
name: 'endDate',
message: 'End date?',
});
startDate = getStart.startDate;
endDate = getEnd.endDate;
const getSoftware = await inquirer.prompt(
genList({
list: software,
message: 'Which software to get stats for?',
itemNameProp: 'libCalName',
itemValueProp: 'libCalCid',
outputLabel: 'softwareOption',
})
);
console.log('cid: ', getSoftware.softwareOption);
cid = getSoftware.softwareOption;
}
startDate = dayjs(chrono.parseDate(startDate)).format('YYYY-MM-DD');
endDate = dayjs(chrono.parseDate(endDate)).format('YYYY-MM-DD');
if (cid == 'all') {
let activeSoftware = software.filter((item) => item.active === true);
asyncForEach(activeSoftware, async (item) => {
await getStats(startDate, endDate, item.libCalCid, item.libCalName);
});
// activeSoftware.forEach(async (item) => {
// await getStats(startDate, endDate, item.libCalCid, item.libCalName);
// });
return;
} else {
const softwareName = software.filter((item) => item.libCalCid === cid)[0]
.libCalName;
await getStats(startDate, endDate, cid, softwareName);
}
}
main();