mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-03-20 23:07:29 +01:00
50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
// Copyright (C) NHR@FAU, University Erlangen-Nuremberg.
|
|
// All rights reserved. This file is part of cc-backend.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
package metricdispatch
|
|
|
|
import "math"
|
|
|
|
type ResamplePolicy string
|
|
|
|
const (
|
|
ResamplePolicyLow ResamplePolicy = "low"
|
|
ResamplePolicyMedium ResamplePolicy = "medium"
|
|
ResamplePolicyHigh ResamplePolicy = "high"
|
|
)
|
|
|
|
// TargetPointsForPolicy returns the target number of data points for a given policy.
|
|
func TargetPointsForPolicy(policy ResamplePolicy) int {
|
|
switch policy {
|
|
case ResamplePolicyLow:
|
|
return 200
|
|
case ResamplePolicyMedium:
|
|
return 500
|
|
case ResamplePolicyHigh:
|
|
return 1000
|
|
default:
|
|
return 0
|
|
}
|
|
}
|
|
|
|
// ComputeResolution computes the resampling resolution in seconds for a given
|
|
// job duration, metric frequency, and target point count. Returns 0 if the
|
|
// total number of data points is already at or below targetPoints (no resampling needed).
|
|
func ComputeResolution(duration int64, frequency int64, targetPoints int) int {
|
|
if frequency <= 0 || targetPoints <= 0 || duration <= 0 {
|
|
return 0
|
|
}
|
|
|
|
totalPoints := duration / frequency
|
|
if totalPoints <= int64(targetPoints) {
|
|
return 0
|
|
}
|
|
|
|
targetRes := math.Ceil(float64(duration) / float64(targetPoints))
|
|
// Round up to nearest multiple of frequency
|
|
resolution := int(math.Ceil(targetRes/float64(frequency))) * int(frequency)
|
|
|
|
return resolution
|
|
}
|