@@ -408,6 +408,150 @@ func TestGenerateStatusForMetrics(t *testing.T) {
408408 }
409409}
410410
411+ func TestGenerateStatusForEvents (t * testing.T ) {
412+ for c , test := range []struct {
413+ name string
414+ rule logtypes.Rule
415+ expected * types.Status
416+ logs []* logtypes.Log
417+ }{
418+ {
419+ name : "without matching group" ,
420+ rule : logtypes.Rule {
421+ Type : types .Temp ,
422+ Reason : "NvidiaGPUXid" ,
423+ Pattern : "NVRM: Xid \\ (PCI:[^)]+\\ ): \\ d+,.*" ,
424+ },
425+ logs : []* logtypes.Log {
426+ {
427+ Timestamp : time .Unix (1000 , 1000 ),
428+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
429+ },
430+ },
431+ expected : & types.Status {
432+ Source : testSource ,
433+ Events : []types.Event {{
434+ Severity : types .Warn ,
435+ Timestamp : time .Unix (1000 , 1000 ),
436+ Reason : "NvidiaGPUXid" ,
437+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
438+ }},
439+ },
440+ },
441+ {
442+ name : "one matching group" ,
443+ rule : logtypes.Rule {
444+ Type : types .Temp ,
445+ Reason : "NvidiaGPUXid%s" ,
446+ Pattern : "NVRM: Xid \\ (PCI:[^)]+\\ ): (\\ d+),.*" ,
447+ },
448+ logs : []* logtypes.Log {
449+ {
450+ Timestamp : time .Unix (1000 , 1000 ),
451+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
452+ },
453+ },
454+ expected : & types.Status {
455+ Source : testSource ,
456+ Events : []types.Event {{
457+ Severity : types .Warn ,
458+ Timestamp : time .Unix (1000 , 1000 ),
459+ Reason : "NvidiaGPUXid45" ,
460+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
461+ }},
462+ },
463+ },
464+ {
465+ name : "two matching groups" ,
466+ rule : logtypes.Rule {
467+ Type : types .Temp ,
468+ Reason : "NvidiaGPUXid%s, Ch%s" ,
469+ Pattern : "NVRM: Xid \\ (PCI:[^)]+\\ ): (\\ d+), Ch (\\ d+).*" ,
470+ },
471+ logs : []* logtypes.Log {
472+ {
473+ Timestamp : time .Unix (1000 , 1000 ),
474+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
475+ },
476+ },
477+ expected : & types.Status {
478+ Source : testSource ,
479+ Events : []types.Event {{
480+ Severity : types .Warn ,
481+ Timestamp : time .Unix (1000 , 1000 ),
482+ Reason : "NvidiaGPUXid45, Ch00000010" ,
483+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
484+ }},
485+ },
486+ },
487+ {
488+ name : "not enough matching groups 1" ,
489+ rule : logtypes.Rule {
490+ Type : types .Temp ,
491+ Reason : "NvidiaGPUXid%s, Ch%s" ,
492+ Pattern : "NVRM: Xid \\ (PCI:[^)]+\\ ): (\\ d+),.*" ,
493+ },
494+ logs : []* logtypes.Log {
495+ {
496+ Timestamp : time .Unix (1000 , 1000 ),
497+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
498+ },
499+ },
500+ expected : nil ,
501+ },
502+ {
503+ name : "not enough matching groups 2" ,
504+ rule : logtypes.Rule {
505+ Type : types .Temp ,
506+ Reason : "NvidiaGPUXid%s" ,
507+ Pattern : "NVRM: Xid \\ (PCI:[^)]+\\ ): \\ d+,.*" ,
508+ },
509+ logs : []* logtypes.Log {
510+ {
511+ Timestamp : time .Unix (1000 , 1000 ),
512+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
513+ },
514+ },
515+ expected : nil ,
516+ },
517+ {
518+ name : "indexed matching groups" ,
519+ rule : logtypes.Rule {
520+ Type : types .Temp ,
521+ Reason : "NvidiaGPUXid%[1]s, Ch%[2]s" ,
522+ Pattern : "NVRM: Xid \\ (PCI:[^)]+\\ ): (\\ d+), Ch (\\ d+).*" ,
523+ },
524+ logs : []* logtypes.Log {
525+ {
526+ Timestamp : time .Unix (1000 , 1000 ),
527+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
528+ },
529+ },
530+ expected : & types.Status {
531+ Source : testSource ,
532+ Events : []types.Event {{
533+ Severity : types .Warn ,
534+ Timestamp : time .Unix (1000 , 1000 ),
535+ Reason : "NvidiaGPUXid45, Ch00000010" ,
536+ Message : "[...] NVRM: Xid (PCI:0000:00:00.0): 45, Ch 00000010" ,
537+ }},
538+ },
539+ },
540+ } {
541+ l := & logMonitor {
542+ config : MonitorConfig {
543+ Source : testSource ,
544+ },
545+ }
546+ (& l .config ).ApplyDefaultConfiguration ()
547+ got := l .generateStatus (test .logs , test .rule )
548+
549+ if ! reflect .DeepEqual (test .expected , got ) {
550+ t .Errorf ("case %d %s: expected status %+v, got %+v" , c + 1 , test .name , test .expected , got )
551+ }
552+ }
553+ }
554+
411555func TestInitializeProblemMetricsOrDie (t * testing.T ) {
412556 testCases := []struct {
413557 name string
0 commit comments