1 | morgan = require 'morgan'
|
2 | express = require 'express'
|
3 | bodyParser = require 'body-parser'
|
4 | errorHandler = require 'errorhandler'
|
5 | MeshbluConfig = require 'meshblu-config'
|
6 | MeshbluAuth = require 'express-meshblu-auth'
|
7 | meshbluHealthcheck = require 'express-meshblu-healthcheck'
|
8 | expressVersion = require 'express-package-version'
|
9 | InstancesController = require './src/controllers/instances-controller'
|
10 | IotAppController = require './src/controllers/iot-app-controller'
|
11 | debug = require('debug')('nanocyte-flow-deploy-service')
|
12 | cors = require 'cors'
|
13 |
|
14 | serverOptions = {
|
15 | mongoDbUri: process.env.MONGODB_URI
|
16 | redisUri: process.env.REDIS_URI
|
17 | intervalServiceUri: process.env.INTERVAL_SERVICE_URI
|
18 | octobluUrl: process.env.OCTOBLU_URL
|
19 | flowLoggerUuid: process.env.FLOW_LOGGER_UUID
|
20 | nanocyteEngineUrl: process.env.NANOCYTE_ENGINE_URL
|
21 | nodeRegistryUrl: process.env.NODE_REGISTRY_URL
|
22 | awsAccessKeyId: process.env.AWS_ACCESS_KEY_ID
|
23 | awsSecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
|
24 | }
|
25 |
|
26 | throw new Error 'MONGODB_URI is required' unless serverOptions.mongoDbUri?
|
27 | throw new Error 'REDIS_URI is required' unless serverOptions.redisUri?
|
28 | throw new Error 'INTERVAL_SERVICE_URI is required' unless serverOptions.intervalServiceUri?
|
29 | throw new Error 'OCTOBLU_URL is required' unless serverOptions.octobluUrl?
|
30 | throw new Error 'NANOCYTE_ENGINE_URL is required' unless serverOptions.nanocyteEngineUrl?
|
31 | throw new Error 'NODE_REGISTRY_URL is required' unless serverOptions.nodeRegistryUrl?
|
32 | throw new Error 'AWS_ACCESS_KEY_ID is required' unless serverOptions.awsAccessKeyId?
|
33 | throw new Error 'AWS_SECRET_ACCESS_KEY is required' unless serverOptions.awsSecretAccessKey?
|
34 |
|
35 | instancesController = new InstancesController serverOptions
|
36 | iotAppController = new IotAppController serverOptions
|
37 |
|
38 | PORT = process.env.PORT ? 80
|
39 |
|
40 | meshbluConfig = new MeshbluConfig
|
41 | meshbluAuth = new MeshbluAuth meshbluConfig.toJSON()
|
42 | app = express()
|
43 | app.use cors()
|
44 | app.use meshbluHealthcheck()
|
45 | app.use expressVersion({format: '{"version": "%s"}'})
|
46 | app.use morgan 'dev'
|
47 | app.use errorHandler()
|
48 | app.use meshbluAuth.get()
|
49 | app.use meshbluAuth.gateway()
|
50 | app.use bodyParser.urlencoded limit: '50mb', extended : true
|
51 | app.use bodyParser.json limit : '50mb'
|
52 |
|
53 | app.post '/bluprint/:appId/:version', iotAppController.publish
|
54 | app.post '/bluprint/:appId/:version/link', iotAppController.link
|
55 |
|
56 | app.post '/flows/:flowId/instances', instancesController.create
|
57 | app.delete '/flows/:flowId/instances', instancesController.destroy
|
58 |
|
59 | server = app.listen PORT, ->
|
60 | host = server.address().address
|
61 | port = server.address().port
|
62 |
|
63 | console.log "Server running on #{host}:#{port}"
|
64 |
|
65 | process.on 'SIGTERM', =>
|
66 | console.log 'SIGTERM caught, exiting'
|
67 | process.exit 0
|