MCPcopy
hub / github.com/scality/cloudserver / routeRequest

Method routeRequest

lib/server.js:128–210  ·  view source on GitHub ↗

* Route requests on 's3' port * @param {http.IncomingMessage} req - http request object * @param {http.ServerResponse} res - http response object * @returns {undefined}

(req, res)

Source from the content-addressed store, hash-verified

126 * @returns {undefined}
127 */
128 routeRequest(req, res) {
129 monitoringClient.httpActiveRequests.inc();
130 const requestStartTime = process.hrtime.bigint();
131
132 // Skip server access logs for heartbeat.
133 const isLoggingEnabled = _config.serverAccessLogs
134 && (_config.serverAccessLogs.mode === serverAccessLogsModes.LOG_ONLY
135 || _config.serverAccessLogs.mode === serverAccessLogsModes.ENABLED);
136 const isInternalRoute = req.url.startsWith('/_');
137 const isBackbeatRoute = req.url.startsWith('/_/backbeat/');
138 if (isLoggingEnabled && (!isInternalRoute || isBackbeatRoute)) {
139 // eslint-disable-next-line no-param-reassign
140 req.serverAccessLog = {
141 enabled: false,
142 startTime: requestStartTime,
143 startTimeUnixMS: Date.now(),
144 };
145
146 // eslint-disable-next-line no-param-reassign
147 res.serverAccessLog = {};
148
149 res.on('finish', () => {
150 // eslint-disable-next-line no-param-reassign
151 req.serverAccessLog.onFinishEndTime = process.hrtime.bigint();
152 });
153 }
154
155 // disable nagle algorithm
156 req.socket.setNoDelay();
157 res.on('close', () => {
158 // this is tested by retrieveData
159 // eslint-disable-next-line no-param-reassign
160 res.isclosed = true;
161 });
162
163 const monitorEndOfRequest = () => {
164 if (req.serverAccessLog) {
165 // eslint-disable-next-line no-param-reassign
166 req.serverAccessLog.onCloseEndTime = process.hrtime.bigint();
167 logServerAccess(req, res);
168 }
169
170 const responseTimeInNs = Number(process.hrtime.bigint() - requestStartTime);
171 const labels = {
172 method: req.method,
173 code: res.statusCode,
174 };
175 if (req.apiMethod) {
176 labels.action = req.apiMethod;
177 }
178 monitoringClient.httpRequestsTotal.labels(labels).inc();
179 monitoringClient.httpRequestDurationSeconds
180 .labels(labels)
181 .observe(responseTimeInNs / 1e9);
182 monitoringClient.httpActiveRequests.dec();
183 };
184 res.on('close', monitorEndOfRequest);
185

Callers 2

internalRouteRequestMethod · 0.95
server.jsFile · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected