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())

Reply via email to