You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.0 KiB
93 lines
3.0 KiB
import { router as analyticUnitsRouter } from './routes/analytic_units_router'; |
|
import { router as segmentsRouter } from './routes/segments_router'; |
|
import { router as dataRouter } from './routes/data_router'; |
|
import { router as detectionsRouter } from './routes/detections_router'; |
|
|
|
import * as AnalyticsController from './controllers/analytics_controller'; |
|
|
|
import * as ProcessService from './services/process_service'; |
|
|
|
import { HASTIC_PORT, PACKAGE_VERSION, GIT_INFO, ZMQ_CONNECTION_STRING, HASTIC_INSTANCE_NAME } from './config'; |
|
|
|
import { applyDBMigrations } from './migrations'; |
|
|
|
import * as Koa from 'koa'; |
|
import * as Router from 'koa-router'; |
|
import * as bodyParser from 'koa-bodyparser'; |
|
|
|
init(); |
|
|
|
async function init() { |
|
await applyDBMigrations(); |
|
AnalyticsController.init(); |
|
ProcessService.registerExitHandler(AnalyticsController.terminate); |
|
|
|
const app = new Koa(); |
|
|
|
app.on('error', (err, ctx) => { |
|
console.log('got server error:'); |
|
console.log(err); |
|
}); |
|
|
|
|
|
app.use(bodyParser()); |
|
|
|
app.use(async function(ctx, next) { |
|
ctx.set('Access-Control-Allow-Origin', '*'); |
|
ctx.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); |
|
ctx.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); |
|
await next(); |
|
}); |
|
app.use(async function(ctx, next) { |
|
try { |
|
await next(); |
|
} catch (e) { |
|
console.error(e); |
|
ctx.response.status = 500; |
|
ctx.response.body = { |
|
code: 500, |
|
message: `${ctx.method} ${ctx.url} error: ${e.message}` |
|
}; |
|
} |
|
}); |
|
|
|
|
|
const rootRouter = new Router(); |
|
rootRouter.use('/analyticUnits', analyticUnitsRouter.routes(), analyticUnitsRouter.allowedMethods()); |
|
rootRouter.use('/segments', segmentsRouter.routes(), segmentsRouter.allowedMethods()); |
|
rootRouter.use('/query', dataRouter.routes(), dataRouter.allowedMethods()); |
|
rootRouter.use('/detections', detectionsRouter.routes(), detectionsRouter.allowedMethods()); |
|
|
|
rootRouter.get('/', async (ctx) => { |
|
const activeWebhooks = await AnalyticsController.getActiveWebhooks(); |
|
|
|
ctx.response.body = { |
|
server: 'OK', |
|
analytics: { |
|
ready: AnalyticsController.isAnalyticReady(), |
|
lastAlive: AnalyticsController.analyticsLastAlive(), |
|
tasksQueueLength: AnalyticsController.getQueueLength() |
|
}, |
|
instanceName: HASTIC_INSTANCE_NAME, |
|
awaitedTasksNumber: AnalyticsController.getTaskResolversLength(), |
|
detectionsCount: AnalyticsController.getDetectionsCount(), |
|
nodeVersion: process.version, |
|
packageVersion: PACKAGE_VERSION, |
|
npmUserAgent: process.env.npm_config_user_agent, |
|
docker: process.env.INSIDE_DOCKER !== undefined, |
|
zmqConectionString: ZMQ_CONNECTION_STRING, |
|
serverPort: HASTIC_PORT, |
|
git: GIT_INFO, |
|
activeWebhooks: activeWebhooks.length, |
|
timestamp: new Date(Date.now()) |
|
}; |
|
}); |
|
|
|
app |
|
.use(rootRouter.routes()) |
|
.use(rootRouter.allowedMethods()); |
|
|
|
app.listen(HASTIC_PORT, () => { |
|
console.log(`Server is running on :${HASTIC_PORT}`); |
|
}); |
|
}
|
|
|