fedicrawl/application/src/Jobs/processNextNode.ts

63 wiersze
2.2 KiB
TypeScript
Czysty Zwykły widok Historia

2021-12-23 14:14:06 +00:00
import { fetchNodeToProcess } from '../Storage/Nodes/fetchNodeToProcess'
import { ProviderRegistry } from '../Fediverse/Providers/ProviderRegistry'
import { setNodeRefreshed } from '../Storage/Nodes/setNodeRefreshed'
import { refreshNodeInfo } from './NodeInfo/refreshNodeInfo'
import { setNodeRefreshAttempted } from '../Storage/Nodes/setNodeRefreshAttempted'
import { findNewNodes } from './Nodes/findNewNodes'
import { NodeProvider } from '../Fediverse/Providers/NodeProvider'
import { FeedProvider } from '../Fediverse/Providers/FeedProvider'
import { refreshFeeds } from './Feeds/refreshFeeds'
import { deleteOldFeeds } from '../Storage/Feeds/deleteOldFeeds'
2022-09-14 19:16:04 +00:00
import refreshNodeIps from './Dns/refreshNodeIps'
import { ElasticClient } from '../Storage/ElasticClient'
import updateNodeFeedStats from './Nodes/updateNodeFeedStats'
2021-12-23 14:14:06 +00:00
2022-09-18 11:32:25 +00:00
export const processNextNode = async (
elastic: ElasticClient,
providerRegistry: ProviderRegistry
): Promise<void> => {
2021-12-23 14:14:06 +00:00
console.info('#############################################')
2022-09-14 19:16:04 +00:00
let node = await fetchNodeToProcess(elastic)
node = await setNodeRefreshAttempted(elastic, node)
2021-12-23 14:14:06 +00:00
2022-09-14 19:16:04 +00:00
node = await refreshNodeIps(elastic, node)
node = await refreshNodeInfo(elastic, node)
2021-12-23 14:14:06 +00:00
2022-09-18 11:32:25 +00:00
const softwareName = node.softwareName ?? ''
if (!providerRegistry.containsKey(softwareName)) {
console.warn('Unknown software', {
domain: node.domain,
software: node.softwareName
})
2022-09-14 19:16:04 +00:00
await deleteOldFeeds(elastic, node)
await setNodeRefreshed(elastic, node)
2021-12-23 14:14:06 +00:00
return
}
2022-09-18 11:32:25 +00:00
const provider = providerRegistry.getProviderByKey(softwareName)
2021-12-23 14:14:06 +00:00
await Promise.all(
2022-09-18 11:32:25 +00:00
provider.getNodeProviders().map(async (nodeProvider: NodeProvider) => {
console.info('Searching for nodes', {
domain: node.domain,
provider: nodeProvider.getKey()
})
return await findNewNodes(elastic, nodeProvider, node)
2021-12-23 14:14:06 +00:00
})
)
await Promise.all(
2022-09-18 11:32:25 +00:00
provider.getFeedProviders().map(async (feedProvider: FeedProvider) => {
console.info('Searching for feeds', {
domain: node.domain,
provider: feedProvider.getKey()
})
return await refreshFeeds(elastic, feedProvider, node)
2021-12-23 14:14:06 +00:00
})
)
2022-09-14 19:16:04 +00:00
await deleteOldFeeds(elastic, node)
await updateNodeFeedStats(elastic, node)
2022-09-14 19:16:04 +00:00
await setNodeRefreshed(elastic, node)
2021-12-23 14:14:06 +00:00
}