add config option for static http and js file

(cherry picked from commit 27b7bca521354b6655b1e5a10772e46deb42cced)


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

Branch: refs/heads/master
Commit: fcf264245eeff033b8ea4062dabeaa13c5cfe81f
Parents: c544779
Author: David Neuman <david.neuma...@gmail.com>
Authored: Mon Jan 9 14:00:00 2017 -0700
Committer: David Neuman <david.neuma...@gmail.com>
Committed: Wed Jan 11 16:01:41 2017 +0000

----------------------------------------------------------------------
 .../experimental/conf/traffic_monitor.cfg       |  3 +-
 .../traffic_monitor/config/config.go            |  4 +++
 .../traffic_monitor/manager/opsconfig.go        |  2 +-
 .../traffic_monitor/srvhttp/srvhttp.go          | 33 +++++++++++++-------
 4 files changed, 28 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/fcf26424/traffic_monitor/experimental/conf/traffic_monitor.cfg
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/conf/traffic_monitor.cfg 
b/traffic_monitor/experimental/conf/traffic_monitor.cfg
index a463682..f2c25a0 100644
--- a/traffic_monitor/experimental/conf/traffic_monitor.cfg
+++ b/traffic_monitor/experimental/conf/traffic_monitor.cfg
@@ -15,5 +15,6 @@
        "log_location_debug": "null",
        "serve_read_timeout_ms": 10000,
        "serve_write_timeout_ms": 10000,
-       "http_poll_no_sleep": false
+       "http_poll_no_sleep": false,
+       "static_file_dir": "/opt/traffic_monitor/static/"
 }

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/fcf26424/traffic_monitor/experimental/traffic_monitor/config/config.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/config/config.go 
b/traffic_monitor/experimental/traffic_monitor/config/config.go
index b7bb0e2..24ba42a 100644
--- a/traffic_monitor/experimental/traffic_monitor/config/config.go
+++ b/traffic_monitor/experimental/traffic_monitor/config/config.go
@@ -35,6 +35,8 @@ const (
        LogLocationStderr = "stderr"
        // LogLocationNull indicates the null IO stream (/dev/null)
        LogLocationNull = "null"
+       //StaticFileDir is the directory that contains static html and js files.
+       StaticFileDir = "/opt/traffic_monitor/static/"
 )
 
 // Config is the configuration for the application. It includes myriad data, 
such as polling intervals and log locations.
@@ -57,6 +59,7 @@ type Config struct {
        ServeWriteTimeout            time.Duration `json:"-"`
        HealthToStatRatio            uint64        `json:"health_to_stat_ratio"`
        HTTPPollNoSleep              bool          `json:"http_poll_no_sleep"`
+       StaticFileDir                string        `json:"static_file_dir"`
 }
 
 // DefaultConfig is the default configuration for the application, if no 
configuration file is given, or if a given config setting doesn't exist in the 
config file.
@@ -79,6 +82,7 @@ var DefaultConfig = Config{
        ServeWriteTimeout:            10 * time.Second,
        HealthToStatRatio:            4,
        HTTPPollNoSleep:              false,
+       StaticFileDir:                StaticFileDir,
 }
 
 // MarshalJSON marshals custom millisecond durations. Aliasing inspired by 
http://choly.ca/post/go-json-marshalling/

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/fcf26424/traffic_monitor/experimental/traffic_monitor/manager/opsconfig.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/manager/opsconfig.go 
b/traffic_monitor/experimental/traffic_monitor/manager/opsconfig.go
index 81906ed..b57a613 100644
--- a/traffic_monitor/experimental/traffic_monitor/manager/opsconfig.go
+++ b/traffic_monitor/experimental/traffic_monitor/manager/opsconfig.go
@@ -148,7 +148,7 @@ func StartOpsConfigManager(
                                unpolledCaches,
                                monitorConfig,
                        )
-                       err = httpServer.Run(endpoints, listenAddress, 
cfg.ServeReadTimeout, cfg.ServeWriteTimeout)
+                       err = httpServer.Run(endpoints, listenAddress, 
cfg.ServeReadTimeout, cfg.ServeWriteTimeout, cfg.StaticFileDir)
                        if err != nil {
                                handleErr(fmt.Errorf("MonitorConfigPoller: 
error creating HTTP server: %s\n", err))
                                continue

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/fcf26424/traffic_monitor/experimental/traffic_monitor/srvhttp/srvhttp.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/traffic_monitor/srvhttp/srvhttp.go 
b/traffic_monitor/experimental/traffic_monitor/srvhttp/srvhttp.go
index 564f5b3..09a5194 100644
--- a/traffic_monitor/experimental/traffic_monitor/srvhttp/srvhttp.go
+++ b/traffic_monitor/experimental/traffic_monitor/srvhttp/srvhttp.go
@@ -21,14 +21,16 @@ package srvhttp
 
 import (
        "fmt"
-       
"github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/common/log"
-       "github.com/hydrogen18/stoppableListener"
        "io/ioutil"
        "net"
        "net/http"
        "net/url"
+       "strings"
        "sync"
        "time"
+
+       
"github.com/apache/incubator-trafficcontrol/traffic_monitor/experimental/common/log"
+       "github.com/hydrogen18/stoppableListener"
 )
 
 // GetCommonAPIData calculates and returns API data common to most endpoints
@@ -53,12 +55,12 @@ type Server struct {
        stoppableListenerWaitGroup sync.WaitGroup
 }
 
-func (s Server) registerEndpoints(sm *http.ServeMux, endpoints 
map[string]http.HandlerFunc) error {
-       handleRoot, err := s.handleRootFunc()
+func (s *Server) registerEndpoints(sm *http.ServeMux, endpoints 
map[string]http.HandlerFunc, staticFileDir string) error {
+       handleRoot, err := s.handleRootFunc(staticFileDir)
        if err != nil {
                return fmt.Errorf("Error getting root endpoint: %v", err)
        }
-       handleSortableJs, err := s.handleSortableFunc()
+       handleSortableJs, err := s.handleSortableFunc(staticFileDir)
        if err != nil {
                return fmt.Errorf("Error getting sortable endpoint: %v", err)
        }
@@ -76,7 +78,7 @@ func (s Server) registerEndpoints(sm *http.ServeMux, 
endpoints map[string]http.H
 // Run runs a new HTTP service at the given addr, making data requests to the 
given c.
 // Run may be called repeatedly, and each time, will shut down any existing 
service first.
 // Run is NOT threadsafe, and MUST NOT be called concurrently by multiple 
goroutines.
-func (s Server) Run(endpoints map[string]http.HandlerFunc, addr string, 
readTimeout time.Duration, writeTimeout time.Duration) error {
+func (s *Server) Run(endpoints map[string]http.HandlerFunc, addr string, 
readTimeout time.Duration, writeTimeout time.Duration, staticFileDir string) 
error {
        if s.stoppableListener != nil {
                log.Infof("Stopping Web Server\n")
                s.stoppableListener.Stop()
@@ -94,7 +96,7 @@ func (s Server) Run(endpoints map[string]http.HandlerFunc, 
addr string, readTime
        }
 
        sm := http.NewServeMux()
-       err = s.registerEndpoints(sm, endpoints)
+       err = s.registerEndpoints(sm, endpoints, staticFileDir)
        if err != nil {
                return err
        }
@@ -134,6 +136,7 @@ func ParametersStr(params url.Values) string {
        return pp
 }
 
+//CommonAPIDataDataFormat is a common Date format for the API
 const CommonAPIDataDateFormat = "Mon Jan 02 15:04:05 UTC 2006"
 
 // DateStr returns the given time in the format expected by Traffic Monitor 
1.0 API users
@@ -141,15 +144,21 @@ func DateStr(t time.Time) string {
        return t.UTC().Format(CommonAPIDataDateFormat)
 }
 
-func (s Server) handleRootFunc() (http.HandlerFunc, error) {
-       return s.handleFile("index.html")
+func (s *Server) handleRootFunc(staticFileDir string) (http.HandlerFunc, 
error) {
+       if strings.HasSuffix(staticFileDir, "/") {
+               return s.handleFile(staticFileDir + "index.html")
+       }
+       return s.handleFile(staticFileDir + "/index.html")
 }
 
-func (s Server) handleSortableFunc() (http.HandlerFunc, error) {
-       return s.handleFile("sorttable.js")
+func (s *Server) handleSortableFunc(staticFileDir string) (http.HandlerFunc, 
error) {
+       if strings.HasSuffix(staticFileDir, "/") {
+               return s.handleFile(staticFileDir + "sorttable.js")
+       }
+       return s.handleFile(staticFileDir + "/sorttable.js")
 }
 
-func (s Server) handleFile(name string) (http.HandlerFunc, error) {
+func (s *Server) handleFile(name string) (http.HandlerFunc, error) {
        bytes, err := ioutil.ReadFile(name)
        if err != nil {
                return nil, err

Reply via email to