|
178 | 178 | const scoreEmoji = activitySummary.activityScore > 80 ? '✅' : |
179 | 179 | activitySummary.activityScore > 60 ? '⚠️' : '🚨'; |
180 | 180 |
|
| 181 | + // Handle different field names from Firebase vs in-memory |
| 182 | + const totalIdleSeconds = activitySummary.totalIdleSeconds || activitySummary.totalIdleTime || 0; |
| 183 | + const sessionDurationSeconds = activitySummary.sessionDuration || (activitySummary.sessionDurationMinutes * 60) || 0; |
| 184 | + const sessionDurationMinutes = Math.round(sessionDurationSeconds / 60); |
| 185 | + |
181 | 186 | // Calculate idle percentage |
182 | | - const idlePercentage = Math.round((activitySummary.totalIdleSeconds / (activitySummary.sessionDurationMinutes * 60)) * 100); |
| 187 | + const idlePercentage = sessionDurationSeconds > 0 ? |
| 188 | + Math.round((totalIdleSeconds / sessionDurationSeconds) * 100) : 0; |
183 | 189 |
|
184 | 190 | activitySection = ` |
185 | 191 | <div style="margin-top: 10px; padding: 8px; background: rgba(66,165,245,0.1); border-radius: 4px;"> |
186 | 192 | <strong>📊 Candidate Behavior Analysis:</strong> |
187 | 193 | <div>Engagement Level: ${scoreEmoji} ${engagementLevel} (Score: ${activitySummary.activityScore}/100)</div> |
188 | 194 | <div>• Tab Switches: ${activitySummary.tabSwitches} ${activitySummary.tabSwitches > 10 ? '⚠️ (High)' : ''}</div> |
189 | 195 | <div>• Idle Periods: ${activitySummary.idlePeriods} times</div> |
190 | | - <div>• Total Idle Time: ${Math.round(activitySummary.totalIdleSeconds / 60)} min (${idlePercentage}% of session)</div> |
191 | | - ${activitySummary.suspiciousPatterns && activitySummary.suspiciousPatterns.length > 0 ? |
192 | | - `<div>• Notable Behaviors: ${activitySummary.suspiciousPatterns.length} detected</div>` : ''} |
193 | | - <div>• Session Duration: ${activitySummary.sessionDurationMinutes} minutes</div> |
| 196 | + <div>• Total Idle Time: ${Math.round(totalIdleSeconds / 60)} min (${idlePercentage}% of session)</div> |
| 197 | + ${activitySummary.suspiciousPatterns && activitySummary.suspiciousPatterns > 0 ? |
| 198 | + `<div>• Notable Behaviors: ${activitySummary.suspiciousPatterns} detected</div>` : ''} |
| 199 | + <div>• Session Duration: ${sessionDurationMinutes} minutes</div> |
194 | 200 | </div> |
195 | 201 | `; |
196 | 202 | } |
|
255 | 261 | const activityColor = activitySummary.activityScore > 80 ? '#4caf50' : |
256 | 262 | activitySummary.activityScore > 60 ? '#ff9800' : '#ff0000'; |
257 | 263 |
|
| 264 | + // Handle different field names from Firebase vs in-memory |
| 265 | + const totalIdleSeconds = activitySummary.totalIdleSeconds || activitySummary.totalIdleTime || 0; |
| 266 | + const sessionDurationSeconds = activitySummary.sessionDuration || (activitySummary.sessionDurationMinutes * 60) || 0; |
| 267 | + const sessionDurationMinutes = Math.round(sessionDurationSeconds / 60); |
| 268 | + |
258 | 269 | // Calculate idle percentage |
259 | | - const idlePercentage = Math.round((activitySummary.totalIdleSeconds / (activitySummary.sessionDurationMinutes * 60)) * 100); |
| 270 | + const idlePercentage = sessionDurationSeconds > 0 ? |
| 271 | + Math.round((totalIdleSeconds / sessionDurationSeconds) * 100) : 0; |
260 | 272 |
|
261 | 273 | // Determine engagement emoji and text |
262 | 274 | let engagementEmoji = '✅'; |
|
269 | 281 | engagementText = 'Medium Engagement'; |
270 | 282 | } |
271 | 283 |
|
| 284 | + // Handle suspicious patterns - could be array or number |
| 285 | + const suspiciousCount = Array.isArray(activitySummary.suspiciousPatterns) ? |
| 286 | + activitySummary.suspiciousPatterns.length : |
| 287 | + (activitySummary.suspiciousPatterns || 0); |
| 288 | + |
272 | 289 | slackPayload.attachments.push({ |
273 | 290 | color: activityColor, |
274 | 291 | title: "📊 Candidate Behavior Metrics", |
|
290 | 307 | }, |
291 | 308 | { |
292 | 309 | title: "Idle Time", |
293 | | - value: `${Math.round(activitySummary.totalIdleSeconds / 60)}min (${idlePercentage}%)`, |
| 310 | + value: `${Math.round(totalIdleSeconds / 60)}min (${idlePercentage}%)`, |
294 | 311 | short: true |
295 | 312 | }, |
296 | 313 | { |
|
300 | 317 | }, |
301 | 318 | { |
302 | 319 | title: "Session Duration", |
303 | | - value: `${activitySummary.sessionDurationMinutes} min`, |
| 320 | + value: `${sessionDurationMinutes} min`, |
304 | 321 | short: true |
305 | 322 | } |
306 | 323 | ], |
307 | | - footer: activitySummary.suspiciousPatterns && activitySummary.suspiciousPatterns.length > 0 ? |
308 | | - `⚠️ ${activitySummary.suspiciousPatterns.length} notable behaviors detected` : |
| 324 | + footer: suspiciousCount > 0 ? |
| 325 | + `⚠️ ${suspiciousCount} notable behaviors detected` : |
309 | 326 | "✅ Normal activity patterns" |
310 | 327 | }); |
311 | 328 | } |
|
0 commit comments