@@ -408,6 +408,150 @@ func TestGenerateStatusForMetrics(t *testing.T) {
408
408
}
409
409
}
410
410
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
+
411
555
func TestInitializeProblemMetricsOrDie (t * testing.T ) {
412
556
testCases := []struct {
413
557
name string
0 commit comments