trafficcontrol-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mitchell...@apache.org
Subject [incubator-trafficcontrol] 01/03: Add TO Go CRConfig maxmind override logic
Date Thu, 03 May 2018 14:12:17 GMT
This is an automated email from the ASF dual-hosted git repository.

mitchell852 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git

commit 4b0e32cf55a111d30b4335fb5d4da8d20217143d
Author: Robert Butts <rob@apache.org>
AuthorDate: Wed May 2 16:00:54 2018 -0600

    Add TO Go CRConfig maxmind override logic
---
 traffic_ops/traffic_ops_golang/crconfig/config.go | 67 ++++++++++++++++++++---
 1 file changed, 60 insertions(+), 7 deletions(-)

diff --git a/traffic_ops/traffic_ops_golang/crconfig/config.go b/traffic_ops/traffic_ops_golang/crconfig/config.go
index 0d3eb45..d0e5490 100644
--- a/traffic_ops/traffic_ops_golang/crconfig/config.go
+++ b/traffic_ops/traffic_ops_golang/crconfig/config.go
@@ -22,6 +22,7 @@ package crconfig
 import (
 	"database/sql"
 	"errors"
+	"strconv"
 	"strings"
 )
 
@@ -30,28 +31,41 @@ func makeCRConfigConfig(cdn string, db *sql.DB, dnssecEnabled bool, domain
strin
 	if err != nil {
 		return nil, errors.New("Error getting router params: " + err.Error())
 	}
-	configParams["domain_name"] = domain
 	soa := map[string]string{}
 	ttl := map[string]string{}
+	maxmindDefaultOverrides := []CRConfigConfigMaxmindDefaultOverride{}
+
 	const soaPrefix = "tld.soa."
-	ttlPrefix := "tld.ttls."
+	const ttlPrefix = "tld.ttls."
+	const maxmindDefaultOverrideParameterName = "maxmind.default.override"
 	crConfigConfig := map[string]interface{}{}
-	for k, v := range configParams {
+	for _, param := range configParams {
+		k := param.Name
+		v := param.Value
 		if strings.HasPrefix(k, soaPrefix) {
 			soa[k[len(soaPrefix):]] = v
 		} else if strings.HasPrefix(k, ttlPrefix) {
 			ttl[k[len(ttlPrefix):]] = v
+		} else if k == maxmindDefaultOverrideParameterName {
+			overrideObj, err := createMaxmindDefaultOverrideObj(v)
+			if err != nil {
+				return nil, errors.New("Error parsing " + maxmindDefaultOverrideParameterName + " parameter:
" + err.Error())
+			}
+			maxmindDefaultOverrides = append(maxmindDefaultOverrides, overrideObj)
 		} else {
 			crConfigConfig[k] = v
 		}
 	}
+	crConfigConfig["domain_name"] = domain
 	if len(soa) > 0 {
 		crConfigConfig["soa"] = soa
 	}
 	if len(ttl) > 0 {
 		crConfigConfig["ttls"] = ttl
 	}
-
+	if len(maxmindDefaultOverrides) > 0 {
+		crConfigConfig[maxmindDefaultOverrideParameterName] = maxmindDefaultOverrides
+	}
 	dnssecStr := "false"
 	if dnssecEnabled {
 		dnssecStr = "true"
@@ -61,7 +75,12 @@ func makeCRConfigConfig(cdn string, db *sql.DB, dnssecEnabled bool, domain
strin
 	return crConfigConfig, nil
 }
 
-func getConfigParams(cdn string, db *sql.DB) (map[string]string, error) {
+type CRConfigConfigParameter struct {
+	Name  string
+	Value string
+}
+
+func getConfigParams(cdn string, db *sql.DB) ([]CRConfigConfigParameter, error) {
 	// TODO change to []struct{string,string} ? Speed might matter.
 	q := `
 select name, value from parameter where id in (
@@ -79,17 +98,51 @@ and config_file = 'CRConfig.json'
 	}
 	defer rows.Close()
 
-	params := map[string]string{}
+	params := []CRConfigConfigParameter{}
 	for rows.Next() {
 		name := ""
 		val := ""
 		if err := rows.Scan(&name, &val); err != nil {
 			return nil, errors.New("Error scanning router param: " + err.Error())
 		}
-		params[name] = val
+		params = append(params, CRConfigConfigParameter{Name: name, Value: val})
 	}
 	if err := rows.Err(); err != nil {
 		return nil, errors.New("Error iterating router param rows: " + err.Error())
 	}
 	return params, nil
 }
+
+type CRConfigConfigMaxmindDefaultOverride struct {
+	CountryCode string  `json:"countryCode"`
+	Lat         float64 `json:"lat"`
+	Lon         float64 `json:"long"`
+}
+
+func createMaxmindDefaultOverrideObj(maxmindDefaultOverrideParamVal string) (CRConfigConfigMaxmindDefaultOverride,
error) {
+	countryCodeCoords := strings.Split(maxmindDefaultOverrideParamVal, ";")
+	if len(countryCodeCoords) < 2 {
+		return CRConfigConfigMaxmindDefaultOverride{}, errors.New("malformed maxmind.default.override
parameter: '" + maxmindDefaultOverrideParamVal + "'")
+	}
+	countryCode := countryCodeCoords[0]
+	coords := countryCodeCoords[1]
+	latLon := strings.Split(coords, ",")
+	if len(latLon) < 2 {
+		return CRConfigConfigMaxmindDefaultOverride{}, errors.New("malformed maxmind.default.override
parameter coordinates '" + maxmindDefaultOverrideParamVal + "'")
+	}
+	latStr := latLon[0]
+	lonStr := latLon[1]
+	lat, err := strconv.ParseFloat(latStr, 64)
+	if err != nil {
+		return CRConfigConfigMaxmindDefaultOverride{}, errors.New("malformed maxmind.default.override
parameter coordinates, latitude not a number: '" + maxmindDefaultOverrideParamVal + "'")
+	}
+	lon, err := strconv.ParseFloat(lonStr, 64)
+	if err != nil {
+		return CRConfigConfigMaxmindDefaultOverride{}, errors.New("malformed maxmind.default.override
parameter coordinates, longitude not an number: '" + maxmindDefaultOverrideParamVal + "'")
+	}
+	return CRConfigConfigMaxmindDefaultOverride{
+		CountryCode: countryCode,
+		Lat:         lat,
+		Lon:         lon,
+	}, nil
+}

-- 
To stop receiving notification emails like this one, please contact
mitchell852@apache.org.

Mime
View raw message