aboutsummaryrefslogtreecommitdiffstats
path: root/lib/promise_request.js
diff options
context:
space:
mode:
authorAlex Shatov <alexs@att.com>2017-09-15 13:52:31 -0400
committerAlex Shatov <alexs@att.com>2017-09-15 13:52:31 -0400
commitb511ff360603599c43e066722d3902a55fac3f6d (patch)
tree7caa5c8ceb51568b444f0bd4ed9158fe92e8355e /lib/promise_request.js
parent3486bd1a77a8a3f198de171fda34c102406a26ea (diff)
4.2.0 - added the policy-update handling
* API version 4.1.0 - added /policy, /swagger-ui * new: policy update with queuing of execute-operations * more data on info - branch+commit-datetime * expecting consul ip to be in /etc/hosts * added swagger-ui and added policy to *API.yaml * common logging - more audits and metrics records - directly in promise_request Change-Id: I7d32f34100a16b5b7293ed5afe67f5c8c3098495 Issue-Id: DCAEGEN2-62 Signed-off-by: Alex Shatov <alexs@att.com>
Diffstat (limited to 'lib/promise_request.js')
-rw-r--r--lib/promise_request.js199
1 files changed, 108 insertions, 91 deletions
diff --git a/lib/promise_request.js b/lib/promise_request.js
index ca09eee..bda4d66 100644
--- a/lib/promise_request.js
+++ b/lib/promise_request.js
@@ -1,114 +1,131 @@
/*
-Copyright(c) 2017 AT&T Intellectual Property. All rights reserved.
+Copyright(c) 2017 AT&T Intellectual Property. All rights reserved.
-Licensed under the Apache License, Version 2.0 (the "License");
+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,
+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.
+CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
*/
-
+
/* Promise-based HTTP request client */
-
+
"use strict";
-
+
/*
- * Make an HTTP request using a string for the body
+ * Make an HTTP request using a string for the body
* of the request.
- * Return a promise for result in the form
+ * Return a promise for result in the form
* {status: <http status code>, body: <response body>}
*/
-
+
const http = require('http');
const https = require('https');
const url = require('url');
const querystring = require('querystring');
+const logger = require('./logging').getLogger();
+
+exports.doRequest = function(options, body, targetEntity, mainReq) {
+ var opInfo = {"startTime":new Date(), "targetEntity": targetEntity};
+
+ return new Promise(function(resolve, reject) {
+
+ var reqBody = null;
+ if (options.json) {
+ reqBody = JSON.stringify(options.json);
+ options.headers = options.headers || {};
+ options.headers['Content-Type'] = 'application/json';
+ }
+ else if (body) {
+ reqBody = body;
+ }
+
+ if (options.uri) {
+ var parsed = url.parse(options.uri);
+ options.protocol = parsed.protocol;
+ options.hostname = parsed.hostname;
+ options.port = parsed.port;
+ options.path = parsed.path;
+ if (options.qs) {
+ options.path += ('?' + querystring.stringify(options.qs));
+ }
+ opInfo.targetService = options.method + " " + options.uri;
+ }
+
+ try {
+ var req = (options.protocol === 'https:' ? https.request(options) : http.request(options));
+ }
+ catch (e) {
+ opInfo.respCode = 500;
+ opInfo.complete = false;
+ logger.metrics(mainReq, opInfo, e.message);
+
+ reject(e);
+ }
+
+ // Reject promise if there's an error
+ req.on('error', function(error) {
+ opInfo.respCode = error.status || 500;
+ opInfo.complete = false;
+ logger.metrics(mainReq, opInfo, error.message);
+
+ reject(error);
+ });
+
+ // Capture the response
+ req.on('response', function(resp) {
+
+ // Collect the body of the response
+ var rbody = '';
+ resp.on('data', function(d) {
+ rbody += d;
+ });
+
+ // resolve or reject when finished
+ resp.on('end', function() {
+
+ var result = {
+ status : resp.statusCode,
+ body : rbody
+ };
+
+ // Add a JSON version of the body if appropriate
+ if (rbody.length) {
+ try {
+ var jbody = JSON.parse(rbody);
+ result.json = jbody;
+ }
+ catch (pe) {
+ // Do nothing, no json property added to the result object
+ }
+ }
+
+ opInfo.respCode = resp.statusCode || 500;
+ if (resp.statusCode > 199 && resp.statusCode < 300) {
+ // HTTP status code indicates success - resolve the promise
+ opInfo.complete = true;
+ logger.metrics(mainReq, opInfo, result.body);
+
+ resolve(result);
+ } else {
+ // Reject the promise
+ opInfo.complete = false;
+ logger.metrics(mainReq, opInfo, result.body);
+
+ reject(result);
+ }
+ });
+ });
-exports.doRequest = function(options, body) {
-
- return new Promise(function(resolve, reject) {
-
- var reqBody = null;
- if (options.json) {
- reqBody = JSON.stringify(options.json);
- options.headers = options.headers || {};
- options.headers['Content-Type'] = 'application/json';
- }
- else if (body) {
- reqBody = body;
- }
-
- if (options.uri) {
- var parsed = url.parse(options.uri);
- options.protocol = parsed.protocol;
- options.hostname = parsed.hostname;
- options.port = parsed.port;
- options.path = parsed.path;
- if (options.qs) {
- options.path += ('?' + querystring.stringify(options.qs));
- }
- }
-
- try {
- var req = (options.protocol === 'https:' ? https.request(options) : http.request(options));
- }
- catch (e) {
- reject(e);
- }
-
- // Reject promise if there's an error
- req.on('error', function(error) {
- reject(error);
- });
-
- // Capture the response
- req.on('response', function(resp) {
-
- // Collect the body of the response
- var rbody = '';
- resp.on('data', function(d) {
- rbody += d;
- });
-
- // resolve or reject when finished
- resp.on('end', function() {
-
- var result = {
- status : resp.statusCode,
- body : rbody
- };
-
- // Add a JSON version of the body if appropriate
- if (rbody.length > 0) {
- try {
- var jbody = JSON.parse(rbody);
- result.json = jbody;
- }
- catch (pe) {
- // Do nothing, no json property added to the result object
- }
- }
-
- if (resp.statusCode > 199 && resp.statusCode < 300) {
- // HTTP status code indicates success - resolve the promise
- resolve(result);
- }
- else {
- // Reject the promise
- reject(result);
- }
- });
- });
-
- if (reqBody) {
- req.write(reqBody, 'utf8');
- }
- req.end();
- });
+ if (reqBody) {
+ req.write(reqBody, 'utf8');
+ }
+ req.end();
+ });
};