Redirect HTTP and Gin server logs into a file (xds-server-verbose.log).
[src/xds/xds-server.git] / lib / syncthing / st.go
index 3380cda..b622970 100644 (file)
@@ -32,6 +32,7 @@ type SyncThing struct {
        Home    string
        STCmd   *exec.Cmd
        STICmd  *exec.Cmd
+       MyID    string
 
        // Private fields
        binDir      string
@@ -41,6 +42,7 @@ type SyncThing struct {
        conf        *xdsconfig.Config
        client      *common.HTTPClient
        log         *logrus.Logger
+       Events      *Events
 }
 
 // ExitChan Channel used for process exit
@@ -125,6 +127,9 @@ func NewSyncThing(conf *xdsconfig.Config, log *logrus.Logger) *SyncThing {
                conf:    conf,
        }
 
+       // Create Events monitoring
+       s.Events = s.NewEventListener()
+
        return &s
 }
 
@@ -211,13 +216,13 @@ func (s *SyncThing) Start() (*exec.Cmd, error) {
        env := []string{
                "STNODEFAULTFOLDER=1",
                "STNOUPGRADE=1",
-               "STNORESTART=1",
+               "STNORESTART=1", // FIXME SEB remove ?
        }
 
        s.STCmd, err = s.startProc("syncthing", args, env, &s.exitSTChan)
 
        // Use autogenerated apikey if not set by config.json
-       if s.APIKey == "" {
+       if err == nil && s.APIKey == "" {
                if fd, err := os.Open(filepath.Join(s.Home, "config.xml")); err == nil {
                        defer fd.Close()
                        if b, err := ioutil.ReadAll(fd); err == nil {
@@ -312,9 +317,20 @@ func (s *SyncThing) Connect() error {
                return fmt.Errorf("ERROR: cannot connect to Syncthing (null client)")
        }
 
-       s.client.SetLogger(s.log)
+       // Redirect HTTP log into a file
+       s.client.SetLogLevel(s.conf.Log.Level.String())
+       s.client.LoggerPrefix = "SYNCTHING: "
+       s.client.LoggerOut = s.conf.LogVerboseOut
+
+       s.MyID, err = s.IDGet()
+       if err != nil {
+               return fmt.Errorf("ERROR: cannot retrieve ID")
+       }
+
+       // Start events monitoring
+       err = s.Events.Start()
 
-       return nil
+       return err
 }
 
 // IDGet returns the Syncthing ID of Syncthing instance running locally
@@ -360,44 +376,3 @@ func (s *SyncThing) IsConfigInSync() (bool, error) {
        }
        return d.ConfigInSync, nil
 }
-
-// FolderStatus Returns all information about the current
-func (s *SyncThing) FolderStatus(folderID string) (*FolderStatus, error) {
-       var data []byte
-       var res FolderStatus
-       if folderID == "" {
-               return nil, fmt.Errorf("folderID not set")
-       }
-       if err := s.client.HTTPGet("db/status?folder="+folderID, &data); err != nil {
-               return nil, err
-       }
-       if err := json.Unmarshal(data, &res); err != nil {
-               return nil, err
-       }
-       return &res, nil
-}
-
-// IsFolderInSync Returns true when folder is in sync
-func (s *SyncThing) IsFolderInSync(folderID string) (bool, error) {
-       // FIXME better to detected FolderCompletion event (/rest/events)
-       // See https://docs.syncthing.net/dev/events.html
-       sts, err := s.FolderStatus(folderID)
-       if err != nil {
-               return false, err
-       }
-       return sts.NeedBytes == 0, nil
-}
-
-// FolderScan Request immediate folder scan.
-// Scan all folders if folderID param is empty
-func (s *SyncThing) FolderScan(folderID string, subpath string) error {
-       url := "db/scan"
-       if folderID != "" {
-               url += "?folder=" + folderID
-
-               if subpath != "" {
-                       url += "&sub=" + subpath
-               }
-       }
-       return s.client.HTTPPost(url, "")
-}