Files
stats/apps/api/scripts/migrate-origins.ts
Carl-Gerhard Lindesvärd 5e225b7ae6 batching events
2024-07-17 17:27:19 +02:00

66 lines
2.3 KiB
TypeScript

import { ch, chQuery } from '@openpanel/db';
async function main() {
const projects = await chQuery(
`SELECT distinct project_id FROM events ORDER BY project_id`
);
const withOrigin = [];
for (const project of projects) {
try {
const [eventWithOrigin, eventWithoutOrigin] = await Promise.all([
await chQuery(
`SELECT * FROM events WHERE origin != '' AND project_id = '${project.project_id}' ORDER BY created_at DESC LIMIT 1`
),
await chQuery(
`SELECT * FROM events WHERE origin = '' AND project_id = '${project.project_id}' AND path != '' ORDER BY created_at DESC LIMIT 1`
),
]);
if (eventWithOrigin[0] && eventWithoutOrigin[0]) {
console.log(`Project ${project.project_id} as events without origin`);
console.log(`- Origin: ${eventWithOrigin[0].origin}`);
withOrigin.push(project.project_id);
const events = await chQuery(
`SELECT count(*) as count FROM events WHERE project_id = '${project.project_id}' AND path != '' AND origin = ''`
);
console.log(`🤠🤠🤠🤠 Will update ${events[0]?.count} events`);
await ch.command({
query: `ALTER TABLE events UPDATE origin = '${eventWithOrigin[0].origin}' WHERE project_id = '${project.project_id}' AND path != '' AND origin = '';`,
clickhouse_settings: {
wait_end_of_query: 1,
},
});
}
if (!eventWithOrigin[0] && eventWithoutOrigin[0]) {
console.log(
`😧 Project ${project.project_id} has no events with origin (last event ${eventWithoutOrigin[0].created_at})`
);
console.log('- NO ORIGIN');
}
if (!eventWithOrigin[0] && !eventWithoutOrigin[0]) {
console.log(
`🔥 WARNING: Project ${project.project_id} has no events at all?!?!?!`
);
}
if (eventWithOrigin[0] && !eventWithoutOrigin[0]) {
console.log(
`✅ Project ${project.project_id} has all events with origin!!!`
);
}
console.log('');
console.log('');
await new Promise((resolve) => setTimeout(resolve, 500));
} catch (e) {
console.log('🥵 ERROR ORRROR');
console.log('Error for project', project.project_id);
}
}
process.exit(0);
}
main();