You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by el...@apache.org on 2017/01/09 21:13:06 UTC
[2/4] incubator-trafficcontrol git commit: Fix TM2 for nonexistent
health params
Fix TM2 for nonexistent health params
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/f8464599
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/f8464599
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/f8464599
Branch: refs/heads/master
Commit: f8464599a3558d0d3308572d8a5c32fc3a0ee3c9
Parents: ae293c8
Author: Robert Butts <ro...@gmail.com>
Authored: Mon Jan 9 11:27:01 2017 -0700
Committer: Jeff Elsloo <je...@cable.comcast.com>
Committed: Mon Jan 9 14:11:58 2017 -0700
----------------------------------------------------------------------
.../traffic_monitor/health/cache_health.go | 36 +++++++++++---------
1 file changed, 19 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/f8464599/traffic_monitor/experimental/traffic_monitor/health/cache_health.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/health/cache_health.go b/traffic_monitor/experimental/traffic_monitor/health/cache_health.go
index 5dfa0c2..b57d143 100644
--- a/traffic_monitor/experimental/traffic_monitor/health/cache_health.go
+++ b/traffic_monitor/experimental/traffic_monitor/health/cache_health.go
@@ -8,9 +8,9 @@ package health
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -19,10 +19,8 @@ package health
* under the License.
*/
-
import (
"fmt"
- "math"
"strconv"
"strings"
"time"
@@ -98,25 +96,26 @@ func GetVitals(newResult *cache.Result, prevResult *cache.Result, mc *traffic_op
// getKbpsThreshold returns the numeric kbps threshold, from the Traffic Ops string value. If there is a parse error, it logs a warning and returns the max floating point number, signifying no limit
// TODO add float64 to Traffic Ops Client interface
-func getKbpsThreshold(threshStr string) int64 {
+func getKbpsThreshold(threshStr string) (int64, bool) {
if len(threshStr) == 0 {
- log.Errorf("Empty Traffic Ops HealthThresholdAvailableBandwidthInKbps; setting no limit.\n")
- return math.MaxInt64
+ return 0, false
}
if threshStr[0] == '>' {
threshStr = threshStr[1:]
}
thresh, err := strconv.ParseInt(threshStr, 10, 64)
if err != nil {
- log.Errorf("Failed to parse Traffic Ops HealthThresholdAvailableBandwidthInKbps, setting no limit: '%v'\n", err)
- return math.MaxInt64
+ return 0, false
}
- return thresh
+ return thresh, true
}
// TODO add time.Duration to Traffic Ops Client interface
-func getQueryThreshold(threshInt int64) time.Duration {
- return time.Duration(threshInt) * time.Millisecond
+func getQueryThreshold(threshInt int64) (time.Duration, bool) {
+ if threshInt == 0 {
+ return 0, false
+ }
+ return time.Duration(threshInt) * time.Millisecond, true
}
func cacheCapacityKbps(result cache.Result) int64 {
@@ -132,6 +131,9 @@ func EvalCache(result cache.Result, mc *traffic_ops.TrafficMonitorConfigMap) (bo
log.Errorf("Cache %v got invalid status from Traffic Ops '%v' - treating as Reported\n", result.ID, toServer.Status)
}
params := mc.Profile[toServer.Profile].Parameters
+ kbpsThreshold, hasKbpsThreshold := getKbpsThreshold(params.HealthThresholdAvailableBandwidthInKbps)
+ queryTimeThreshold, hasQueryTimeThreshold := getQueryThreshold(int64(params.HealthThresholdQueryTime))
+
switch {
case status == enum.CacheStatusAdminDown:
return false, "set to " + status.String()
@@ -142,12 +144,12 @@ func EvalCache(result cache.Result, mc *traffic_ops.TrafficMonitorConfigMap) (bo
return true, "set to " + status.String()
case result.Error != nil:
return false, fmt.Sprintf("error: %v", result.Error)
- case result.Vitals.LoadAvg > params.HealthThresholdLoadAvg:
+ case result.Vitals.LoadAvg > params.HealthThresholdLoadAvg && params.HealthThresholdLoadAvg != 0:
return false, fmt.Sprintf("load average %f exceeds threshold %f", result.Vitals.LoadAvg, params.HealthThresholdLoadAvg)
- case result.Vitals.KbpsOut > cacheCapacityKbps(result)-getKbpsThreshold(params.HealthThresholdAvailableBandwidthInKbps):
- return false, fmt.Sprintf("%dkbps exceeds max %dkbps", result.Vitals.KbpsOut, getKbpsThreshold(params.HealthThresholdAvailableBandwidthInKbps))
- case result.RequestTime > getQueryThreshold(int64(params.HealthThresholdQueryTime)):
- return false, fmt.Sprintf("request time %v exceeds max %v", result.RequestTime, getQueryThreshold(int64(params.HealthThresholdQueryTime)))
+ case hasKbpsThreshold && result.Vitals.KbpsOut > cacheCapacityKbps(result)-kbpsThreshold:
+ return false, fmt.Sprintf("%dkbps exceeds max %dkbps", result.Vitals.KbpsOut, kbpsThreshold)
+ case hasQueryTimeThreshold && result.RequestTime > queryTimeThreshold:
+ return false, fmt.Sprintf("request time %v exceeds max %v", result.RequestTime, queryTimeThreshold)
default:
return result.Available, "reported"
}