mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
billing: cope with spy-interval set longer than publish-interval
This commit is contained in:
@@ -119,15 +119,31 @@ func (e *BillingEmitter) Add(ctx context.Context, rep report.Report, buf []byte)
|
||||
return e.Collector.Add(ctx, rep, buf)
|
||||
}
|
||||
|
||||
func intervalFromCommand(cmd string) string {
|
||||
if strings.Contains(cmd, "scope") &&
|
||||
strings.Contains(cmd, "probe.publish.interval") {
|
||||
cmds := strings.SplitAfter(cmd, "probe.publish.interval")
|
||||
func commandParameter(cmd, flag string) (string, bool) {
|
||||
if strings.Contains(cmd, flag) {
|
||||
cmds := strings.SplitAfter(cmd, flag)
|
||||
aft := strings.Split(cmds[1], " ")
|
||||
if aft[0] == "" {
|
||||
return aft[1]
|
||||
return aft[1], true
|
||||
}
|
||||
return aft[0][1:], true
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
func intervalFromCommand(cmd string) string {
|
||||
if strings.Contains(cmd, "scope") {
|
||||
if publishInterval, ok := commandParameter(cmd, "probe.publish.interval"); ok {
|
||||
// If spy interval is higher than publish interval, some reports will have no process data
|
||||
if spyInterval, ok := commandParameter(cmd, "spy.interval"); ok {
|
||||
pubDuration, err1 := time.ParseDuration(publishInterval)
|
||||
spyDuration, err2 := time.ParseDuration(spyInterval)
|
||||
if err1 == nil && err2 == nil && spyDuration > pubDuration {
|
||||
return spyInterval
|
||||
}
|
||||
}
|
||||
return publishInterval
|
||||
}
|
||||
return aft[0][1:]
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ func Test_intervalFromCommand(t *testing.T) {
|
||||
{cmd: "/home/weave/scope --mode=probe --probe-only --probe.kubernetes=true --probe.spy.interval=3s --probe.publish.interval 5s --probe.processes=false --probe.conntrack=false --probe.ebpf.connections=false --probe.docker.bridge=docker0 --probe.docker=true https://redacted@cloud.weave.works.", want: "5s", name: "space"},
|
||||
{cmd: "/home/weave/scope --mode=probe --no-app --probe.docker=true --probe.kubernetes.role=host --weave=false --probe.publish.interval=4500ms --probe.spy.interval=2s --probe.http.listen=:4041 --probe.conntrack.buffersize=4194304 https://redacted@cloud.weave.works scope.weave.svc.cluster.local:80", want: "4500ms", name: "miliseconds"},
|
||||
{cmd: "/home/weave/scope --mode=probe --no-app --probe.docker=true --probe.kubernetes.role=host --weave=false --probe.spy.interval=2s --probe.http.listen=:4041 --probe.conntrack.buffersize=4194304 https://redacted@cloud.weave.works scope.weave.svc.cluster.local:80", want: "", name: "notset"},
|
||||
{cmd: "/home/weave/scope --mode=probe --probe-only --probe.kubernetes.role=host --probe.publish.interval=4500ms --probe.spy.interval=10s --probe.docker.bridge=docker0 --probe.docker=true --probe.ebpf.connections=false --probe.conntrack=false https://redacted@cloud.weave.works.", want: "10s", name: "higher-spy-interval"},
|
||||
{cmd: "/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --web.listen-address=:8080 --storage.tsdb.retention.time=2h --web.enable-lifecycle", want: "", name: "notscope"},
|
||||
{cmd: "", want: "", name: "blank"},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user