Fix TM2 nil err panic, add cacheless DS event

Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/41a5fe17
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/41a5fe17
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/41a5fe17

Branch: refs/heads/master
Commit: 41a5fe176172ed841f81891610e12eb3f761cd60
Parents: f39116a
Author: Robert Butts <robert.o.bu...@gmail.com>
Authored: Fri Feb 3 16:19:06 2017 -0700
Committer: Dave Neuman <neu...@apache.org>
Committed: Mon Feb 6 13:36:42 2017 -0700

----------------------------------------------------------------------
 .../traffic_monitor/deliveryservice/stat.go     | 29 ++++++++++++++++++--
 1 file changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/41a5fe17/traffic_monitor_golang/traffic_monitor/deliveryservice/stat.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/deliveryservice/stat.go 
b/traffic_monitor_golang/traffic_monitor/deliveryservice/stat.go
index 49f0b0c..87ea57f 100644
--- a/traffic_monitor_golang/traffic_monitor/deliveryservice/stat.go
+++ b/traffic_monitor_golang/traffic_monitor/deliveryservice/stat.go
@@ -44,7 +44,7 @@ func setStaticData(dsStats dsdata.Stats, dsServers 
map[enum.DeliveryServiceName]
        return dsStats
 }
 
-func addAvailableData(dsStats dsdata.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) (dsdata.Stats, error) {
+func addAvailableData(dsStats dsdata.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, lastStats dsdata.LastStats, events 
health.ThreadsafeEvents) (dsdata.Stats, error) {
        for cache, available := range crStates.Caches {
                cacheGroup, ok := serverCachegroups[cache]
                if !ok {
@@ -102,6 +102,29 @@ func addAvailableData(dsStats dsdata.Stats, crStates 
peer.Crstates, serverCacheg
                }
        }
 
+       for dsName, stat := range dsStats.DeliveryService {
+               lastStat, lastStatExists := lastStats.DeliveryServices[dsName]
+               if !lastStatExists {
+                       continue
+               }
+
+               getEvent := func(desc string) health.Event {
+                       return health.Event{
+                               Time:        health.Time(time.Now()),
+                               Description: desc,
+                               Name:        dsName.String(),
+                               Hostname:    dsName.String(),
+                               Type:        "Delivery Service",
+                               Available:   stat.CommonStats.IsAvailable.Value,
+                       }
+               }
+               if stat.CommonStats.IsAvailable.Value == false && 
lastStat.Available == true {
+                       events.Add(getEvent("no available caches"))
+               } else if stat.CommonStats.IsAvailable.Value == true && 
lastStat.Available == false {
+                       events.Add(getEvent("available caches"))
+               }
+       }
+
        // TODO move to its own func?
        for dsName, ds := range crStates.Deliveryservice {
                stat, ok := dsStats.DeliveryService[dsName]
@@ -259,7 +282,7 @@ func addDSPerSecStats(dsName enum.DeliveryServiceName, stat 
dsdata.Stat, lastSta
                        Available:   stat.CommonStats.IsAvailable.Value,
                }
        }
-       if stat.CommonStats.IsAvailable.Value == false && lastStat.Available == 
true {
+       if stat.CommonStats.IsAvailable.Value == false && lastStat.Available == 
true && dsErr != nil {
                events.Add(getEvent(dsErr.Error()))
        } else if stat.CommonStats.IsAvailable.Value == true && 
lastStat.Available == false {
                events.Add(getEvent("REPORTED - available"))
@@ -328,7 +351,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, lastStats, events) // TODO move after stat summarisation
        if err != nil {
                return dsStats, lastStats, fmt.Errorf("Error getting Cache 
availability data: %v", err)
        }

Reply via email to