Repository: incubator-trafficcontrol
Updated Branches:
  refs/heads/master d5692bb46 -> 46e1f46ac


Add TM2 offline-validator log limit, html format


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

Branch: refs/heads/master
Commit: 2ac329cbb3f2be4b33df13a1330d509ecacd6920
Parents: 7a32950
Author: Robert Butts <robert.o.bu...@gmail.com>
Authored: Wed Mar 1 16:42:58 2017 -0700
Committer: David Neuman <david.neuma...@gmail.com>
Committed: Wed Mar 1 21:09:12 2017 -0700

----------------------------------------------------------------------
 .../traffic_monitor/tools/validate-offline.go   | 59 ++++++++++++++++----
 1 file changed, 49 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/2ac329cb/traffic_monitor_golang/traffic_monitor/tools/validate-offline.go
----------------------------------------------------------------------
diff --git a/traffic_monitor_golang/traffic_monitor/tools/validate-offline.go 
b/traffic_monitor_golang/traffic_monitor/tools/validate-offline.go
index 30574a0..92b17c7 100644
--- a/traffic_monitor_golang/traffic_monitor/tools/validate-offline.go
+++ b/traffic_monitor_golang/traffic_monitor/tools/validate-offline.go
@@ -33,26 +33,47 @@ import (
 
 const UserAgent = "tm-offline-validator/0.1"
 
+const LogLimit = 100000
+
 type Log struct {
-       l *[]string
-       m *sync.RWMutex
+       log     *[]string
+       limit   int
+       errored *bool
+       m       *sync.RWMutex
 }
 
 func (l *Log) Add(msg string) {
        l.m.Lock()
        defer l.m.Unlock()
-       *l.l = append(*l.l, msg)
+       *l.log = append([]string{msg}, *l.log...)
+       if len(*l.log) > l.limit {
+               *l.log = (*l.log)[:l.limit]
+       }
 }
 
 func (l *Log) Get() []string {
        l.m.RLock()
        defer l.m.RUnlock()
-       return *l.l
+       return *l.log
+}
+
+func (l *Log) GetErrored() bool {
+       l.m.RLock()
+       defer l.m.RUnlock()
+       return *l.errored
+}
+
+func (l *Log) SetErrored(e bool) {
+       l.m.Lock()
+       defer l.m.Unlock()
+       *l.errored = e
 }
 
 func NewLog() Log {
-       s := make([]string, 0)
-       return Log{l: &s, m: &sync.RWMutex{}}
+       log := make([]string, 0, LogLimit+1)
+       errored := false
+       limit := LogLimit
+       return Log{log: &log, errored: &errored, m: &sync.RWMutex{}, limit: 
limit}
 }
 
 func main() {
@@ -80,10 +101,12 @@ func main() {
 
        onErr := func(err error) {
                log.Add(fmt.Sprintf("%v ERROR %v\n", time.Now(), err))
+               log.SetErrored(true)
        }
 
        onResumeSuccess := func() {
                log.Add(fmt.Sprintf("%v INFO State Valid\n", time.Now()))
+               log.SetErrored(false)
        }
 
        onCheck := func(err error) {
@@ -96,21 +119,37 @@ func main() {
 
        go tmcheck.Validator(*tmURI, toClient, *interval, *grace, onErr, 
onResumeSuccess, onCheck)
 
-       if err := serve(log); err != nil {
+       if err := serve(log, *toURI, *tmURI); err != nil {
                fmt.Printf("Serve error: %v\n", err)
        }
 }
 
-func serve(log Log) error {
+func serve(log Log, toURI string, tmURI string) error {
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                w.Header().Set("Access-Control-Allow-Origin", "*")
                w.Header().Set("Content-Type", "text/html")
-               fmt.Fprintf(w, `<html><head><meta http-equiv="refresh" 
content="5"></head><body><pre>`)
+               fmt.Fprintf(w, `<!DOCTYPE html>
+<meta http-equiv="refresh" content="5">
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Traffic Monitor Offline Validator</title>
+<style type="text/css">body{margin:40px 
auto;max-width:650px;line-height:1.6;font-size:18px;color:#444;padding:0 
10px}h1,h2,h3{line-height:1.2}</style>`)
+
+               fmt.Fprintf(w, `<p>%s`, toURI)
+               fmt.Fprintf(w, `<p>%s`, tmURI)
+               if log.GetErrored() {
+                       fmt.Fprintf(w, `<h1 style="color:red">Invalid</h1>`)
+               } else {
+                       fmt.Fprintf(w, `<h1 style="color:limegreen">Valid</h1>`)
+               }
+
+               fmt.Fprintf(w, `<pre>`)
                logCopy := log.Get()
                for i := len(logCopy) - 1; i >= 0; i-- {
                        fmt.Fprintf(w, "%s\n", logCopy[i])
                }
-               fmt.Fprintf(w, `</pre></body></html>`)
+               fmt.Fprintf(w, `</pre>`)
+
        })
        return http.ListenAndServe(":80", nil)
 }

Reply via email to