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