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 <david.neuma...@gmail.com> Authored: Tue Jan 17 12:18:12 2017 -0700 Committer: Jeff Elsloo <jeffrey_els...@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())