Add silly log level support.
[src/xds/xds-server.git] / lib / webserver / server.go
index 40ce948..85a2c40 100644 (file)
@@ -1,6 +1,8 @@
 package webserver
 
 import (
+       "fmt"
+       "log"
        "net/http"
        "os"
 
@@ -25,9 +27,10 @@ type Server struct {
        webApp    *gin.RouterGroup
        cfg       *xdsconfig.Config
        sessions  *session.Sessions
-       mfolder   *model.Folder
+       mfolders  *model.Folders
        sdks      *crosssdk.SDKs
        log       *logrus.Logger
+       sillyLog  bool
        stop      chan struct{} // signals intentional stop
 }
 
@@ -35,20 +38,21 @@ const indexFilename = "index.html"
 const cookieMaxAge = "3600"
 
 // New creates an instance of Server
-func New(cfg *xdsconfig.Config, mfolder *model.Folder, sdks *crosssdk.SDKs, log *logrus.Logger) *Server {
+func New(cfg *xdsconfig.Config, mfolders *model.Folders, sdks *crosssdk.SDKs, logr *logrus.Logger, sillyLog bool) *Server {
 
        // Setup logging for gin router
-       if log.Level == logrus.DebugLevel {
+       if logr.Level == logrus.DebugLevel {
                gin.SetMode(gin.DebugMode)
        } else {
                gin.SetMode(gin.ReleaseMode)
        }
 
-       // TODO
-       //  - try to bind gin DefaultWriter & DefaultErrorWriter to logrus logger
-       //  - try to fix pb about isTerminal=false when out is in VSC Debug Console
-       //gin.DefaultWriter = ??
-       //gin.DefaultErrorWriter = ??
+       // Redirect gin logs into another logger (LogVerboseOut may be stderr or a file)
+       gin.DefaultWriter = cfg.LogVerboseOut
+       gin.DefaultErrorWriter = cfg.LogVerboseOut
+       log.SetOutput(cfg.LogVerboseOut)
+
+       // FIXME - fix pb about isTerminal=false when out is in VSC Debug Console
 
        // Creates gin router
        r := gin.New()
@@ -60,9 +64,10 @@ func New(cfg *xdsconfig.Config, mfolder *model.Folder, sdks *crosssdk.SDKs, log
                webApp:    nil,
                cfg:       cfg,
                sessions:  nil,
-               mfolder:   mfolder,
+               mfolders:  mfolders,
                sdks:      sdks,
-               log:       log,
+               log:       logr,
+               sillyLog:  sillyLog,
                stop:      make(chan struct{}),
        }
 
@@ -80,10 +85,10 @@ func (s *Server) Serve() error {
        s.router.Use(s.middlewareCORS())
 
        // Sessions manager
-       s.sessions = session.NewClientSessions(s.router, s.log, cookieMaxAge)
+       s.sessions = session.NewClientSessions(s.router, s.log, cookieMaxAge, s.sillyLog)
 
        // Create REST API
-       s.api = apiv1.New(s.sessions, s.cfg, s.mfolder, s.router)
+       s.api = apiv1.New(s.router, s.sessions, s.cfg, s.mfolders, s.sdks)
 
        // Websocket routes
        s.sIOServer, err = socketio.NewServer(nil)
@@ -99,12 +104,12 @@ func (s *Server) Serve() error {
        */
 
        // Web Application (serve on / )
-       idxFile := path.Join(s.cfg.WebAppDir, indexFilename)
+       idxFile := path.Join(s.cfg.FileConf.WebAppDir, indexFilename)
        if _, err := os.Stat(idxFile); err != nil {
                s.log.Fatalln("Web app directory not found, check/use webAppDir setting in config file: ", idxFile)
        }
-       s.log.Infof("Serve WEB app dir: %s", s.cfg.WebAppDir)
-       s.router.Use(static.Serve("/", static.LocalFile(s.cfg.WebAppDir, true)))
+       s.log.Infof("Serve WEB app dir: %s", s.cfg.FileConf.WebAppDir)
+       s.router.Use(static.Serve("/", static.LocalFile(s.cfg.FileConf.WebAppDir, true)))
        s.webApp = s.router.Group("/", s.serveIndexFile)
        {
                s.webApp.GET("/")
@@ -113,7 +118,10 @@ func (s *Server) Serve() error {
        // Serve in the background
        serveError := make(chan error, 1)
        go func() {
-               serveError <- http.ListenAndServe(":"+s.cfg.HTTPPort, s.router)
+               msg := fmt.Sprintf("Web Server running on localhost:%s ...\n", s.cfg.FileConf.HTTPPort)
+               s.log.Infof(msg)
+               fmt.Printf(msg)
+               serveError <- http.ListenAndServe(":"+s.cfg.FileConf.HTTPPort, s.router)
        }()
 
        // Wait for stop, restart or error signals
@@ -152,12 +160,10 @@ func (s *Server) middlewareXDSDetails() gin.HandlerFunc {
 // CORS middleware
 func (s *Server) middlewareCORS() gin.HandlerFunc {
        return func(c *gin.Context) {
-
                if c.Request.Method == "OPTIONS" {
                        c.Header("Access-Control-Allow-Origin", "*")
                        c.Header("Access-Control-Allow-Headers", "Content-Type")
-                       c.Header("Access-Control-Allow-Methods", "POST, DELETE, GET, PUT")
-                       c.Header("Content-Type", "application/json")
+                       c.Header("Access-Control-Allow-Methods", "GET, POST, DELETE")
                        c.Header("Access-Control-Max-Age", cookieMaxAge)
                        c.AbortWithStatus(204)
                        return