@@ -411,70 +411,75 @@ func (c *CataBalancer) MistUtilLoadSource(ctx context.Context, streamID, lat, lo
411
411
return "" , fmt .Errorf ("catabalancer no node found for ingest stream: %s stale: false" , streamID )
412
412
}
413
413
414
- var updateNodeStatsEvery = 5 * time .Second
414
+ var StatsUpdateInterval = 5 * time .Second
415
+ var StatsUpdateTimeout = StatsUpdateInterval - 500 * time .Millisecond // have the timeout sit within the update interval so we don't miss sending updates
415
416
416
417
func isStale (timestamp time.Time , stale time.Duration ) bool {
417
418
return time .Since (timestamp ) >= stale
418
419
}
419
420
420
421
func StartMetricSending (nodeName string , latitude float64 , longitude float64 , mist clients.MistAPIClient , nodeStatsDB * sql.DB ) {
421
- ticker := time .NewTicker (updateNodeStatsEvery )
422
+ ticker := time .NewTicker (StatsUpdateInterval )
422
423
go func () {
423
424
for range ticker .C {
424
- start := time .Now ()
425
- sysusage , err := GetSystemUsage ()
426
- if err != nil {
427
- log .LogNoRequestID ("catabalancer failed to get sys usage" , "err" , err )
428
- continue
429
- }
425
+ sendMetrics (nodeName , latitude , longitude , mist , nodeStatsDB )
426
+ }
427
+ }()
428
+ }
430
429
431
- event := NodeUpdateEvent {
432
- Resource : "nodeUpdate" ,
433
- NodeID : nodeName ,
434
- NodeMetrics : NodeMetrics {
435
- CPUUsagePercentage : sysusage .CPUUsagePercentage ,
436
- RAMUsagePercentage : sysusage .RAMUsagePercentage ,
437
- BandwidthUsagePercentage : sysusage .BWUsagePercentage ,
438
- LoadAvg : sysusage .LoadAvg .Load5Min ,
439
- GeoLatitude : latitude ,
440
- GeoLongitude : longitude ,
441
- Timestamp : time .Now (),
442
- },
443
- }
430
+ func sendMetrics (nodeName string , latitude float64 , longitude float64 , mist clients.MistAPIClient , nodeStatsDB * sql.DB ) {
431
+ start := time .Now ()
432
+ sysusage , err := GetSystemUsage ()
433
+ if err != nil {
434
+ log .LogNoRequestID ("catabalancer failed to get sys usage" , "err" , err )
435
+ return
436
+ }
444
437
445
- if mist != nil {
446
- mistState , err := mist .GetState ()
447
- if err != nil {
448
- log .LogNoRequestID ("catabalancer failed to get mist state" , "err" , err )
449
- continue
450
- }
451
-
452
- var nonIngestStreams , ingestStreams []string
453
- for streamID := range mistState .ActiveStreams {
454
- if mistState .IsIngestStream (streamID ) {
455
- ingestStreams = append (ingestStreams , streamID )
456
- } else {
457
- nonIngestStreams = append (nonIngestStreams , streamID )
458
- }
459
- }
460
- event .SetStreams (nonIngestStreams , ingestStreams )
461
- }
438
+ event := NodeUpdateEvent {
439
+ Resource : "nodeUpdate" ,
440
+ NodeID : nodeName ,
441
+ NodeMetrics : NodeMetrics {
442
+ CPUUsagePercentage : sysusage .CPUUsagePercentage ,
443
+ RAMUsagePercentage : sysusage .RAMUsagePercentage ,
444
+ BandwidthUsagePercentage : sysusage .BWUsagePercentage ,
445
+ LoadAvg : sysusage .LoadAvg .Load5Min ,
446
+ GeoLatitude : latitude ,
447
+ GeoLongitude : longitude ,
448
+ Timestamp : time .Now (),
449
+ },
450
+ }
462
451
463
- payload , err := json . Marshal ( event )
464
- if err != nil {
465
- log . LogNoRequestID ( "catabalancer failed to marhsal node update" , "err" , err )
466
- continue
467
- }
468
- sendMetrics ( nodeStatsDB , nodeName , payload )
452
+ if mist != nil {
453
+ mistState , err := mist . GetState ()
454
+ if err != nil {
455
+ log . LogNoRequestID ( "catabalancer failed to get mist state" , "err" , err )
456
+ return
457
+ }
469
458
470
- metrics .Metrics .CatabalancerSendMetricDurationSec .Observe (time .Since (start ).Seconds ())
459
+ var nonIngestStreams , ingestStreams []string
460
+ for streamID := range mistState .ActiveStreams {
461
+ if mistState .IsIngestStream (streamID ) {
462
+ ingestStreams = append (ingestStreams , streamID )
463
+ } else {
464
+ nonIngestStreams = append (nonIngestStreams , streamID )
465
+ }
471
466
}
472
- }()
467
+ event .SetStreams (nonIngestStreams , ingestStreams )
468
+ }
469
+
470
+ payload , err := json .Marshal (event )
471
+ if err != nil {
472
+ log .LogNoRequestID ("catabalancer failed to marhsal node update" , "err" , err )
473
+ return
474
+ }
475
+ sendMetricsToDB (nodeStatsDB , nodeName , payload )
476
+
477
+ metrics .Metrics .CatabalancerSendMetricDurationSec .Observe (time .Since (start ).Seconds ())
473
478
}
474
479
475
- func sendMetrics (nodeStatsDB * sql.DB , nodeName string , payload []byte ) {
480
+ func sendMetricsToDB (nodeStatsDB * sql.DB , nodeName string , payload []byte ) {
476
481
start := time .Now ()
477
- queryContext , cancel := context .WithTimeout (context .Background (), updateNodeStatsEvery )
482
+ queryContext , cancel := context .WithTimeout (context .Background (), StatsUpdateTimeout )
478
483
defer cancel ()
479
484
insertStatement := `insert into "node_stats"(
480
485
"node_id",
0 commit comments