|
@@ -69,6 +69,14 @@ const getClientKey = (headers) => {
|
|
|
.join('|');
|
|
.join('|');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const getClientIp = (req) => {
|
|
|
|
|
+ const ip = getRequestHeader(req, 'X-Real-IP') ||
|
|
|
|
|
+ normalizeHeaderValue(req.ip) ||
|
|
|
|
|
+ normalizeHeaderValue(req.socket?.remoteAddress) ||
|
|
|
|
|
+ normalizeHeaderValue(req.connection?.remoteAddress);
|
|
|
|
|
+ return ip.replace(/^::ffff:/, '');
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const scheduleSaveClientsToCache = () => {
|
|
const scheduleSaveClientsToCache = () => {
|
|
|
if (saveTimer) {
|
|
if (saveTimer) {
|
|
|
clearTimeout(saveTimer);
|
|
clearTimeout(saveTimer);
|
|
@@ -88,6 +96,7 @@ const recordRequest = (req) => {
|
|
|
key,
|
|
key,
|
|
|
...clientFields,
|
|
...clientFields,
|
|
|
deviceId: current.deviceId,
|
|
deviceId: current.deviceId,
|
|
|
|
|
+ ip: getClientIp(req),
|
|
|
route,
|
|
route,
|
|
|
firstRequestTime: current.firstRequestTime ?? now,
|
|
firstRequestTime: current.firstRequestTime ?? now,
|
|
|
lastRequestTime: now,
|
|
lastRequestTime: now,
|