Files
PrivyDrop/backend/scripts/export-tracking-data.js
T
2025-06-22 21:34:54 +08:00

86 lines
2.6 KiB
JavaScript

// scripts/export-tracking-data.js
const Redis = require("ioredis");
const fs = require("fs/promises");
const path = require("path");
// Redis client configuration
const redis = new Redis({
host: "localhost",
port: 6379,
});
async function exportTrackingData() {
try {
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
const fileName = `tracking-data-${timestamp}.txt`;
const filePath = path.join(__dirname, "../logs", fileName);
// Create output content
let output = "=== Tracking Data Export ===\n";
output += `Generated at: ${new Date().toISOString()}\n\n`;
// 1. Get all sources
const sources = await redis.smembers("referrers:sources");
output += "=== Referral Sources ===\n";
output += sources.join(", ") + "\n\n";
// 2. Get total counts
const totalCounts = await redis.hgetall("referrers:count");
output += "=== Total Counts by Source ===\n";
for (const [source, count] of Object.entries(totalCounts)) {
output += `${source}: ${count}\n`;
}
output += "\n";
// 3. Get daily statistics and sort by date
output += "=== Daily Statistics ===\n";
const dailyKeys = await redis.keys("referrers:daily:*");
// Convert keys to an array of objects with dates and sort by date
const dailyData = await Promise.all(
dailyKeys.map(async (key) => {
const date = key.split(":")[2];
const dailyStats = await redis.hgetall(key);
return { date: new Date(date), data: dailyStats };
})
);
dailyData.sort((a, b) => b.date.getTime() - a.date.getTime()); // Sort by date in descending order (most recent to oldest)
for (const item of dailyData) {
const dateString = item.date.toISOString().split("T")[0]; // Format date string
output += `\nDate: ${dateString}\n`;
for (const [source, count] of Object.entries(item.data)) {
output += ` ${source}: ${count}\n`;
}
}
output += "\n";
// 5. Add basic statistics
output += "\n=== Summary ===\n";
output += `Total Sources: ${sources.length}\n`;
// Ensure the log directory exists
await fs.mkdir(path.join(__dirname, "../logs"), { recursive: true });
// Write to file
await fs.writeFile(filePath, output, "utf8");
console.log(`Data exported successfully to: ${filePath}`);
console.log("\nFile Preview:");
console.log("=".repeat(50));
console.log(output.slice(0, 500) + "...");
console.log("=".repeat(50));
// Close Redis connection
await redis.quit();
} catch (error) {
console.error("Error exporting data:", error);
process.exit(1);
}
}
// Execute export
exportTrackingData();