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/02/27 20:13:07 UTC
[1/2] incubator-trafficcontrol git commit: Add Stat endpoint Oldest
Polled Peer name, time
Repository: incubator-trafficcontrol
Updated Branches:
refs/heads/master 6cd6b3e9c -> ad9754043
Add Stat endpoint Oldest Polled Peer name, time
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/52e0c339
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/52e0c339
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/52e0c339
Branch: refs/heads/master
Commit: 52e0c3399cb2a4b564822599c1b3b7181d435d69
Parents: 6cd6b3e
Author: Robert Butts <ro...@gmail.com>
Authored: Mon Feb 27 12:59:27 2017 -0700
Committer: David Neuman <da...@gmail.com>
Committed: Mon Feb 27 13:12:48 2017 -0700
----------------------------------------------------------------------
.../traffic_monitor/manager/datarequest.go | 37 ++++++++++++++++----
.../traffic_monitor/peer/crstates.go | 25 ++++++++++++-
.../traffic_monitor/version.go | 2 +-
3 files changed, 55 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/52e0c339/traffic_monitor_golang/traffic_monitor/manager/datarequest.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/manager/datarequest.go b/traffic_monitor_golang/traffic_monitor/manager/datarequest.go
index 86ebe01..1b5bd9e 100644
--- a/traffic_monitor_golang/traffic_monitor/manager/datarequest.go
+++ b/traffic_monitor_golang/traffic_monitor/manager/datarequest.go
@@ -618,8 +618,8 @@ func srvPeerStates(params url.Values, errorCount threadsafe.Uint, path string, t
return WrapErrCode(errorCount, path, bytes, err)
}
-func srvStats(staticAppData StaticAppData, healthPollInterval time.Duration, lastHealthDurations DurationMapThreadsafe, fetchCount threadsafe.Uint, healthIteration threadsafe.Uint, errorCount threadsafe.Uint) ([]byte, error) {
- return getStats(staticAppData, healthPollInterval, lastHealthDurations.Get(), fetchCount.Get(), healthIteration.Get(), errorCount.Get())
+func srvStats(staticAppData StaticAppData, healthPollInterval time.Duration, lastHealthDurations DurationMapThreadsafe, fetchCount threadsafe.Uint, healthIteration threadsafe.Uint, errorCount threadsafe.Uint, peerStates peer.CRStatesPeersThreadsafe) ([]byte, error) {
+ return getStats(staticAppData, healthPollInterval, lastHealthDurations.Get(), fetchCount.Get(), healthIteration.Get(), errorCount.Get(), peerStates)
}
func srvConfigDoc(opsConfig OpsConfigThreadsafe) ([]byte, error) {
@@ -756,7 +756,7 @@ func MakeDispatchMap(
return srvPeerStates(params, errorCount, path, toData, peerStates)
}, ContentTypeJSON)),
"/publish/Stats": wrap(WrapErr(errorCount, func() ([]byte, error) {
- return srvStats(staticAppData, healthPollInterval, lastHealthDurations, fetchCount, healthIteration, errorCount)
+ return srvStats(staticAppData, healthPollInterval, lastHealthDurations, fetchCount, healthIteration, errorCount, peerStates)
}, ContentTypeJSON)),
"/publish/ConfigDoc": wrap(WrapErr(errorCount, func() ([]byte, error) {
return srvConfigDoc(opsConfig)
@@ -1114,6 +1114,8 @@ type Stats struct {
MemAllocBytes uint64 `json:"Memory Bytes Allocated"`
MemTotalBytes uint64 `json:"Total Bytes Allocated"`
MemSysBytes uint64 `json:"System Bytes Allocated"`
+ OldestPolledPeer string `json:"Oldest Polled Peer"`
+ OldestPolledPeerMs int64 `json:"Oldest Polled Peer Time (ms)"`
}
func getLongestPoll(lastHealthTimes map[enum.CacheName]time.Duration) (enum.CacheName, time.Duration) {
@@ -1128,7 +1130,25 @@ func getLongestPoll(lastHealthTimes map[enum.CacheName]time.Duration) (enum.Cach
return longestCache, longestTime
}
-func getStats(staticAppData StaticAppData, pollingInterval time.Duration, lastHealthTimes map[enum.CacheName]time.Duration, fetchCount uint64, healthIteration uint64, errorCount uint64) ([]byte, error) {
+func oldestPeerPollTime(peerTimes map[enum.TrafficMonitorName]time.Time) (enum.TrafficMonitorName, time.Time) {
+ now := time.Now()
+ oldestTime := now
+ oldestPeer := enum.TrafficMonitorName("")
+ for p, t := range peerTimes {
+ if oldestTime.After(t) {
+ oldestTime = t
+ oldestPeer = p
+ }
+ }
+ if oldestTime == now {
+ oldestTime = time.Time{}
+ }
+ return oldestPeer, oldestTime
+}
+
+const MillisecondsPerNanosecond = int64(1000000)
+
+func getStats(staticAppData StaticAppData, pollingInterval time.Duration, lastHealthTimes map[enum.CacheName]time.Duration, fetchCount uint64, healthIteration uint64, errorCount uint64, peerStates peer.CRStatesPeersThreadsafe) ([]byte, error) {
longestPollCache, longestPollTime := getLongestPoll(lastHealthTimes)
var memStats runtime.MemStats
runtime.ReadMemStats(&memStats)
@@ -1157,6 +1177,10 @@ func getStats(staticAppData StaticAppData, pollingInterval time.Duration, lastHe
s.MemTotalBytes = memStats.TotalAlloc
s.MemSysBytes = memStats.Sys
+ oldestPolledPeer, oldestPolledPeerTime := oldestPeerPollTime(peerStates.GetQueryTimes()) // map[enum.TrafficMonitorName]time.Time)
+ s.OldestPolledPeer = string(oldestPolledPeer)
+ s.OldestPolledPeerMs = time.Now().Sub((oldestPolledPeerTime)).Nanoseconds() / MillisecondsPerNanosecond
+
return json.Marshal(JSONStats{Stats: s})
}
@@ -1195,9 +1219,8 @@ func createStatSummary(statResultHistory cache.ResultStatHistory, filter cache.F
continue
}
ssStat := StatSummaryStat{}
- msPerNs := int64(1000000)
- ssStat.StartTime = statHistory[len(statHistory)-1].Time.UnixNano() / msPerNs
- ssStat.EndTime = statHistory[0].Time.UnixNano() / msPerNs
+ ssStat.StartTime = statHistory[len(statHistory)-1].Time.UnixNano() / MillisecondsPerNanosecond
+ ssStat.EndTime = statHistory[0].Time.UnixNano() / MillisecondsPerNanosecond
oldestVal, isOldestValNumeric := util.ToNumeric(statHistory[len(statHistory)-1].Val)
newestVal, isNewestValNumeric := util.ToNumeric(statHistory[0].Val)
if !isOldestValNumeric || !isNewestValNumeric {
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/52e0c339/traffic_monitor_golang/traffic_monitor/peer/crstates.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/peer/crstates.go b/traffic_monitor_golang/traffic_monitor/peer/crstates.go
index ef0133e..efa40a9 100644
--- a/traffic_monitor_golang/traffic_monitor/peer/crstates.go
+++ b/traffic_monitor_golang/traffic_monitor/peer/crstates.go
@@ -22,6 +22,7 @@ package peer
import (
"encoding/json"
"sync"
+ "time"
"github.com/apache/incubator-trafficcontrol/traffic_monitor_golang/traffic_monitor/enum"
)
@@ -187,12 +188,18 @@ func (t *CRStatesThreadsafe) DeleteDeliveryService(name enum.DeliveryServiceName
type CRStatesPeersThreadsafe struct {
crStates map[enum.TrafficMonitorName]Crstates
peerStates map[enum.TrafficMonitorName]bool
+ peerTimes map[enum.TrafficMonitorName]time.Time
m *sync.RWMutex
}
// NewCRStatesPeersThreadsafe creates a new CRStatesPeers object safe for multiple goroutine readers and a single writer.
func NewCRStatesPeersThreadsafe() CRStatesPeersThreadsafe {
- return CRStatesPeersThreadsafe{m: &sync.RWMutex{}, crStates: map[enum.TrafficMonitorName]Crstates{}, peerStates: map[enum.TrafficMonitorName]bool{}}
+ return CRStatesPeersThreadsafe{
+ m: &sync.RWMutex{},
+ crStates: map[enum.TrafficMonitorName]Crstates{},
+ peerStates: map[enum.TrafficMonitorName]bool{},
+ peerTimes: map[enum.TrafficMonitorName]time.Time{},
+ }
}
// GetCrstates returns the internal Traffic Monitor peer Crstates data. This MUST NOT be modified.
@@ -206,6 +213,14 @@ func (t *CRStatesPeersThreadsafe) GetCrstates() map[enum.TrafficMonitorName]Crst
return m
}
+func copyPeerTimes(a map[enum.TrafficMonitorName]time.Time) map[enum.TrafficMonitorName]time.Time {
+ m := make(map[enum.TrafficMonitorName]time.Time, len(a))
+ for k, v := range a {
+ m[k] = v
+ }
+ return m
+}
+
// GetPeerAvailability returns the state of the given peer
func (t *CRStatesPeersThreadsafe) GetPeerAvailability(peer enum.TrafficMonitorName) bool {
t.m.RLock()
@@ -214,6 +229,13 @@ func (t *CRStatesPeersThreadsafe) GetPeerAvailability(peer enum.TrafficMonitorNa
return availability
}
+// GetPeerAvailability returns the state of the given peer
+func (t *CRStatesPeersThreadsafe) GetQueryTimes() map[enum.TrafficMonitorName]time.Time {
+ t.m.RLock()
+ defer t.m.RUnlock()
+ return copyPeerTimes(t.peerTimes)
+}
+
// HasAvailablePeers returns true if at least one peer is online
func (t *CRStatesPeersThreadsafe) HasAvailablePeers() bool {
availablePeers := false
@@ -237,5 +259,6 @@ func (t *CRStatesPeersThreadsafe) Set(result Result) {
t.m.Lock()
t.crStates[result.ID] = result.PeerStates
t.peerStates[result.ID] = result.Available
+ t.peerTimes[result.ID] = result.Time
t.m.Unlock()
}
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/52e0c339/traffic_monitor_golang/traffic_monitor/version.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/version.go b/traffic_monitor_golang/traffic_monitor/version.go
index 31569de..e9738e5 100644
--- a/traffic_monitor_golang/traffic_monitor/version.go
+++ b/traffic_monitor_golang/traffic_monitor/version.go
@@ -20,4 +20,4 @@ package main
*/
// Version is the current version of the app, in string form.
-var Version = "2.0.5"
+var Version = "2.0.6"
[2/2] incubator-trafficcontrol git commit: This closes #316
Posted by ne...@apache.org.
This closes #316
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/ad975404
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/ad975404
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/ad975404
Branch: refs/heads/master
Commit: ad9754043c03fd8125cec9f25d5595392ddfcae0
Parents: 52e0c33
Author: David Neuman <da...@gmail.com>
Authored: Mon Feb 27 13:13:01 2017 -0700
Committer: David Neuman <da...@gmail.com>
Committed: Mon Feb 27 13:13:01 2017 -0700
----------------------------------------------------------------------
----------------------------------------------------------------------