@google-cloud/logging
Version:
Cloud Logging Client Library for Node.js
85 lines • 3.17 kB
JavaScript
;
/*!
* Copyright 2021 Google LLC
*
* 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.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeHttpRequestData = makeHttpRequestData;
exports.isRawHttpRequest = isRawHttpRequest;
/**
* makeHttpRequestData turns raw incoming HTTPRequests into structured
* HTTPRequest objects interpreted by Cloud Logging.
*
* @param req
* @param res
* @param latencyMilliseconds
*/
function makeHttpRequestData(req, res, latencyMilliseconds) {
let requestUrl, protocol, requestMethod, userAgent, referer, status, responseSize, latency;
// Format request properties
if (req.url)
requestUrl = req.url;
// OriginalURL overwrites inferred url
if ('originalUrl' in req && req.originalUrl)
requestUrl = req.originalUrl;
// Format protocol from valid URL
if (requestUrl) {
try {
const url = new URL(requestUrl);
protocol = url.protocol;
}
catch (e) {
// Library should not panic
}
}
req.method ? (requestMethod = req.method) : null;
if (req.headers && req.headers['user-agent']) {
req.headers['user-agent'] ? (userAgent = req.headers['user-agent']) : null;
req.headers['referer'] ? (referer = req.headers['referer']) : null;
}
// Format response properties
if (res) {
res.statusCode ? (status = res.statusCode) : null;
responseSize =
(res.getHeader && Number(res.getHeader('Content-Length'))) || 0;
}
// Format latency
if (latencyMilliseconds) {
latency = {
seconds: Math.floor(latencyMilliseconds / 1e3),
nanos: Math.floor((latencyMilliseconds % 1e3) * 1e6),
};
}
// Only include the property if its value exists
return Object.assign({}, requestUrl ? { requestUrl } : null, protocol ? { protocol } : null, requestMethod ? { requestMethod } : null, userAgent ? { userAgent } : null, referer ? { referer } : null, responseSize ? { responseSize } : null, status ? { status } : null, latency ? { latency } : null);
}
/**
* isRawHttpRequest detects whether a request object extends the
* http.IncomingMessage class. It should return true on HTTP compliant requests
* and all requests created by an http.Server.
*
* @param req
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function isRawHttpRequest(req) {
if (req &&
('originalUrl' in req ||
'headers' in req ||
'method' in req ||
'url' in req)) {
return true;
}
return false;
}
//# sourceMappingURL=http-request.js.map