Skip to content

Commit d6a51c2

Browse files
committed
CLDSRV-750: add analytics fields to server access logs
1 parent 0029851 commit d6a51c2

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

lib/api/api.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,10 @@ const api = {
172172
log.addDefaultFields({
173173
objectKey: request.objectKey,
174174
});
175-
if (request.serverAccessLog) {
176-
request.serverAccessLog.objectKey = request.objectKey;
177-
}
175+
}
176+
if (request.serverAccessLog) {
177+
request.serverAccessLog.objectKey = request.objectKey;
178+
request.serverAccessLog.analyticsAction = actionLog;
178179
}
179180
let returnTagCount = true;
180181

@@ -243,6 +244,10 @@ const api = {
243244
authNames.sessionName = userInfo.getShortid().split(':')[1];
244245
}
245246
log.addDefaultFields(authNames);
247+
if (request.serverAccessLog) {
248+
request.serverAccessLog.analyticsAccountName = authNames.accountName;
249+
request.serverAccessLog.analyticsUserName = authNames.userName;
250+
}
246251
if (apiMethod === 'objectPut' || apiMethod === 'objectPutPart') {
247252
return next(null, userInfo, authorizationResults, streamingV4Params, infos);
248253
}

lib/api/multipartDelete.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ function multipartDelete(authInfo, request, log, callback) {
5555
log.addDefaultFields({
5656
bytesDeleted: partSizeSum,
5757
});
58+
if (request.serverAccessLogs) {
59+
// eslint-disable-next-line no-param-reassign
60+
request.serverAccessLogs.analyticsBytesDeleted = partSizeSum;
61+
}
5862
}
5963
return callback(null, corsHeaders);
6064
}, request);

lib/api/objectDelete.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ function objectDeleteInternal(authInfo, request, log, isExpiration, cb) {
111111
log.end().addDefaultFields({
112112
bytesDeleted: objMD['content-length'],
113113
});
114+
if (request.serverAccessLogs) {
115+
// eslint-disable-next-line no-param-reassign
116+
request.serverAccessLogs.analyticsBytesDeleted = objMD['content-length'];
117+
}
114118
}
115119
return next(null, bucketMD, objMD);
116120
});

lib/utilities/serverAccesssLogger.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,21 @@ function logServerAccess(params, req, res) {
269269
const authInfo = params.authInfo;
270270

271271
serverAccessLogger.info('SERVER_ACCESS_LOG', {
272+
// Analytics
273+
action: params.analyticsAction || null,
274+
accountName: params.analyticsAccountName || null,
275+
accountDisplayName: authInfo ? authInfo.getAccountDisplayName() : null,
276+
userName: params.analyticsUserName || null,
277+
clientPort: req.socket.remotePort || null,
278+
httpMethod: req.method || null,
279+
bytesDeleted: params.analyticsBytesDeleted || null,
280+
bytesReceived: req.parsedContentLength || 0,
281+
bodyLength: parseInt(req.headers['content-length'], 10) || 0,
282+
contentLength: req.parsedContentLength || 0,
283+
// eslint-disable-next-line camelcase
284+
elapsed_ms: params.startTime && params.endTime ? Number(params.endTime - params.startTime) / 1_000_000 : null,
285+
httpURL: req.url || null,
286+
272287
// AWS access server logs fields https://docs.aws.amazon.com/AmazonS3/latest/userguide/LogFormat.html
273288
startTime: params.startTime ? params.startTime.toString() : null, // AWS "Time" field
274289
requester: getRequester(authInfo),

0 commit comments

Comments
 (0)