Repository navigation
Expand file tree
/
Copy pathapp.js
More file actions
executable file
·121 lines (113 loc) · 3.4 KB
/
Copy pathapp.js
File metadata and controls
executable file
·121 lines (113 loc) · 3.4 KB
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
#!/usr/bin/env node
"use strict";
const { createLineProcessor } = require("./lib/ingest/parser");
const { createIngestSources } = require("./lib/ingest/sources");
const {
addUsage,
} = require("./lib/core/aggregate");
const {
PRICING,
PRICING_SOURCES,
calculateCost,
} = require("./lib/core/pricing");
const { finalizeRateLimits } = require("./lib/core/rate-limits");
const {
newReport,
} = require("./lib/core/report-model");
const {
usageFromClaudeUsage,
usageFromOmpUsage,
usageFromCodexInfo,
} = require("./lib/core/usage");
const reportText = require("./lib/report/text");
const cli = require("./lib/cli");
const { createStorage } = require("./lib/storage");
const { createWebServer } = require("./lib/web-server");
const ingest = createIngestSources({
finishSession: reportText.finishSession,
formatBytes: reportText.formatBytes,
formatInt: reportText.formatInt,
logProgress: reportText.logProgress,
startSession: reportText.startSession,
});
const storage = createStorage({
ingest,
formatBytes: reportText.formatBytes,
formatInt: reportText.formatInt,
logProgress: reportText.logProgress,
});
const web = createWebServer({
buildReportFromSelectedDatabase: storage.buildReportFromSelectedDatabase,
loadConfiguration: storage.loadConfiguration,
resolveDbPath: storage.resolveDbPath,
saveConfiguration: storage.saveConfiguration,
syncDatabase: storage.syncDatabase,
});
// Keep the historical app.parseArgs --help side effect for consumers of app.js.
function parseArgs(argv) {
const options = cli.parseArgs(argv);
if (options.help) {
cli.printHelp();
process.exit(0);
}
return options;
}
async function main(argv = process.argv.slice(2)) {
const options = cli.parseArgs(argv);
if (options.help) {
cli.printHelp();
return options;
}
if (options.webserver) {
const server = await web.startWebServer(options);
const address = server.address();
const host = address.address === "::" ? "localhost" : address.address;
reportText.logProgress(options, `[webserver] http://${host}:${address.port}`);
return server;
}
if (options.sync) {
const report = await storage.syncDatabase(options);
await reportText.writeReport(report, options);
return report;
}
if (storage.selectedDbEngine(options) === "clickhouse") {
const report = await storage.buildReportFromClickHouse(options);
await reportText.writeReport(report, options);
return report;
}
const report = await ingest.buildReport(options);
await reportText.writeReport(report, options);
return report;
}
if (require.main === module) {
main().catch((error) => {
console.error(error.message);
process.exitCode = 1;
});
}
module.exports = {
PRICING,
PRICING_SOURCES,
addUsage,
buildReportFromClickHouse: storage.buildReportFromClickHouse,
buildReportFromDatabase: storage.buildReportFromDatabase,
buildReport: ingest.buildReport,
calculateCost,
createLineProcessor,
discoverInputs: ingest.discoverInputs,
finalizeRateLimits,
loadConfiguration: storage.loadConfiguration,
main,
newReport,
parseArgs,
processJsonlFile: ingest.processJsonlFile,
processZipFile: ingest.processZipFile,
renderReport: reportText.renderReport,
saveConfiguration: storage.saveConfiguration,
startWebServer: web.startWebServer,
syncDatabase: storage.syncDatabase,
usageFromClaudeUsage,
usageFromOmpUsage,
usageFromCodexInfo,
writeReport: reportText.writeReport,
};