fedicrawl/application/src/app.ts

45 wiersze
1.5 KiB
TypeScript
Czysty Zwykły widok Historia

2021-12-23 14:14:06 +00:00
import providerRegistry from './Fediverse/Providers'
import { addNodeSeed } from './Jobs/Seed/addNodeSeed'
import { processNextNode } from './Jobs/processNextNode'
2022-11-29 13:11:27 +00:00
import getSeedDomains from './Jobs/Seed/getSeedDomains.js'
2022-09-14 19:16:04 +00:00
import assertNodeIndex from './Storage/Nodes/assertNodeIndex'
import assertFeedIndex from './Storage/Feeds/assertFeedIndex'
import elasticClient from './Storage/ElasticClient'
import deleteDomains from './Jobs/Seed/deleteBannedNodes'
import getBannedDomains from './Jobs/Seed/getBannedDomains'
2021-12-23 14:14:06 +00:00
2022-09-18 11:32:25 +00:00
const timeout = async (ms: number): Promise<void> => {
return await new Promise((resolve) => setTimeout(resolve, ms))
}
const loop = async (): Promise<void> => {
2022-09-18 11:32:25 +00:00
// noinspection InfiniteLoopJS
2021-12-23 14:14:06 +00:00
while (true) {
try {
2022-09-14 19:16:04 +00:00
await processNextNode(elasticClient, providerRegistry)
2021-12-23 14:14:06 +00:00
} catch (err) {
console.warn(err)
2022-09-18 11:32:25 +00:00
const waitForJobMilliseconds =
parseInt(process.env.WAIT_FOR_JOB_MINUTES ?? '60') * 60 * 1000
console.info('Delaying next node process', {
timeoutMilliseconds: waitForJobMilliseconds,
timeoutDate: new Date(Date.now() + waitForJobMilliseconds),
now: new Date()
})
await timeout(waitForJobMilliseconds)
2021-12-23 14:14:06 +00:00
}
}
}
const app = async (): Promise<void> => {
2022-09-14 19:16:04 +00:00
await assertNodeIndex(elasticClient)
await assertFeedIndex(elasticClient)
await deleteDomains(elasticClient, getBannedDomains())
2022-11-29 13:11:27 +00:00
await addNodeSeed(elasticClient, getSeedDomains())
2022-09-18 11:32:25 +00:00
await loop()
2021-12-23 14:14:06 +00:00
}
app()
2022-09-18 11:32:25 +00:00
.then(() => console.info('App finished'))
.catch((error) => console.error('App was interrupted', { error }))