From 3c1527544df835a831898edbd74a473f027bb855 Mon Sep 17 00:00:00 2001 From: "Lucas, John (jl1315)" Date: Wed, 23 Aug 2017 18:58:33 +0000 Subject: deployment handler initial seed code Change-Id: I0bfc86d17edead0114ea0012fb469014e978cd15 Issue-Id: DCAEGEN2-43 Signed-off-by: J. F. Lucas --- deployment-handler.js | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 deployment-handler.js (limited to 'deployment-handler.js') diff --git a/deployment-handler.js b/deployment-handler.js new file mode 100644 index 0000000..35744ae --- /dev/null +++ b/deployment-handler.js @@ -0,0 +1,144 @@ +/* +Copyright(c) 2017 AT&T Intellectual Property. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and limitations under the License. + */ + +/* Deployment handler main */ + +"use strict"; + +const API_VERSION = "4.0.0"; + +const fs = require('fs'); +const util = require('util'); +const http = require('http'); +const https = require('https'); +const express = require('express'); +const conf = require('./lib/config'); +const createError = require('./lib/dispatcher-error').createDispatcherError; + +/* Paths for API routes */ +const INFO_PATH = "/"; +const DEPLOYMENTS_PATH = "/dcae-deployments"; + +const start = function(config) { + + const startTime = new Date(); + + /* + * Set log level--config will supply a default of "INFO" if not explicitly + * set in config.json + */ + logging.setLevel(config.logLevel); + + /* Set up exported configuration */ + config.version = require('./version').version; + config.apiVersion = API_VERSION; + config.apiLinks = { + info : INFO_PATH, + deployments: DEPLOYMENTS_PATH + }; + exports.config = config; + + log.debug(null, "Configuration: " + JSON.stringify(config)); + + /* Set up the application */ + const app = express(); + app.set('x-powered-by', false); + app.set('etag', false); + + /* Give each request a unique request ID */ + app.use(require('./lib/middleware').assignId); + + /* If authentication is set up, check it */ + app.use(require('./lib/auth').checkAuth); + + /* Set up API routes */ + app.use(INFO_PATH, require('./lib/info')); + app.use(DEPLOYMENTS_PATH, require('./lib/dcae-deployments')); + + /* Set up error handling */ + app.use(require('./lib/middleware').handleErrors); + + /* Start the server */ + var server = null; + var usingTLS = false; + try { + if (config.ssl && config.ssl.pfx && config.ssl.passphrase + && config.ssl.pfx.length > 0) { + /* + * Check for non-zero pfx length--DCAE config will deliver an empty + * pfx if no cert available for the host. + */ + server = https.createServer({ + pfx : config.ssl.pfx, + passphrase : config.ssl.passphrase + }, app); + usingTLS = true; + } + else { + server = http.createServer(app); + } + } + catch (e) { + throw (createError('Could not create http(s) server--exiting: ' + + e.message, 500, 'system', 551)); + } + + server.setTimeout(0); + + server.listen(config.listenPort, config.listenHost, function(err) { + var addr = server.address(); + var msg = ("Dispatcher version " + config.version + " listening on " + + addr.address + ":" + addr.port + " pid: " + process.pid + + (usingTLS ? " " : " not ") + "using TLS (HTTPS)"); + log.metrics(null, {startTime: startTime, complete: true}, msg); + }); + + /* Set up handling for terminate signal */ + process.on('SIGTERM', function() { + var startTime = new Date(); + log.metrics(null, {startTime: startTime, complete: true}, "Deployment Handler API shutting down.") + server.close(function() { + log.metrics(null, {startTime: startTime, complete: true}, "Deployment Handler API server shut down.") + }); + }); + + /* Log actual exit */ + /* + * logging is asynchronous, so we will see another beforeExit event + * after it completes. + */ + var loggedExit = false; + process.on('beforeExit', function() { + if (!loggedExit) { + loggedExit = true; + log.metrics(null, {startTime: startTime, complete: true}, "Deployment Handler process exiting.") + } + }); +}; + +/* Set up logging */ +const logging = require('./lib/logging'); +const log = logging.getLogger(); + +/* Get configuration and start */ +conf.configure(process.env.CONSUL_HOST) +.then(start) +.catch(function(e) { + log.error(e.logCode ? e : createError( + 'Dispatcher exiting due to start-up problem: ' + e.message, 500, + 'system', 552)); + console.log("Dispatcher exiting due to startup problem: " + e.message); +}); \ No newline at end of file -- cgit 1.2.3-korg