CartoDB-SQL-API/lib/api/api-router.js

72 lines
2.8 KiB
JavaScript
Raw Normal View History

2019-10-01 18:25:22 +08:00
'use strict';
const { Router: router } = require('express');
const SqlRouter = require('./sql/sql-router');
const HealthCheckController = require('./health-check-controller');
const VersionController = require('./version-controller');
const JobsWipController = require('./jobs-wip-controller');
const error = require('./middlewares/error');
const pubSubMetrics = require('./middlewares/pubsub-metrics');
2019-10-01 18:25:22 +08:00
const BatchLogger = require('../batch/batch-logger');
2019-10-01 18:25:22 +08:00
const JobPublisher = require('../batch/pubsub/job-publisher');
const JobQueue = require('../batch/job-queue');
const JobBackend = require('../batch/job-backend');
const JobCanceller = require('../batch/job-canceller');
const JobService = require('../batch/job-service');
const PubSubMetricsService = require('../services/pubsub-metrics');
2019-10-01 18:25:22 +08:00
module.exports = class ApiRouter {
constructor ({ redisPool, metadataBackend, statsClient, dataIngestionLogger }) {
2019-10-01 18:25:22 +08:00
const logger = new BatchLogger(global.settings.batch_log_filename, 'batch-queries');
const jobPublisher = new JobPublisher(redisPool);
const jobQueue = new JobQueue(metadataBackend, jobPublisher, logger);
const jobBackend = new JobBackend(metadataBackend, jobQueue, logger);
const jobCanceller = new JobCanceller();
const jobService = new JobService(jobBackend, jobCanceller, logger);
this.healthCheckController = new HealthCheckController();
this.versionController = new VersionController();
this.jobsWipController = new JobsWipController({ jobService });
this.pubSubMetricsService = PubSubMetricsService.build();
this.sqlRouter = new SqlRouter({
2019-10-01 18:25:22 +08:00
metadataBackend,
statsClient,
dataIngestionLogger,
jobService
});
2019-10-01 18:25:22 +08:00
}
route (app, routes) {
routes.forEach(route => {
2019-10-02 18:10:25 +08:00
const apiRouter = router({ mergeParams: true });
2019-10-02 18:10:25 +08:00
const paths = route.paths;
const middlewares = route.middlewares || [];
2019-10-01 18:25:22 +08:00
2019-10-02 18:10:25 +08:00
middlewares.forEach(middleware => apiRouter.use(middleware()));
2019-10-01 18:57:03 +08:00
// FIXME: version controller should be attached to the main entry point: "/"
// instead of "/api/:version" or "/user/:user/api/:version"
this.healthCheckController.route(apiRouter);
// FIXME: version controller should be attached to the main entry point: "/"
// instead of "/api/:version" or "/user/:user/api/:version"
this.versionController.route(apiRouter);
this.jobsWipController.route(apiRouter);
2019-10-01 18:25:22 +08:00
this.sqlRouter.route(apiRouter, route.sql);
2019-10-02 18:10:25 +08:00
paths.forEach(path => app.use(path, apiRouter));
apiRouter.use(error());
apiRouter.use(pubSubMetrics(this.pubSubMetricsService));
2019-10-02 18:10:25 +08:00
});
2019-10-01 18:25:22 +08:00
}
};