mirror of
https://github.com/movie-web/backend.git
synced 2025-09-13 16:43:26 +00:00
Add provider metric cleanup job
This commit is contained in:
@@ -37,11 +37,13 @@
|
|||||||
"@fastify/cors": "^8.3.0",
|
"@fastify/cors": "^8.3.0",
|
||||||
"@mikro-orm/core": "^5.9.0",
|
"@mikro-orm/core": "^5.9.0",
|
||||||
"@mikro-orm/postgresql": "^5.9.0",
|
"@mikro-orm/postgresql": "^5.9.0",
|
||||||
|
"@types/ms": "^0.7.33",
|
||||||
"cron": "^3.1.5",
|
"cron": "^3.1.5",
|
||||||
"fastify": "^4.21.0",
|
"fastify": "^4.21.0",
|
||||||
"fastify-metrics": "^10.3.2",
|
"fastify-metrics": "^10.3.2",
|
||||||
"fastify-type-provider-zod": "^1.1.9",
|
"fastify-type-provider-zod": "^1.1.9",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"ms": "^2.1.3",
|
||||||
"nanoid": "^3.3.6",
|
"nanoid": "^3.3.6",
|
||||||
"neat-config": "^2.0.0",
|
"neat-config": "^2.0.0",
|
||||||
"node-forge": "^1.3.1",
|
"node-forge": "^1.3.1",
|
||||||
|
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@@ -14,6 +14,9 @@ dependencies:
|
|||||||
'@mikro-orm/postgresql':
|
'@mikro-orm/postgresql':
|
||||||
specifier: ^5.9.0
|
specifier: ^5.9.0
|
||||||
version: 5.9.0(@mikro-orm/core@5.9.0)
|
version: 5.9.0(@mikro-orm/core@5.9.0)
|
||||||
|
'@types/ms':
|
||||||
|
specifier: ^0.7.33
|
||||||
|
version: 0.7.33
|
||||||
cron:
|
cron:
|
||||||
specifier: ^3.1.5
|
specifier: ^3.1.5
|
||||||
version: 3.1.5
|
version: 3.1.5
|
||||||
@@ -29,6 +32,9 @@ dependencies:
|
|||||||
jsonwebtoken:
|
jsonwebtoken:
|
||||||
specifier: ^9.0.2
|
specifier: ^9.0.2
|
||||||
version: 9.0.2
|
version: 9.0.2
|
||||||
|
ms:
|
||||||
|
specifier: ^2.1.3
|
||||||
|
version: 2.1.3
|
||||||
nanoid:
|
nanoid:
|
||||||
specifier: ^3.3.6
|
specifier: ^3.3.6
|
||||||
version: 3.3.6
|
version: 3.3.6
|
||||||
@@ -456,6 +462,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-/BJF3NT0pRMuxrenr42emRUF67sXwcZCd+S1ksG/Fcf9O7C3kKCY4uJSbKBE4KDUIYr3WMsvfmWD8hRjXExBJQ==}
|
resolution: {integrity: sha512-/BJF3NT0pRMuxrenr42emRUF67sXwcZCd+S1ksG/Fcf9O7C3kKCY4uJSbKBE4KDUIYr3WMsvfmWD8hRjXExBJQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@types/ms@0.7.33:
|
||||||
|
resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@types/node-forge@1.3.8:
|
/@types/node-forge@1.3.8:
|
||||||
resolution: {integrity: sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==}
|
resolution: {integrity: sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@@ -1,9 +1,11 @@
|
|||||||
import { challengeCodeJob } from '@/modules/jobs/list/challengeCode';
|
import { challengeCodeJob } from '@/modules/jobs/list/challengeCode';
|
||||||
import { sessionExpiryJob } from '@/modules/jobs/list/sessionExpiry';
|
import { sessionExpiryJob } from '@/modules/jobs/list/sessionExpiry';
|
||||||
import { userDeletionJob } from '@/modules/jobs/list/userDeletion';
|
import { userDeletionJob } from '@/modules/jobs/list/userDeletion';
|
||||||
|
import { providerMetricCleanupJob } from '@/modules/jobs/list/providerMetricCleanup';
|
||||||
|
|
||||||
export async function setupJobs() {
|
export async function setupJobs() {
|
||||||
challengeCodeJob.start();
|
challengeCodeJob.start();
|
||||||
sessionExpiryJob.start();
|
sessionExpiryJob.start();
|
||||||
userDeletionJob.start();
|
userDeletionJob.start();
|
||||||
|
providerMetricCleanupJob.start();
|
||||||
}
|
}
|
||||||
|
27
src/modules/jobs/list/providerMetricCleanup.ts
Normal file
27
src/modules/jobs/list/providerMetricCleanup.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import { ProviderMetric } from '@/db/models/ProviderMetrics';
|
||||||
|
import { job } from '@/modules/jobs/job';
|
||||||
|
import ms from 'ms';
|
||||||
|
|
||||||
|
// every day at 12:00:00
|
||||||
|
export const providerMetricCleanupJob = job(
|
||||||
|
'provider-metric-cleanup',
|
||||||
|
'0 12 * * *',
|
||||||
|
async ({ em, log }) => {
|
||||||
|
const now = new Date();
|
||||||
|
const thirtyDaysAgo = new Date(now.getTime() - ms('30d'));
|
||||||
|
|
||||||
|
const deletedMetrics = await em
|
||||||
|
.createQueryBuilder(ProviderMetric)
|
||||||
|
.delete()
|
||||||
|
.where({
|
||||||
|
createdAt: {
|
||||||
|
$lt: thirtyDaysAgo,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.execute<{ affectedRows: number }>('run');
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
`Removed ${deletedMetrics.affectedRows} metrics that were older than 30 days`,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
Reference in New Issue
Block a user