1 import * as Sequelize from 'sequelize'
3 import { database as db } from '../../initializers/database'
4 import { AbstractRequestScheduler } from './abstract-request-scheduler'
5 import { logger } from '../../helpers'
6 import { REQUESTS_LIMIT_PODS, REQUESTS_LIMIT_PER_POD } from '../../initializers'
7 import { RequestsGrouped } from '../../models'
8 import { RequestEndpoint } from '../../../shared'
10 export type RequestSchedulerOptions = {
12 endpoint: RequestEndpoint
15 transaction: Sequelize.Transaction
18 class RequestScheduler extends AbstractRequestScheduler<RequestsGrouped> {
22 // We limit the size of the requests
23 this.limitPods = REQUESTS_LIMIT_PODS
24 this.limitPerPod = REQUESTS_LIMIT_PER_POD
26 this.description = 'requests'
33 getRequestToPodModel () {
34 return db.RequestToPod
37 buildRequestObjects (requestsGrouped: RequestsGrouped) {
38 const requestsToMakeGrouped = {}
40 Object.keys(requestsGrouped).forEach(toPodId => {
41 requestsGrouped[toPodId].forEach(data => {
42 const request = data.request
44 const hashKey = toPodId + request.endpoint
46 if (!requestsToMakeGrouped[hashKey]) {
47 requestsToMakeGrouped[hashKey] = {
49 endpoint: request.endpoint,
50 ids: [], // request ids, to delete them from the DB in the future
51 datas: [] // requests data,
55 requestsToMakeGrouped[hashKey].ids.push(request.id)
56 requestsToMakeGrouped[hashKey].datas.push(request.request)
60 return requestsToMakeGrouped
63 createRequest ({ type, endpoint, data, toIds, transaction }: RequestSchedulerOptions) {
64 // If there are no destination pods abort
65 if (toIds.length === 0) return undefined
75 const dbRequestOptions: Sequelize.CreateOptions = {
79 return db.Request.create(createQuery, dbRequestOptions)
81 return request.setPods(toIds, dbRequestOptions)
85 // ---------------------------------------------------------------------------
87 afterRequestsHook () {
88 // Flush requests with no pod
89 this.getRequestModel().removeWithEmptyTo()
90 .catch(err => logger.error('Error when removing requests with no pods.', err))
94 // ---------------------------------------------------------------------------