Update .gitreview file
[src/xds/xds-agent.git] / main.go
diff --git a/main.go b/main.go
index 32083bb..8a20894 100644 (file)
--- a/main.go
+++ b/main.go
@@ -1,25 +1,38 @@
-// TODO add Doc
-//
+/*
+ * Copyright (C) 2017-2019 "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.
+ *
+ *
+ * xds-agent: X(cross) Development System client running on developer/local host.
+ */
+
 package main
 
 import (
-       "fmt"
-       "log"
        "os"
-       "time"
 
+       "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/agent"
+       "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/agent"
-       "github.com/iotbzh/xds-agent/lib/syncthing"
-       "github.com/iotbzh/xds-agent/lib/webserver"
-       "github.com/iotbzh/xds-agent/lib/xdsconfig"
+       "github.com/urfave/cli"
 )
 
 const (
        appName        = "xds-agent"
        appDescription = "X(cross) Development System Agent is a web server that allows to remotely cross build applications."
-       appCopyright   = "Apache-2.0"
+       appCopyright   = "Copyright (C) 2017-2019 IoT.bzh - Apache-2.0"
        appUsage       = "X(cross) Development System Agent"
 )
 
@@ -39,62 +52,18 @@ func xdsAgent(cliCtx *cli.Context) error {
        var err error
 
        // Create Agent context
-       ctx := agent.NewAgent(cliCtx)
+       ctxAgent := agent.NewAgent(cliCtx)
 
        // Load config
-       ctx.Config, err = xdsconfig.Init(cliCtx, ctx.Log)
-       if err != nil {
-               return cli.NewExitError(err, 2)
-       }
-
-       // Start local instance of Syncthing and Syncthing-notify
-       ctx.SThg = st.NewSyncThing(ctx.Config, ctx.Log)
-
-       ctx.Log.Infof("Starting Syncthing...")
-       ctx.SThgCmd, err = ctx.SThg.Start()
-       if err != nil {
-               return cli.NewExitError(err, 2)
-       }
-       fmt.Printf("Syncthing started (PID %d)\n", ctx.SThgCmd.Process.Pid)
-
-       ctx.Log.Infof("Starting Syncthing-inotify...")
-       ctx.SThgInotCmd, err = ctx.SThg.StartInotify()
+       ctxAgent.Config, err = xdsconfig.Init(cliCtx, ctxAgent.Log)
        if err != nil {
                return cli.NewExitError(err, 2)
        }
-       fmt.Printf("Syncthing-inotify started (PID %d)\n", ctx.SThgInotCmd.Process.Pid)
-
-       // Establish connection with local Syncthing (retry if connection fail)
-       time.Sleep(3 * time.Second)
-       maxRetry := 30
-       retry := maxRetry
-       for retry > 0 {
-               if err := ctx.SThg.Connect(); err == nil {
-                       break
-               }
-               ctx.Log.Infof("Establishing connection to Syncthing (retry %d/%d)", retry, maxRetry)
-               time.Sleep(time.Second)
-               retry--
-       }
-       if err != nil || retry == 0 {
-               return cli.NewExitError(err, 2)
-       }
-
-       // Retrieve Syncthing config
-       id, err := ctx.SThg.IDGet()
-       if err != nil {
-               return cli.NewExitError(err, 2)
-       }
-       ctx.Log.Infof("Local Syncthing ID: %s", id)
 
-       // Create and start Web Server
-       ctx.WWWServer = webserver.New(ctx.Config, ctx.Log)
-       if err = ctx.WWWServer.Serve(); err != nil {
-               log.Println(err)
-               return cli.NewExitError(err, 3)
-       }
+       // Run Agent (main loop)
+       errCode, err := ctxAgent.Run()
 
-       return cli.NewExitError("Program exited ", 4)
+       return cli.NewExitError(err, errCode)
 }
 
 // main
@@ -126,7 +95,13 @@ func main() {
                        Name:   "log, l",
                        Value:  "error",
                        Usage:  "logging level (supported levels: panic, fatal, error, warn, info, debug)\n\t",
-                       EnvVar: "LOG_LEVEL",
+                       EnvVar: "XDS_LOGLEVEL",
+               },
+               cli.StringFlag{
+                       Name:   "logfile",
+                       Value:  "stdout",
+                       Usage:  "filename where logs will be redirected (default stdout)\n\t",
+                       EnvVar: "XDS_LOGFILE",
                },
        }