Skip to content

Commit 71aaf90

Browse files
committed
Merge branch 'pr/50'
2 parents 0e866bf + 2d4b7ad commit 71aaf90

File tree

2 files changed

+186
-139
lines changed

2 files changed

+186
-139
lines changed

containermetrics/cpu_spike_reporter.go

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
99
)
1010

1111
type spikeInfo struct {
12-
start *time.Time
13-
end *time.Time
12+
start time.Time
13+
end time.Time
1414
}
1515

1616
type CPUSpikeReporter struct {
@@ -26,17 +26,14 @@ func NewCPUSpikeReporter(metronClient loggingclient.IngressClient) *CPUSpikeRepo
2626
}
2727

2828
func (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

7370
func 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

7976
func 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

Comments
 (0)