Skip to content

Commit a00fe5d

Browse files
committed
refactor: Update log processing configuration values for improved performance and functionality
1 parent a7b22a7 commit a00fe5d

File tree

3 files changed

+33
-45
lines changed

3 files changed

+33
-45
lines changed

examples/example-deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ spec:
1919
# Enable Slaking for this deployment
2020
slaking.enabled: "true"
2121
# Send logs to #alerts channel
22-
slaking.channel: "#product-analytics-alerts-dev"
22+
slaking.channel: "#test-alerts"
2323
# Filter for error, exception, or fatal logs
2424
slaking.filters: ""
2525
# Only send logs with error level or higher

src/services/configManager.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ class ConfigManager {
6969
namespaces: [], // empty means all namespaces
7070
watchAllNamespaces: true, // new option to explicitly enable watching all namespaces
7171
watchInterval: 30000, // ms
72-
logBufferSize: 100,
73-
maxLogLines: 10,
74-
defaultCooldown: 60 // seconds
72+
logBufferSize: 200,
73+
maxLogLines: 25,
74+
defaultCooldown: 300 // seconds
7575
},
7676
logging: {
7777
level: process.env.LOG_LEVEL || 'info',
@@ -85,12 +85,15 @@ class ConfigManager {
8585
prometheusEnabled: true
8686
},
8787
filters: {
88-
defaultLevel: 'info',
88+
defaultLevel: 'warn',
8989
defaultPattern: '.*',
9090
excludePatterns: [
9191
'health check',
9292
'heartbeat',
93-
'ping'
93+
'ping',
94+
'Failed',
95+
'Connection timed out',
96+
'Temporary network error'
9497
]
9598
},
9699
annotations: {

src/services/logProcessor.js

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ class LogProcessor {
2727
this.logPatterns = new Map(); // Track repeated log patterns
2828
this.consolidationTimers = new Map(); // Timers for sending consolidation summaries
2929
this.consolidationConfig = {
30-
minRepeatCount: 3, // Minimum repeats before consolidating
31-
consolidationDelay: 30000, // 30 seconds delay before sending summary
32-
summaryTimeout: 300000, // 5 minutes timeout for "stopped" message
30+
minRepeatCount: 10, // Minimum repeats before consolidating
31+
consolidationDelay: 120000, // 2 minutes delay before sending summary
32+
summaryTimeout: 900000, // 15 minutes timeout for "stopped" message
3333
enableStoppedMessages: true // Whether to send "stopped" messages
3434
};
3535
}
@@ -468,43 +468,34 @@ class LogProcessor {
468468
trackLogPattern(streamKey, line, config, slackService) {
469469
const pattern = this.extractLogPattern(line);
470470
const patternKey = this.getPatternKey(streamKey, pattern);
471-
472-
if (!this.logPatterns.has(patternKey)) {
473-
this.logPatterns.set(patternKey, {
471+
let patternData = this.logPatterns.get(patternKey);
472+
if (!patternData) {
473+
patternData = {
474474
pattern,
475-
streamKey,
476-
config,
477-
slackService,
478475
count: 0,
479-
firstSeen: Date.now(),
480-
lastSeen: Date.now(),
481476
isConsolidated: false,
477+
isSuppressed: false, // NEW: suppress after first summary until resolved
478+
lastSeen: Date.now(),
479+
config,
480+
slackService,
482481
consolidationTimer: null,
483482
stoppedTimer: null
484-
});
483+
};
484+
this.logPatterns.set(patternKey, patternData);
485485
}
486-
487-
const patternData = this.logPatterns.get(patternKey);
488-
patternData.count++;
489486
patternData.lastSeen = Date.now();
490-
491-
// Clear any existing stopped timer since we're seeing the pattern again
492-
if (patternData.stoppedTimer) {
493-
clearTimeout(patternData.stoppedTimer);
494-
patternData.stoppedTimer = null;
495-
}
496-
497-
// Start consolidation if we haven't already and we meet the threshold
498-
if (!patternData.isConsolidated && patternData.count >= this.consolidationConfig.minRepeatCount) {
499-
this.startConsolidation(patternKey, patternData);
487+
if (!patternData.isSuppressed) {
488+
patternData.count++;
489+
if (!patternData.isConsolidated && patternData.count >= this.consolidationConfig.minRepeatCount) {
490+
this.startConsolidation(patternKey, patternData);
491+
patternData.isConsolidated = true;
492+
patternData.isSuppressed = true; // Suppress further reporting until resolved
493+
}
500494
}
501-
502495
return patternData;
503496
}
504497

505498
startConsolidation(patternKey, patternData) {
506-
patternData.isConsolidated = true;
507-
508499
// Clear any existing timer
509500
if (patternData.consolidationTimer) {
510501
clearTimeout(patternData.consolidationTimer);
@@ -519,27 +510,24 @@ class LogProcessor {
519510
async sendConsolidationSummary(patternKey, patternData) {
520511
try {
521512
const message = this.formatConsolidationMessage(patternData);
522-
523513
await patternData.slackService.sendMessage(
524514
patternData.config.channel,
525515
message,
526516
patternData.config
527517
);
528-
529518
this.logger.debug(`Sent consolidation summary for pattern: ${patternData.pattern}`);
530-
531-
// Reset count and start tracking for next consolidation
519+
// Reset count but keep suppressed until resolved
532520
patternData.count = 0;
533521
patternData.isConsolidated = false;
522+
// patternData.isSuppressed remains true until stopped message
534523
patternData.consolidationTimer = null;
535-
536524
} catch (error) {
537525
this.logger.error(`Failed to send consolidation summary for ${patternKey}`, error);
538526
}
539527
}
540528

541529
formatConsolidationMessage(patternData) {
542-
const duration = Math.round((Date.now() - patternData.firstSeen) / 1000);
530+
const duration = Math.round((Date.now() - patternData.lastSeen) / 1000);
543531
const level = this.extractLogLevel(patternData.pattern);
544532
const baseInfo = `${patternData.config.podName} (${patternData.config.namespace})`;
545533

@@ -591,18 +579,15 @@ class LogProcessor {
591579
async sendStoppedMessage(patternKey, patternData) {
592580
try {
593581
const message = this.formatStoppedMessage(patternData);
594-
595582
await patternData.slackService.sendMessage(
596583
patternData.config.channel,
597584
message,
598585
patternData.config
599586
);
600-
601587
this.logger.debug(`Sent stopped message for pattern: ${patternData.pattern}`);
602-
603-
// Remove the pattern from tracking
588+
// Remove the pattern from tracking and allow it to be reported again
604589
this.logPatterns.delete(patternKey);
605-
590+
// (If you want to keep the object for stats, you could instead reset isSuppressed)
606591
} catch (error) {
607592
this.logger.error(`Failed to send stopped message for ${patternKey}`, error);
608593
}

0 commit comments

Comments
 (0)