enterprise-logging-system 1.0.25 → 1.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/middleware/loggingMiddleware.d.ts.map +1 -1
- package/dist/backend/middleware/loggingMiddleware.js +46 -27
- package/dist/backend/middleware/loggingMiddleware.js.map +1 -1
- package/dist/backend/models/AccessLog.d.ts +2 -0
- package/dist/backend/models/AccessLog.d.ts.map +1 -1
- package/dist/backend/models/AccessLog.js.map +1 -1
- package/dist/backend/repositories/AccessLogRepository.d.ts.map +1 -1
- package/dist/backend/repositories/AccessLogRepository.js +91 -36
- package/dist/backend/repositories/AccessLogRepository.js.map +1 -1
- package/dist/backend/services/LoggingService.d.ts +2 -0
- package/dist/backend/services/LoggingService.d.ts.map +1 -1
- package/dist/backend/services/LoggingService.js +57 -0
- package/dist/backend/services/LoggingService.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loggingMiddleware.d.ts","sourceRoot":"","sources":["../../../src/backend/middleware/loggingMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AA4H5D,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"loggingMiddleware.d.ts","sourceRoot":"","sources":["../../../src/backend/middleware/loggingMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AA4H5D,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,cAAc,UAS5C,OAAO,OAAO,QAAQ,QAAQ,YAAY,aAgEnE"}
|
|
@@ -108,26 +108,37 @@ exports.createLoggingMiddleware = createLoggingMiddleware;
|
|
|
108
108
|
// }
|
|
109
109
|
// loggingMiddleware.ts
|
|
110
110
|
function createLoggingMiddleware(loggingService) {
|
|
111
|
+
// Track sessions that have been logged to prevent duplicates
|
|
112
|
+
const loggedSessions = new Set();
|
|
113
|
+
// Clean up old sessions every hour
|
|
114
|
+
setInterval(() => {
|
|
115
|
+
loggedSessions.clear();
|
|
116
|
+
}, 60 * 60 * 1000);
|
|
111
117
|
const apiLogger = (req, res, next) => {
|
|
112
118
|
const startTime = Date.now();
|
|
113
119
|
res.on('finish', async () => {
|
|
114
120
|
try {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
121
|
+
// Only log significant API calls to prevent spam
|
|
122
|
+
const significantPaths = ['/login', '/logout', '/export', '/import', '/delete'];
|
|
123
|
+
const isSignificant = significantPaths.some(path => req.path.includes(path));
|
|
124
|
+
if (isSignificant || res.statusCode >= 400) {
|
|
125
|
+
await loggingService.logAction({
|
|
126
|
+
tenantId: req.headers['x-tenant-id'],
|
|
127
|
+
userId: req.headers['x-user-id'] || 'anonymous',
|
|
128
|
+
userRole: req.headers['x-user-role'] || 'guest',
|
|
129
|
+
sessionId: req.headers['x-session-id'] || '',
|
|
130
|
+
ipAddress: req.ip || '',
|
|
131
|
+
userAgent: req.headers['user-agent'] || '',
|
|
132
|
+
activityType: 'API_CALL',
|
|
133
|
+
activityName: `${req.method} ${req.path}`,
|
|
134
|
+
actionType: 'HTTP_REQUEST',
|
|
135
|
+
actionTarget: req.path,
|
|
136
|
+
actionData: {
|
|
137
|
+
statusCode: res.statusCode,
|
|
138
|
+
duration: Date.now() - startTime
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
131
142
|
}
|
|
132
143
|
catch { }
|
|
133
144
|
});
|
|
@@ -137,18 +148,26 @@ function createLoggingMiddleware(loggingService) {
|
|
|
137
148
|
const userId = req.headers['x-user-id'];
|
|
138
149
|
const sessionId = req.headers['x-session-id'];
|
|
139
150
|
if (userId && sessionId) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
151
|
+
// Create a unique key for this session today
|
|
152
|
+
const today = new Date().toDateString();
|
|
153
|
+
const sessionKey = `${sessionId}_${today}`;
|
|
154
|
+
// Only start session if we haven't logged it today
|
|
155
|
+
if (!loggedSessions.has(sessionKey)) {
|
|
156
|
+
try {
|
|
157
|
+
await loggingService.startSession({
|
|
158
|
+
tenantId: req.headers['x-tenant-id'],
|
|
159
|
+
userId,
|
|
160
|
+
username: req.headers['x-username'] || userId,
|
|
161
|
+
userRole: req.headers['x-user-role'] || 'user',
|
|
162
|
+
sessionId,
|
|
163
|
+
ipAddress: req.ip || '',
|
|
164
|
+
userAgent: req.headers['user-agent'] || ''
|
|
165
|
+
});
|
|
166
|
+
// Mark this session as logged for today
|
|
167
|
+
loggedSessions.add(sessionKey);
|
|
168
|
+
}
|
|
169
|
+
catch { }
|
|
150
170
|
}
|
|
151
|
-
catch { }
|
|
152
171
|
}
|
|
153
172
|
next();
|
|
154
173
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loggingMiddleware.js","sourceRoot":"","sources":["../../../src/backend/middleware/loggingMiddleware.ts"],"names":[],"mappings":";;AA6HA,
|
|
1
|
+
{"version":3,"file":"loggingMiddleware.js","sourceRoot":"","sources":["../../../src/backend/middleware/loggingMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessLog.d.ts","sourceRoot":"","sources":["../../../src/backend/models/AccessLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzF,MAAM,WAAW,SAAU,SAAQ,YAAY;IAE7C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,IAAI,EAAE,WAAW,GAAG,kBAAkB,GAAG,eAAe,GAAG,aAAa,CAAC;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IAGrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAGjC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IAGtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,eAAO,MAAM,kBAAkB,OAK9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"AccessLog.d.ts","sourceRoot":"","sources":["../../../src/backend/models/AccessLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzF,MAAM,WAAW,SAAU,SAAQ,YAAY;IAE7C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,IAAI,EAAE,WAAW,GAAG,kBAAkB,GAAG,eAAe,GAAG,aAAa,CAAC;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IAGrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAGjC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IAGtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,eAAO,MAAM,kBAAkB,OAK9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessLog.js","sourceRoot":"","sources":["../../../src/backend/models/AccessLog.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AccessLog.js","sourceRoot":"","sources":["../../../src/backend/models/AccessLog.ts"],"names":[],"mappings":";;;AAqDa,QAAA,kBAAkB,GAAG;AAChC,qFAAqF;AACrF,4FAA4F;AAC5F,qEAAqE;AACrE,gGAAgG;CACjG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessLogRepository.d.ts","sourceRoot":"","sources":["../../../src/backend/repositories/AccessLogRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAoB,kBAAkB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEjG,qBAAa,mBAAoB,SAAQ,cAAc,CAAC,SAAS,CAAC;gBACpD,EAAE,EAAE,EAAE;IAIlB;;;;OAIG;IACG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"AccessLogRepository.d.ts","sourceRoot":"","sources":["../../../src/backend/repositories/AccessLogRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAoB,kBAAkB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEjG,qBAAa,mBAAoB,SAAQ,cAAc,CAAC,SAAS,CAAC;gBACpD,EAAE,EAAE,EAAE;IAIlB;;;;OAIG;IACG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IA6FvF;;;;OAIG;IACG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IA0F/E,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO3E,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAInE;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAyC/D,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAYrF,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -17,45 +17,74 @@ class AccessLogRepository extends BaseRepository_1.BaseRepository {
|
|
|
17
17
|
const currentDate = new Date(log.timestamp);
|
|
18
18
|
const startOfDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), 0, 0, 0, 0);
|
|
19
19
|
const endOfDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), 23, 59, 59, 999);
|
|
20
|
-
//
|
|
21
|
-
const
|
|
20
|
+
// Use upsert to ensure only one entry per session per day
|
|
21
|
+
const filter = {
|
|
22
22
|
sessionId: log.sessionId,
|
|
23
23
|
timestamp: { $gte: startOfDay, $lte: endOfDay }
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// Update timestamp to latest activity
|
|
24
|
+
};
|
|
25
|
+
const update = {
|
|
26
|
+
$set: {
|
|
27
|
+
// Always update these fields to latest values
|
|
29
28
|
timestamp: log.timestamp,
|
|
30
|
-
// Update page info to latest page view
|
|
31
29
|
pageId: log.pageId,
|
|
32
30
|
pageTitle: log.pageTitle,
|
|
33
31
|
pageUrl: log.pageUrl,
|
|
34
32
|
pageRoute: log.pageRoute,
|
|
35
33
|
previousPage: log.previousPage,
|
|
36
|
-
// Update end time and duration
|
|
37
34
|
endTime: log.timestamp,
|
|
38
|
-
activeDuration: log.timestamp.getTime() - new Date(existingLog.startTime || existingLog.timestamp).getTime(),
|
|
39
|
-
// Update system context
|
|
40
35
|
browser: log.browser,
|
|
41
36
|
geoLocation: log.geoLocation,
|
|
42
37
|
network: log.network,
|
|
43
|
-
|
|
44
|
-
...(log.metadata && { metadata: { ...existingLog.metadata, ...log.metadata } }),
|
|
45
|
-
// Update indexes
|
|
38
|
+
...(log.metadata && { metadata: log.metadata }),
|
|
46
39
|
indexes: {
|
|
47
40
|
tenant_user_date: `${log.tenantId}_${log.userId}_${log.timestamp.getTime()}`,
|
|
48
41
|
session_time: `${log.sessionId}_${log.activityType}`,
|
|
49
42
|
page_time: `${log.pageId}_${log.timestamp.getTime()}`
|
|
50
43
|
}
|
|
51
|
-
}
|
|
52
|
-
|
|
44
|
+
},
|
|
45
|
+
$setOnInsert: {
|
|
46
|
+
// Only set these on first insert
|
|
47
|
+
_id: this.generateId(),
|
|
48
|
+
type: 'PAGE_OPEN',
|
|
49
|
+
tenantId: log.tenantId,
|
|
50
|
+
userId: log.userId,
|
|
51
|
+
userRole: log.userRole,
|
|
52
|
+
sessionId: log.sessionId,
|
|
53
|
+
ipAddress: log.ipAddress,
|
|
54
|
+
userAgent: log.userAgent,
|
|
55
|
+
username: log.username,
|
|
56
|
+
employeeId: log.employeeId,
|
|
57
|
+
activityType: log.activityType,
|
|
58
|
+
activityName: log.activityName,
|
|
59
|
+
eventTime: log.eventTime,
|
|
60
|
+
startTime: log.startTime || log.timestamp
|
|
61
|
+
},
|
|
62
|
+
$inc: {
|
|
63
|
+
// Track how many times this session was active today
|
|
64
|
+
activityCount: 1
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const result = await this.collection.findOneAndUpdate(filter, update, {
|
|
68
|
+
upsert: true,
|
|
69
|
+
returnDocument: 'after'
|
|
70
|
+
});
|
|
71
|
+
if (result.value) {
|
|
72
|
+
// Calculate duration for existing entries
|
|
73
|
+
const startTime = new Date(result.value.startTime || result.value.timestamp);
|
|
74
|
+
result.value.activeDuration = log.timestamp.getTime() - startTime.getTime();
|
|
75
|
+
return result.value;
|
|
76
|
+
}
|
|
77
|
+
// Fallback: if upsert failed, try to find the existing record
|
|
78
|
+
const existingLog = await this.findOne(filter);
|
|
79
|
+
if (existingLog) {
|
|
80
|
+
return existingLog;
|
|
53
81
|
}
|
|
54
|
-
//
|
|
82
|
+
// Last resort: create new record manually
|
|
55
83
|
const accessLog = {
|
|
56
84
|
...log,
|
|
57
85
|
_id: this.generateId(),
|
|
58
86
|
type: 'PAGE_OPEN',
|
|
87
|
+
activityCount: 1,
|
|
59
88
|
indexes: {
|
|
60
89
|
tenant_user_date: `${log.tenantId}_${log.userId}_${log.timestamp.getTime()}`,
|
|
61
90
|
session_time: `${log.sessionId}_${log.activityType}`,
|
|
@@ -74,45 +103,71 @@ class AccessLogRepository extends BaseRepository_1.BaseRepository {
|
|
|
74
103
|
const currentDate = new Date(log.timestamp);
|
|
75
104
|
const startOfDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), 0, 0, 0, 0);
|
|
76
105
|
const endOfDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), 23, 59, 59, 999);
|
|
77
|
-
//
|
|
78
|
-
const
|
|
106
|
+
// Use upsert to ensure only one entry per session per day
|
|
107
|
+
const filter = {
|
|
79
108
|
sessionId: log.sessionId,
|
|
80
109
|
timestamp: { $gte: startOfDay, $lte: endOfDay }
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
// Update timestamp to latest activity
|
|
110
|
+
};
|
|
111
|
+
const update = {
|
|
112
|
+
$set: {
|
|
113
|
+
// Always update these fields to latest values
|
|
86
114
|
timestamp: log.timestamp,
|
|
87
|
-
// Update action info to latest action
|
|
88
115
|
activityType: log.activityType,
|
|
89
116
|
activityName: log.activityName,
|
|
90
117
|
actionType: log.actionType,
|
|
91
118
|
actionTarget: log.actionTarget,
|
|
92
119
|
actionData: log.actionData,
|
|
93
|
-
// Update page info if provided
|
|
94
|
-
...(log.pageId && { pageId: log.pageId }),
|
|
95
|
-
// Update end time and duration
|
|
96
120
|
endTime: log.timestamp,
|
|
97
|
-
activeDuration: log.timestamp.getTime() - new Date(existingLog.startTime || existingLog.timestamp).getTime(),
|
|
98
|
-
// Update system context
|
|
99
121
|
browser: log.browser,
|
|
100
|
-
|
|
101
|
-
...(log.metadata && { metadata:
|
|
102
|
-
// Update indexes
|
|
122
|
+
...(log.pageId && { pageId: log.pageId }),
|
|
123
|
+
...(log.metadata && { metadata: log.metadata }),
|
|
103
124
|
indexes: {
|
|
104
125
|
tenant_user_date: `${log.tenantId}_${log.userId}_${log.timestamp.getTime()}`,
|
|
105
126
|
session_time: `${log.sessionId}_${log.activityType}`,
|
|
106
127
|
page_time: `${log.pageId}_${log.timestamp.getTime()}`
|
|
107
128
|
}
|
|
108
|
-
}
|
|
109
|
-
|
|
129
|
+
},
|
|
130
|
+
$setOnInsert: {
|
|
131
|
+
// Only set these on first insert
|
|
132
|
+
_id: this.generateId(),
|
|
133
|
+
type: 'ACTION_PERFORMED',
|
|
134
|
+
tenantId: log.tenantId,
|
|
135
|
+
userId: log.userId,
|
|
136
|
+
userRole: log.userRole,
|
|
137
|
+
sessionId: log.sessionId,
|
|
138
|
+
ipAddress: log.ipAddress,
|
|
139
|
+
userAgent: log.userAgent,
|
|
140
|
+
username: log.username,
|
|
141
|
+
employeeId: log.employeeId,
|
|
142
|
+
eventTime: log.eventTime,
|
|
143
|
+
startTime: log.startTime || log.timestamp
|
|
144
|
+
},
|
|
145
|
+
$inc: {
|
|
146
|
+
// Track how many actions this session performed today
|
|
147
|
+
actionCount: 1
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const result = await this.collection.findOneAndUpdate(filter, update, {
|
|
151
|
+
upsert: true,
|
|
152
|
+
returnDocument: 'after'
|
|
153
|
+
});
|
|
154
|
+
if (result.value) {
|
|
155
|
+
// Calculate duration for existing entries
|
|
156
|
+
const startTime = new Date(result.value.startTime || result.value.timestamp);
|
|
157
|
+
result.value.activeDuration = log.timestamp.getTime() - startTime.getTime();
|
|
158
|
+
return result.value;
|
|
159
|
+
}
|
|
160
|
+
// Fallback: if upsert failed, try to find the existing record
|
|
161
|
+
const existingLog = await this.findOne(filter);
|
|
162
|
+
if (existingLog) {
|
|
163
|
+
return existingLog;
|
|
110
164
|
}
|
|
111
|
-
//
|
|
165
|
+
// Last resort: create new record manually
|
|
112
166
|
const accessLog = {
|
|
113
167
|
...log,
|
|
114
168
|
_id: this.generateId(),
|
|
115
169
|
type: 'ACTION_PERFORMED',
|
|
170
|
+
actionCount: 1,
|
|
116
171
|
indexes: {
|
|
117
172
|
tenant_user_date: `${log.tenantId}_${log.userId}_${log.timestamp.getTime()}`,
|
|
118
173
|
session_time: `${log.sessionId}_${log.activityType}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessLogRepository.js","sourceRoot":"","sources":["../../../src/backend/repositories/AccessLogRepository.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAClD,mDAAoE;AAGpE,MAAa,mBAAoB,SAAQ,+BAAyB;IAChE,YAAY,EAAM;QAChB,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,8BAAkB,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,GAAgD;QAChE,yDAAyD;QACzD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClH,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAErH,
|
|
1
|
+
{"version":3,"file":"AccessLogRepository.js","sourceRoot":"","sources":["../../../src/backend/repositories/AccessLogRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export declare class LoggingService {
|
|
|
12
12
|
private sessionLogRepo;
|
|
13
13
|
private changeLogRepo;
|
|
14
14
|
private exportLogRepo;
|
|
15
|
+
private recentLogs;
|
|
16
|
+
private readonly LOG_COOLDOWN;
|
|
15
17
|
constructor(accessLogRepo: AccessLogRepository, sessionLogRepo: SessionLogRepository, changeLogRepo: ChangeLogRepository, exportLogRepo: ExportLogRepository);
|
|
16
18
|
logPageView(data: {
|
|
17
19
|
tenantId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoggingService.d.ts","sourceRoot":"","sources":["../../../src/backend/services/LoggingService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,qBAAa,cAAc;
|
|
1
|
+
{"version":3,"file":"LoggingService.d.ts","sourceRoot":"","sources":["../../../src/backend/services/LoggingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,14 +6,44 @@ class LoggingService {
|
|
|
6
6
|
sessionLogRepo;
|
|
7
7
|
changeLogRepo;
|
|
8
8
|
exportLogRepo;
|
|
9
|
+
recentLogs = new Map(); // Cache for recent logs
|
|
10
|
+
LOG_COOLDOWN = 60 * 1000; // 1 minute cooldown between logs
|
|
9
11
|
constructor(accessLogRepo, sessionLogRepo, changeLogRepo, exportLogRepo) {
|
|
10
12
|
this.accessLogRepo = accessLogRepo;
|
|
11
13
|
this.sessionLogRepo = sessionLogRepo;
|
|
12
14
|
this.changeLogRepo = changeLogRepo;
|
|
13
15
|
this.exportLogRepo = exportLogRepo;
|
|
16
|
+
// Clean up old cache entries every 5 minutes
|
|
17
|
+
setInterval(() => {
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
for (const [key, timestamp] of this.recentLogs.entries()) {
|
|
20
|
+
if (now - timestamp > this.LOG_COOLDOWN) {
|
|
21
|
+
this.recentLogs.delete(key);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}, 5 * 60 * 1000);
|
|
14
25
|
}
|
|
15
26
|
// Access logs
|
|
16
27
|
async logPageView(data) {
|
|
28
|
+
// Create a unique key for this session + day
|
|
29
|
+
const today = new Date().toDateString();
|
|
30
|
+
const logKey = `pageview_${data.sessionId}_${today}`;
|
|
31
|
+
// Check if we've already logged this session today (with cooldown)
|
|
32
|
+
const lastLogTime = this.recentLogs.get(logKey);
|
|
33
|
+
if (lastLogTime && Date.now() - lastLogTime < this.LOG_COOLDOWN) {
|
|
34
|
+
// Return existing log instead of creating duplicate
|
|
35
|
+
const existingLog = await this.accessLogRepo.findOne({
|
|
36
|
+
sessionId: data.sessionId,
|
|
37
|
+
timestamp: {
|
|
38
|
+
$gte: new Date(new Date().setHours(0, 0, 0, 0)),
|
|
39
|
+
$lte: new Date(new Date().setHours(23, 59, 59, 999))
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
if (existingLog)
|
|
43
|
+
return existingLog;
|
|
44
|
+
}
|
|
45
|
+
// Update cache
|
|
46
|
+
this.recentLogs.set(logKey, Date.now());
|
|
17
47
|
return this.accessLogRepo.logPageView({
|
|
18
48
|
// BaseLogEntry fields
|
|
19
49
|
tenantId: data.tenantId,
|
|
@@ -43,6 +73,33 @@ class LoggingService {
|
|
|
43
73
|
});
|
|
44
74
|
}
|
|
45
75
|
async logAction(data) {
|
|
76
|
+
// Skip logging for routine API calls to prevent spam
|
|
77
|
+
if (data.activityType === 'API_CALL' && data.actionType === 'HTTP_REQUEST') {
|
|
78
|
+
// Only log significant API calls, not routine ones
|
|
79
|
+
const significantPaths = ['/login', '/logout', '/export', '/import', '/delete'];
|
|
80
|
+
const isSignificant = significantPaths.some(path => data.actionTarget?.includes(path));
|
|
81
|
+
if (!isSignificant) {
|
|
82
|
+
// For non-significant API calls, just update existing log if present
|
|
83
|
+
const today = new Date().toDateString();
|
|
84
|
+
const logKey = `action_${data.sessionId}_${today}`;
|
|
85
|
+
const lastLogTime = this.recentLogs.get(logKey);
|
|
86
|
+
if (lastLogTime && Date.now() - lastLogTime < this.LOG_COOLDOWN) {
|
|
87
|
+
const existingLog = await this.accessLogRepo.findOne({
|
|
88
|
+
sessionId: data.sessionId,
|
|
89
|
+
timestamp: {
|
|
90
|
+
$gte: new Date(new Date().setHours(0, 0, 0, 0)),
|
|
91
|
+
$lte: new Date(new Date().setHours(23, 59, 59, 999))
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
if (existingLog)
|
|
95
|
+
return existingLog;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Update cache for significant actions
|
|
99
|
+
const today = new Date().toDateString();
|
|
100
|
+
const logKey = `action_${data.sessionId}_${today}`;
|
|
101
|
+
this.recentLogs.set(logKey, Date.now());
|
|
102
|
+
}
|
|
46
103
|
return this.accessLogRepo.logAction({
|
|
47
104
|
// BaseLogEntry fields
|
|
48
105
|
tenantId: data.tenantId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoggingService.js","sourceRoot":"","sources":["../../../src/backend/services/LoggingService.ts"],"names":[],"mappings":";;;AAkBA,MAAa,cAAc;
|
|
1
|
+
{"version":3,"file":"LoggingService.js","sourceRoot":"","sources":["../../../src/backend/services/LoggingService.ts"],"names":[],"mappings":"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"}
|