Use go module as dependency tool instead of glide
[src/xds/xds-agent.git] / lib / agent / agent.go
index 29b0622..506976d 100644 (file)
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2017-2018 "IoT.bzh"
+ * Author Sebastien Douheret <sebastien@iot.bzh>
+ *
+ * Licensed 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 agent
 
 import (
@@ -10,25 +27,29 @@ import (
        "syscall"
        "time"
 
+       st "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/syncthing"
+
+       "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/xdsconfig"
        "github.com/Sirupsen/logrus"
-       "github.com/codegangsta/cli"
-       "github.com/iotbzh/xds-agent/lib/syncthing"
-       "github.com/iotbzh/xds-agent/lib/xdsconfig"
+       "github.com/urfave/cli"
 )
 
 const cookieMaxAge = "3600"
 
 // Context holds the Agent context structure
 type Context struct {
-       ProgName    string
-       Config      *xdsconfig.Config
-       Log         *logrus.Logger
-       SThg        *st.SyncThing
-       SThgCmd     *exec.Cmd
-       SThgInotCmd *exec.Cmd
+       ProgName      string
+       Config        *xdsconfig.Config
+       Log           *logrus.Logger
+       LogLevelSilly bool
+       LogSillyf     func(format string, args ...interface{})
+       SThg          *st.SyncThing
+       SThgCmd       *exec.Cmd
+       SThgInotCmd   *exec.Cmd
 
        webServer     *WebServer
-       xdsServers map[string]*XdsServer
+       xdsServers    map[string]*XdsServer
+       XdsSupervisor *XdsSupervisor
        sessions      *Sessions
        events        *Events
        projects      *Projects
@@ -53,15 +74,26 @@ func NewAgent(cliCtx *cli.Context) *Context {
        }
        log.Formatter = &logrus.TextFormatter{}
 
+       // Support silly logging (printed on log.debug)
+       sillyVal, sillyLog := os.LookupEnv("XDS_LOG_SILLY")
+       logSilly := sillyLog && sillyVal == "1"
+       sillyFunc := func(format string, args ...interface{}) {
+               if logSilly {
+                       log.Debugf("SILLY: "+format, args...)
+               }
+       }
+
        // Define default configuration
        ctx := Context{
-               ProgName: cliCtx.App.Name,
-               Log:      log,
-               Exit:     make(chan os.Signal, 1),
+               ProgName:      cliCtx.App.Name,
+               Log:           log,
+               LogLevelSilly: logSilly,
+               LogSillyf:     sillyFunc,
+               Exit:          make(chan os.Signal, 1),
 
-               webServer:     nil,
+               webServer:  nil,
                xdsServers: make(map[string]*XdsServer),
-               events:        nil,
+               events:     nil,
        }
 
        // register handler on SIGTERM / exit
@@ -102,7 +134,10 @@ func (ctx *Context) Run() (int, error) {
                ctx._logPrint("Logging file for HTTP requests: %s\n", logFileHTTPReq)
        }
 
-       // Create syncthing instance when section "syncthing" is present in config.json
+       // Create events management
+       ctx.events = NewEvents(ctx)
+
+       // Create syncthing instance when section "syncthing" is present in agent-config.json
        if ctx.Config.FileConf.SThgConf != nil {
                ctx.SThg = st.NewSyncThing(ctx.Config, ctx.Log)
        }
@@ -156,9 +191,6 @@ func (ctx *Context) Run() (int, error) {
        // Sessions manager
        ctx.sessions = NewClientSessions(ctx, cookieMaxAge)
 
-       // Create events management
-       ctx.events = NewEvents(ctx)
-
        // Create projects management
        ctx.projects = NewProjects(ctx, ctx.SThg)