You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ne...@apache.org on 2017/01/25 17:30:19 UTC
[08/20] incubator-trafficcontrol git commit: Add TM2 availability
poller to /api/cache-statuses
Add TM2 availability poller to /api/cache-statuses
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/34863edd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/34863edd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/34863edd
Branch: refs/heads/master
Commit: 34863edd4108b96dae4d1fd26d16d19fd033ca1b
Parents: 40d5bcb
Author: Robert Butts <ro...@gmail.com>
Authored: Fri Jan 20 16:00:54 2017 -0700
Committer: Dave Neuman <ne...@apache.org>
Committed: Wed Jan 25 10:29:46 2017 -0700
----------------------------------------------------------------------
.../experimental/traffic_monitor/cache/cache.go | 12 ++++++++++++
.../experimental/traffic_monitor/cache/data.go | 2 ++
.../traffic_monitor/manager/datarequest.go | 10 +++++++---
.../traffic_monitor/manager/healthresult.go | 13 -------------
.../traffic_monitor/manager/stathistory.go | 8 ++++----
5 files changed, 25 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/34863edd/traffic_monitor/experimental/traffic_monitor/cache/cache.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/cache/cache.go b/traffic_monitor/experimental/traffic_monitor/cache/cache.go
index 541edaa..95aab84 100644
--- a/traffic_monitor/experimental/traffic_monitor/cache/cache.go
+++ b/traffic_monitor/experimental/traffic_monitor/cache/cache.go
@@ -87,6 +87,18 @@ type Result struct {
Available bool
}
+// HasStat returns whether the given stat is in the Result.
+func (result *Result) HasStat(stat string) bool {
+ computedStats := ComputedStats()
+ if _, ok := computedStats[stat]; ok {
+ return true // health poll has all computed stats
+ }
+ if _, ok := result.Astats.Ats[stat]; ok {
+ return true
+ }
+ return false
+}
+
// Vitals is the vitals data returned from a cache.
type Vitals struct {
LoadAvg float64
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/34863edd/traffic_monitor/experimental/traffic_monitor/cache/data.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/cache/data.go b/traffic_monitor/experimental/traffic_monitor/cache/data.go
index ee21907..bad75a0 100644
--- a/traffic_monitor/experimental/traffic_monitor/cache/data.go
+++ b/traffic_monitor/experimental/traffic_monitor/cache/data.go
@@ -38,6 +38,8 @@ type AvailableStatus struct {
Why string
// UnavailableStat is the stat whose threshold made the cache unavailable. If this is the empty string, the cache is unavailable for a non-threshold reason. This exists so a poller (health, stat) won't mark an unavailable cache as available if the stat whose threshold was reached isn't available on that poller.
UnavailableStat string
+ // Poller is the name of the poller which set this available status
+ Poller string
}
// CacheAvailableStatuses is the available status of each cache.
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/34863edd/traffic_monitor/experimental/traffic_monitor/manager/datarequest.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/manager/datarequest.go b/traffic_monitor/experimental/traffic_monitor/manager/datarequest.go
index 2f42d74..2dffb41 100644
--- a/traffic_monitor/experimental/traffic_monitor/manager/datarequest.go
+++ b/traffic_monitor/experimental/traffic_monitor/manager/datarequest.go
@@ -63,9 +63,10 @@ type APIPeerStates struct {
// CacheStatus contains summary stat data about the given cache.
// TODO make fields nullable, so error fields can be omitted, letting API callers still get updates for unerrored fields
type CacheStatus struct {
- Type *string `json:"type,omitempty"`
- Status *string `json:"status,omitempty"`
- LoadAverage *float64 `json:"load_average,omitempty"`
+ Type *string `json:"type,omitempty"`
+ Status *string `json:"status,omitempty"`
+ StatusPoller *string `json:"status_poller,omitempty"`
+ LoadAverage *float64 `json:"load_average,omitempty"`
// QueryTimeMilliseconds is the time it took this app to perform a complete query and process the data, end-to-end, for the latest health query.
QueryTimeMilliseconds *int64 `json:"query_time_ms,omitempty"`
// HealthTimeMilliseconds is the time it took to make the HTTP request and get back the full response, for the latest health query.
@@ -971,6 +972,7 @@ func createCacheStatuses(
}
var status *string
+ var statusPoller *string
statusVal, ok := localCacheStatus[cacheName]
if !ok {
log.Warnf("cache not in statuses %s\n", cacheName)
@@ -987,6 +989,7 @@ func createCacheStatuses(
}
status = &statusString
+ statusPoller = &statusVal.Poller
}
cacheTypeStr := string(cacheType)
@@ -1002,6 +1005,7 @@ func createCacheStatuses(
BandwidthCapacityKbps: maxKbps,
ConnectionCount: connections,
Status: status,
+ StatusPoller: statusPoller,
}
}
return statii
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/34863edd/traffic_monitor/experimental/traffic_monitor/manager/healthresult.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/manager/healthresult.go b/traffic_monitor/experimental/traffic_monitor/manager/healthresult.go
index 110f083..63248e8 100644
--- a/traffic_monitor/experimental/traffic_monitor/manager/healthresult.go
+++ b/traffic_monitor/experimental/traffic_monitor/manager/healthresult.go
@@ -245,19 +245,6 @@ func processHealthResult(
lastHealthDurationsThreadsafe.Set(lastHealthDurations)
}
-// resultHasStat returns whether the given stat is in the Result.
-// TODO move to cache?
-func resultHasStat(stat string, result cache.Result) bool {
- computedStats := cache.ComputedStats()
- if _, ok := computedStats[stat]; ok {
- return true // health poll has all computed stats
- }
- if _, ok := result.Astats.Ats[stat]; ok {
- return true
- }
- return false
-}
-
// calculateDeliveryServiceState calculates the state of delivery services from the new cache state data `cacheState` and the CRConfig data `deliveryServiceServers` and puts the calculated state in the outparam `deliveryServiceStates`
func CalculateDeliveryServiceState(deliveryServiceServers map[enum.DeliveryServiceName][]enum.CacheName, states peer.CRStatesThreadsafe) {
deliveryServices := states.GetDeliveryServices()
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/34863edd/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 b44f357..c63584e 100644
--- a/traffic_monitor/experimental/traffic_monitor/manager/stathistory.go
+++ b/traffic_monitor/experimental/traffic_monitor/manager/stathistory.go
@@ -238,11 +238,10 @@ func calcAvailability(results []cache.Result, pollerName string, statResultHisto
}
isAvailable, whyAvailable, unavailableStat := health.EvalCache(cache.ToInfo(result), statResults, &mc)
- whyAvailable += " (" + pollerName + ")" // TODO move to field in AvailableStatus
// if the cache is now Available, and was previously unavailable due to a threshold, make sure this poller contains the stat which exceeded the threshold.
if previousStatus, hasPreviousStatus := localCacheStatuses[result.ID]; isAvailable && hasPreviousStatus && !previousStatus.Available && previousStatus.UnavailableStat != "" {
- if !resultHasStat(previousStatus.UnavailableStat, result) {
+ if !result.HasStat(previousStatus.UnavailableStat) {
return
}
}
@@ -251,11 +250,12 @@ func calcAvailability(results []cache.Result, pollerName string, statResultHisto
Status: mc.TrafficServer[string(result.ID)].Status,
Why: whyAvailable,
UnavailableStat: unavailableStat,
+ Poller: pollerName,
} // TODO move within localStates?
if available, ok := localStates.GetCache(result.ID); !ok || available.IsAvailable != isAvailable {
- log.Infof("Changing state for %s was: %t now: %t because %s error: %v", result.ID, available.IsAvailable, isAvailable, whyAvailable, result.Error)
- events.Add(cache.Event{Time: time.Now().Unix(), Description: whyAvailable, Name: result.ID, Hostname: result.ID, Type: toData.ServerTypes[result.ID].String(), Available: isAvailable})
+ log.Infof("Changing state for %s was: %t now: %t because %s poller: %v error: %v", result.ID, available.IsAvailable, isAvailable, whyAvailable, pollerName, result.Error)
+ events.Add(cache.Event{Time: time.Now().Unix(), Description: whyAvailable + " (" + pollerName + ")", Name: result.ID, Hostname: result.ID, Type: toData.ServerTypes[result.ID].String(), Available: isAvailable})
}
localStates.SetCache(result.ID, peer.IsAvailable{IsAvailable: isAvailable})