99)
1010
1111type spikeInfo struct {
12- start * time.Time
13- end * time.Time
12+ start time.Time
13+ end time.Time
1414}
1515
1616type CPUSpikeReporter struct {
@@ -26,17 +26,14 @@ func NewCPUSpikeReporter(metronClient loggingclient.IngressClient) *CPUSpikeRepo
2626}
2727
2828func (reporter * CPUSpikeReporter ) Report (logger lager.Logger , containers []executor.Container , metrics map [string ]executor.Metrics , timeStamp time.Time ) error {
29- spikeInfos := map [string ]* spikeInfo {}
30-
3129 for _ , container := range containers {
3230 guid := container .Guid
3331 metric , ok := metrics [guid ]
3432 if ! ok {
3533 continue
3634 }
37- spikeInfos [guid ] = reporter .spikeInfos [guid ]
3835
39- previousSpikeInfo := spikeInfos [guid ]
36+ previousSpikeInfo := reporter . spikeInfos [guid ]
4037 currentSpikeInfo := & spikeInfo {}
4138
4239 if previousSpikeInfo != nil {
@@ -45,39 +42,39 @@ func (reporter *CPUSpikeReporter) Report(logger lager.Logger, containers []execu
4542 }
4643
4744 if spikeStarted (metric , previousSpikeInfo ) {
48- currentSpikeInfo .start = & timeStamp
49- spikeInfos [guid ] = currentSpikeInfo
50- continue
45+ currentSpikeInfo .start = timeStamp
46+ currentSpikeInfo .end = time.Time {}
5147 }
5248
5349 if spikeEnded (metric , previousSpikeInfo ) {
54- currentSpikeInfo .end = & timeStamp
50+ currentSpikeInfo .end = timeStamp
51+ }
5552
53+ reporter .spikeInfos [guid ] = currentSpikeInfo
54+
55+ if ! currentSpikeInfo .start .IsZero () {
5656 err := reporter .metronClient .SendSpikeMetrics (loggingclient.SpikeMetric {
57- Start : * currentSpikeInfo .start ,
58- End : * currentSpikeInfo .end ,
57+ Start : currentSpikeInfo .start ,
58+ End : currentSpikeInfo .end ,
5959 Tags : metric .MetricsConfig .Tags ,
6060 })
6161 if err != nil {
6262 return err
6363 }
64-
65- delete (spikeInfos , guid )
6664 }
6765 }
6866
69- reporter .spikeInfos = spikeInfos
7067 return nil
7168}
7269
7370func spikeStarted (metric executor.Metrics , previousSpikeInfo * spikeInfo ) bool {
7471 currentlySpiking := uint64 (metric .TimeSpentInCPU .Nanoseconds ()) > metric .AbsoluteCPUEntitlementInNanoseconds
75- previouslySpiking := previousSpikeInfo != nil && previousSpikeInfo .start != nil
72+ previouslySpiking := previousSpikeInfo != nil && ! previousSpikeInfo .start . IsZero () && previousSpikeInfo . end . IsZero ()
7673 return currentlySpiking && ! previouslySpiking
7774}
7875
7976func spikeEnded (metric executor.Metrics , previousSpikeInfo * spikeInfo ) bool {
8077 currentlySpiking := uint64 (metric .TimeSpentInCPU .Nanoseconds ()) > metric .AbsoluteCPUEntitlementInNanoseconds
81- previouslySpiking := previousSpikeInfo != nil && previousSpikeInfo .start != nil
78+ previouslySpiking := previousSpikeInfo != nil && ! previousSpikeInfo .start . IsZero () && previousSpikeInfo . end . IsZero ()
8279 return ! currentlySpiking && previouslySpiking
8380}
0 commit comments