UNPKG

@google-cloud/logging

Version:
85 lines 3.17 kB
"use strict"; /*! * 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