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/24 15:39:26 UTC
[04/10] incubator-trafficcontrol git commit: add support for
deliveryservice TPS and Kbps thresholds
add support for deliveryservice TPS and Kbps thresholds
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/86c11668
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/86c11668
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/86c11668
Branch: refs/heads/master
Commit: 86c1166810ab5c7ceb51c4db9ba5ccc166b3a586
Parents: 7dcc2cf
Author: David Neuman <da...@gmail.com>
Authored: Tue Jan 17 12:18:12 2017 -0700
Committer: Jeff Elsloo <je...@cable.comcast.com>
Committed: Tue Jan 24 08:38:45 2017 -0700
----------------------------------------------------------------------
.../traffic_monitor/deliveryservice/stat.go | 38 ++++++++++++++------
.../traffic_monitor/manager/stathistory.go | 2 +-
2 files changed, 29 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c11668/traffic_monitor/experimental/traffic_monitor/deliveryservice/stat.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/deliveryservice/stat.go b/traffic_monitor/experimental/traffic_monitor/deliveryservice/stat.go
index 3b7f35c..d93fb7e 100644
--- a/traffic_monitor/experimental/traffic_monitor/deliveryservice/stat.go
+++ b/traffic_monitor/experimental/traffic_monitor/deliveryservice/stat.go
@@ -21,6 +21,10 @@ package deliveryservice
import (
"fmt"
+ "net/url"
+ "strconv"
+ "time"
+
"github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/common/log"
"github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/common/util"
"github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/traffic_monitor/cache"
@@ -29,9 +33,7 @@ import (
"github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/traffic_monitor/peer"
"github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/traffic_monitor/srvhttp"
todata "github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/traffic_monitor/trafficopsdata"
- "net/url"
- "strconv"
- "time"
+ to "github.com/apache/incubator-trafficcontrol/traffic_ops/client"
)
// TODO remove 'ds' and 'stat' from names
@@ -73,7 +75,7 @@ func setStaticData(dsStats Stats, dsServers map[enum.DeliveryServiceName][]enum.
return dsStats
}
-func addAvailableData(dsStats Stats, crStates peer.Crstates, serverCachegroups map[enum.CacheName]enum.CacheGroupName, serverDs map[enum.CacheName][]enum.DeliveryServiceName, serverTypes map[enum.CacheName]enum.CacheType, precomputed map[enum.CacheName]cache.PrecomputedData) (Stats, error) {
+func addAvailableData(dsStats Stats, crStates peer.Crstates, serverCachegroups map[enum.CacheName]enum.CacheGroupName, serverDs map[enum.CacheName][]enum.DeliveryServiceName, serverTypes map[enum.CacheName]enum.CacheType, precomputed map[enum.CacheName]cache.PrecomputedData, mc to.TrafficMonitorConfigMap) (Stats, error) {
for cache, available := range crStates.Caches {
cacheGroup, ok := serverCachegroups[cache]
if !ok {
@@ -104,9 +106,7 @@ func addAvailableData(dsStats Stats, crStates peer.Crstates, serverCachegroups m
}
if available.IsAvailable {
- stat.CommonStats.IsAvailable.Value = true
- // TODO fix to be whether the Delivery Service has exceeded max kbps defined in Traffic Ops in `/health/cdn-name`?
- stat.CommonStats.IsHealthy.Value = true
+ setDsState(deliveryService, &stat, mc)
stat.CommonStats.CachesAvailableNum.Value++
cacheGroupStats := stat.CacheGroups[cacheGroup]
cacheGroupStats.IsAvailable.Value = true
@@ -377,7 +377,8 @@ func addPerSecStats(precomputed map[enum.CacheName]cache.PrecomputedData, dsStat
}
// CreateStats aggregates and creates statistics from given precomputed stat history. It returns the created stats, information about these stats necessary for the next calculation, and any error.
-func CreateStats(precomputed map[enum.CacheName]cache.PrecomputedData, toData todata.TOData, crStates peer.Crstates, lastStats LastStats, now time.Time) (Stats, LastStats, error) {
+func CreateStats(precomputed map[enum.CacheName]cache.PrecomputedData, toData todata.TOData, crStates peer.Crstates, lastStats LastStats, now time.Time, mc to.TrafficMonitorConfigMap) (Stats, LastStats, error) {
+
start := time.Now()
dsStats := NewStats()
for deliveryService := range toData.DeliveryServiceServers {
@@ -389,7 +390,7 @@ func CreateStats(precomputed map[enum.CacheName]cache.PrecomputedData, toData to
}
dsStats = setStaticData(dsStats, toData.DeliveryServiceServers)
var err error
- dsStats, err = addAvailableData(dsStats, crStates, toData.ServerCachegroups, toData.ServerDeliveryServices, toData.ServerTypes, precomputed) // TODO move after stat summarisation
+ dsStats, err = addAvailableData(dsStats, crStates, toData.ServerCachegroups, toData.ServerDeliveryServices, toData.ServerTypes, precomputed, mc) // TODO move after stat summarisation
if err != nil {
return dsStats, lastStats, fmt.Errorf("Error getting Cache availability data: %v", err)
}
@@ -471,7 +472,7 @@ func addCommonData(s *dsdata.StatsOld, c *dsdata.StatCommon, deliveryService enu
}
add("caches-configured", strconv.Itoa(int(c.CachesConfiguredNum.Value)))
add("caches-reporting", strconv.Itoa(len(c.CachesReporting)))
- add("error-string", strconv.Itoa(len(c.CachesReporting)))
+ add("error-string", c.ErrorStr.Value)
add("status", c.StatusStr.Value)
add("isHealthy", fmt.Sprintf("%t", c.IsHealthy.Value))
add("isAvailable", fmt.Sprintf("%t", c.IsAvailable.Value))
@@ -504,3 +505,20 @@ func (s Stats) JSON(filter dsdata.Filter, params url.Values) dsdata.StatsOld {
}
return *jsonObj
}
+
+func setDsState(dsName enum.DeliveryServiceName, dsStats *dsdata.Stat, monitorConfig to.TrafficMonitorConfigMap) {
+ dsNameString := fmt.Sprintf("%s", dsName)
+ dsStats.CommonStats.IsAvailable.Value = true
+ dsStats.CommonStats.IsHealthy.Value = true
+
+ if dsStats.Total().TpsTotal.Value > monitorConfig.DeliveryService[dsNameString].TotalTPSThreshold {
+ dsStats.CommonStats.ErrorStr.Value = fmt.Sprintf("TPSTotal too high (%v > %v)", dsStats.Total().TpsTotal.Value, monitorConfig.DeliveryService[dsNameString].TotalTPSThreshold)
+ dsStats.CommonStats.IsAvailable.Value = false
+ dsStats.CommonStats.IsHealthy.Value = false
+ }
+ if dsStats.Total().Kbps.Value > float64(monitorConfig.DeliveryService[dsNameString].TotalKbpsThreshold) {
+ dsStats.CommonStats.ErrorStr.Value = fmt.Sprintf("TotalKbps too high (%v > %v)", dsStats.Total().Kbps.Value, monitorConfig.DeliveryService[dsNameString].TotalTPSThreshold)
+ dsStats.CommonStats.IsAvailable.Value = false
+ dsStats.CommonStats.IsHealthy.Value = false
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c11668/traffic_monitor/experimental/traffic_monitor/manager/stathistory.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/manager/stathistory.go b/traffic_monitor/experimental/traffic_monitor/manager/stathistory.go
index 2a15dd1..d28713d 100644
--- a/traffic_monitor/experimental/traffic_monitor/manager/stathistory.go
+++ b/traffic_monitor/experimental/traffic_monitor/manager/stathistory.go
@@ -179,7 +179,7 @@ func processStatResults(
log.Debugf("poll %v %v CreateStats start\n", result.PollID, time.Now())
}
- newDsStats, newLastStats, err := ds.CreateStats(precomputedData, toData, combinedStates, lastStats.Get().Copy(), time.Now())
+ newDsStats, newLastStats, err := ds.CreateStats(precomputedData, toData, combinedStates, lastStats.Get().Copy(), time.Now(), mc)
for _, result := range results {
log.Debugf("poll %v %v CreateStats end\n", result.PollID, time.Now())