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/04/12 21:44:00 UTC

[10/13] incubator-trafficcontrol git commit: Move TM2 tmcheck offlinestates funcs to file

Move TM2 tmcheck offlinestates funcs to file


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

Branch: refs/heads/master
Commit: 0dd73c1b85477085887c9dc0899ded4f7f77f334
Parents: 2fdd931
Author: Robert Butts <ro...@gmail.com>
Authored: Thu Mar 30 08:50:11 2017 -0600
Committer: Dave Neuman <ne...@apache.org>
Committed: Wed Apr 12 15:43:31 2017 -0600

----------------------------------------------------------------------
 .../traffic_monitor/tmcheck/offlinestates.go    | 135 +++++++++++++++++++
 .../traffic_monitor/tmcheck/tmcheck.go          | 104 --------------
 2 files changed, 135 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/0dd73c1b/traffic_monitor_golang/traffic_monitor/tmcheck/offlinestates.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/tmcheck/offlinestates.go b/traffic_monitor_golang/traffic_monitor/tmcheck/offlinestates.go
new file mode 100644
index 0000000..9226ea1
--- /dev/null
+++ b/traffic_monitor_golang/traffic_monitor/tmcheck/offlinestates.go
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package tmcheck
+
+import (
+	"encoding/json"
+	"fmt"
+	"time"
+
+	"github.com/apache/incubator-trafficcontrol/traffic_monitor_golang/traffic_monitor/crconfig"
+	"github.com/apache/incubator-trafficcontrol/traffic_monitor_golang/traffic_monitor/enum"
+	"github.com/apache/incubator-trafficcontrol/traffic_monitor_golang/traffic_monitor/peer"
+	to "github.com/apache/incubator-trafficcontrol/traffic_ops/client"
+)
+
+// ValidateOfflineStates validates that no OFFLINE or ADMIN_DOWN caches in the given Traffic Ops' CRConfig are marked Available in the given Traffic Monitor's CRStates.
+func ValidateOfflineStates(tmURI string, toClient *to.Session) error {
+	cdn, err := GetCDN(tmURI)
+	if err != nil {
+		return fmt.Errorf("getting CDN from Traffic Monitor: %v", err)
+	}
+	return ValidateOfflineStatesWithCDN(tmURI, cdn, toClient)
+}
+
+// ValidateOfflineStatesWithCDN validates per ValidateOfflineStates, but saves an additional query if the Traffic Monitor's CDN is known.
+func ValidateOfflineStatesWithCDN(tmURI string, tmCDN string, toClient *to.Session) error {
+	crConfigBytes, err := toClient.CRConfigRaw(tmCDN)
+	if err != nil {
+		return fmt.Errorf("getting CRConfig: %v", err)
+	}
+
+	crConfig := crconfig.CRConfig{}
+	if err := json.Unmarshal(crConfigBytes, &crConfig); err != nil {
+		return fmt.Errorf("unmarshalling CRConfig JSON: %v", err)
+	}
+
+	return ValidateOfflineStatesWithCRConfig(tmURI, &crConfig, toClient)
+}
+
+// ValidateOfflineStatesWithCRConfig validates per ValidateOfflineStates, but saves querying the CRconfig if it's already fetched.
+func ValidateOfflineStatesWithCRConfig(tmURI string, crConfig *crconfig.CRConfig, toClient *to.Session) error {
+	crStates, err := GetCRStates(tmURI + TrafficMonitorCRStatesPath)
+	if err != nil {
+		return fmt.Errorf("getting CRStates: %v", err)
+	}
+
+	return ValidateCRStates(crStates, crConfig)
+}
+
+// ValidateCRStates validates that no OFFLINE or ADMIN_DOWN caches in the given CRConfig are marked Available in the given CRStates.
+func ValidateCRStates(crstates *peer.Crstates, crconfig *crconfig.CRConfig) error {
+	for cacheName, cacheInfo := range crconfig.ContentServers {
+		status := enum.CacheStatusFromString(string(*cacheInfo.Status))
+		if status != enum.CacheStatusAdminDown || status != enum.CacheStatusOffline {
+			continue
+		}
+
+		available, ok := crstates.Caches[enum.CacheName(cacheName)]
+		if !ok {
+			return fmt.Errorf("Cache %v in CRConfig but not CRStates", cacheName)
+		}
+
+		if available.IsAvailable {
+			return fmt.Errorf("Cache %v is %v in CRConfig, but available in CRStates", cacheName, status)
+		}
+
+	}
+	return nil
+}
+
+// CRStatesOfflineValidator is designed to be run as a goroutine, and does not return. It continously validates every `interval`, and calls `onErr` on failure, `onResumeSuccess` when a failure ceases, and `onCheck` on every poll.
+func CRStatesOfflineValidator(
+	tmURI string,
+	toClient *to.Session,
+	interval time.Duration,
+	grace time.Duration,
+	onErr func(error),
+	onResumeSuccess func(),
+	onCheck func(error),
+) {
+	Validator(tmURI, toClient, interval, grace, onErr, onResumeSuccess, onCheck, ValidateOfflineStates)
+}
+
+// AllMonitorsCRStatesOfflineValidator is designed to be run as a goroutine, and does not return. It continously validates every `interval`, and calls `onErr` on failure, `onResumeSuccess` when a failure ceases, and `onCheck` on every poll. Note the error passed to `onErr` may be a general validation error not associated with any monitor, in which case the passed `enum.TrafficMonitorName` will be empty.
+func AllMonitorsCRStatesOfflineValidator(
+	toClient *to.Session,
+	interval time.Duration,
+	includeOffline bool,
+	grace time.Duration,
+	onErr func(enum.TrafficMonitorName, error),
+	onResumeSuccess func(enum.TrafficMonitorName),
+	onCheck func(enum.TrafficMonitorName, error),
+) {
+	AllValidator(toClient, interval, includeOffline, grace, onErr, onResumeSuccess, onCheck, ValidateAllMonitorsOfflineStates)
+}
+
+// ValidateOfflineStates validates that no OFFLINE or ADMIN_DOWN caches in the given Traffic Ops' CRConfig are marked Available in the given Traffic Monitor's CRStates.
+func ValidateAllMonitorsOfflineStates(toClient *to.Session, includeOffline bool) (map[enum.TrafficMonitorName]error, error) {
+	servers, err := GetMonitors(toClient, includeOffline)
+	if err != nil {
+		return nil, err
+	}
+
+	crConfigs := GetCRConfigs(GetCDNs(servers), toClient)
+
+	errs := map[enum.TrafficMonitorName]error{}
+	for _, server := range servers {
+		crConfig := crConfigs[enum.CDNName(server.CDNName)]
+		if err := crConfig.Err; err != nil {
+			errs[enum.TrafficMonitorName(server.HostName)] = fmt.Errorf("getting CRConfig: %v", err)
+			continue
+		}
+
+		uri := fmt.Sprintf("http://%s.%s", server.HostName, server.DomainName)
+		errs[enum.TrafficMonitorName(server.HostName)] = ValidateOfflineStatesWithCRConfig(uri, crConfig.CRConfig, toClient)
+	}
+	return errs, nil
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/0dd73c1b/traffic_monitor_golang/traffic_monitor/tmcheck/tmcheck.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/tmcheck/tmcheck.go b/traffic_monitor_golang/traffic_monitor/tmcheck/tmcheck.go
index a6e12ba..9c6016b 100644
--- a/traffic_monitor_golang/traffic_monitor/tmcheck/tmcheck.go
+++ b/traffic_monitor_golang/traffic_monitor/tmcheck/tmcheck.go
@@ -87,61 +87,6 @@ func GetCRStates(uri string) (*peer.Crstates, error) {
 	return &states, nil
 }
 
-// ValidateOfflineStates validates that no OFFLINE or ADMIN_DOWN caches in the given Traffic Ops' CRConfig are marked Available in the given Traffic Monitor's CRStates.
-func ValidateOfflineStates(tmURI string, toClient *to.Session) error {
-	cdn, err := GetCDN(tmURI)
-	if err != nil {
-		return fmt.Errorf("getting CDN from Traffic Monitor: %v", err)
-	}
-	return ValidateOfflineStatesWithCDN(tmURI, cdn, toClient)
-}
-
-// ValidateOfflineStatesWithCDN validates per ValidateOfflineStates, but saves an additional query if the Traffic Monitor's CDN is known.
-func ValidateOfflineStatesWithCDN(tmURI string, tmCDN string, toClient *to.Session) error {
-	crConfigBytes, err := toClient.CRConfigRaw(tmCDN)
-	if err != nil {
-		return fmt.Errorf("getting CRConfig: %v", err)
-	}
-
-	crConfig := crconfig.CRConfig{}
-	if err := json.Unmarshal(crConfigBytes, &crConfig); err != nil {
-		return fmt.Errorf("unmarshalling CRConfig JSON: %v", err)
-	}
-
-	return ValidateOfflineStatesWithCRConfig(tmURI, &crConfig, toClient)
-}
-
-// ValidateOfflineStatesWithCRConfig validates per ValidateOfflineStates, but saves querying the CRconfig if it's already fetched.
-func ValidateOfflineStatesWithCRConfig(tmURI string, crConfig *crconfig.CRConfig, toClient *to.Session) error {
-	crStates, err := GetCRStates(tmURI + TrafficMonitorCRStatesPath)
-	if err != nil {
-		return fmt.Errorf("getting CRStates: %v", err)
-	}
-
-	return ValidateCRStates(crStates, crConfig)
-}
-
-// ValidateCRStates validates that no OFFLINE or ADMIN_DOWN caches in the given CRConfig are marked Available in the given CRStates.
-func ValidateCRStates(crstates *peer.Crstates, crconfig *crconfig.CRConfig) error {
-	for cacheName, cacheInfo := range crconfig.ContentServers {
-		status := enum.CacheStatusFromString(string(*cacheInfo.Status))
-		if status != enum.CacheStatusAdminDown || status != enum.CacheStatusOffline {
-			continue
-		}
-
-		available, ok := crstates.Caches[enum.CacheName(cacheName)]
-		if !ok {
-			return fmt.Errorf("Cache %v in CRConfig but not CRStates", cacheName)
-		}
-
-		if available.IsAvailable {
-			return fmt.Errorf("Cache %v is %v in CRConfig, but available in CRStates", cacheName, status)
-		}
-
-	}
-	return nil
-}
-
 type ValidatorFunc func(
 	tmURI string,
 	toClient *to.Session,
@@ -201,19 +146,6 @@ func Validator(
 	}
 }
 
-// CRStatesOfflineValidator is designed to be run as a goroutine, and does not return. It continously validates every `interval`, and calls `onErr` on failure, `onResumeSuccess` when a failure ceases, and `onCheck` on every poll.
-func CRStatesOfflineValidator(
-	tmURI string,
-	toClient *to.Session,
-	interval time.Duration,
-	grace time.Duration,
-	onErr func(error),
-	onResumeSuccess func(),
-	onCheck func(error),
-) {
-	Validator(tmURI, toClient, interval, grace, onErr, onResumeSuccess, onCheck, ValidateOfflineStates)
-}
-
 // CRConfigOrError contains a CRConfig or an error. Union types? Monads? What are those?
 type CRConfigOrError struct {
 	CRConfig *crconfig.CRConfig
@@ -234,29 +166,6 @@ func GetMonitors(toClient *to.Session, includeOffline bool) ([]to.Server, error)
 	return servers, nil
 }
 
-// ValidateOfflineStates validates that no OFFLINE or ADMIN_DOWN caches in the given Traffic Ops' CRConfig are marked Available in the given Traffic Monitor's CRStates.
-func ValidateAllMonitorsOfflineStates(toClient *to.Session, includeOffline bool) (map[enum.TrafficMonitorName]error, error) {
-	servers, err := GetMonitors(toClient, includeOffline)
-	if err != nil {
-		return nil, err
-	}
-
-	crConfigs := GetCRConfigs(GetCDNs(servers), toClient)
-
-	errs := map[enum.TrafficMonitorName]error{}
-	for _, server := range servers {
-		crConfig := crConfigs[enum.CDNName(server.CDNName)]
-		if err := crConfig.Err; err != nil {
-			errs[enum.TrafficMonitorName(server.HostName)] = fmt.Errorf("getting CRConfig: %v", err)
-			continue
-		}
-
-		uri := fmt.Sprintf("http://%s.%s", server.HostName, server.DomainName)
-		errs[enum.TrafficMonitorName(server.HostName)] = ValidateOfflineStatesWithCRConfig(uri, crConfig.CRConfig, toClient)
-	}
-	return errs, nil
-}
-
 func AllValidator(
 	toClient *to.Session,
 	interval time.Duration,
@@ -308,19 +217,6 @@ func AllValidator(
 	}
 }
 
-// AllMonitorsCRStatesOfflineValidator is designed to be run as a goroutine, and does not return. It continously validates every `interval`, and calls `onErr` on failure, `onResumeSuccess` when a failure ceases, and `onCheck` on every poll. Note the error passed to `onErr` may be a general validation error not associated with any monitor, in which case the passed `enum.TrafficMonitorName` will be empty.
-func AllMonitorsCRStatesOfflineValidator(
-	toClient *to.Session,
-	interval time.Duration,
-	includeOffline bool,
-	grace time.Duration,
-	onErr func(enum.TrafficMonitorName, error),
-	onResumeSuccess func(enum.TrafficMonitorName),
-	onCheck func(enum.TrafficMonitorName, error),
-) {
-	AllValidator(toClient, interval, includeOffline, grace, onErr, onResumeSuccess, onCheck, ValidateAllMonitorsOfflineStates)
-}
-
 // FilterOfflines returns only servers which are REPORTED or ONLINE
 func FilterOfflines(servers []to.Server) []to.Server {
 	onlineServers := []to.Server{}