github.com/yasker/longhorn-engine@v0.0.0-20160621014712-6ed6cfca0729/app/sync_agent.go (about) 1 package app 2 3 import ( 4 "fmt" 5 "net/http" 6 "strconv" 7 "strings" 8 9 "github.com/Sirupsen/logrus" 10 "github.com/codegangsta/cli" 11 "github.com/rancher/longhorn/sync/agent" 12 ) 13 14 func SyncAgentCmd() cli.Command { 15 return cli.Command{ 16 Name: "sync-agent", 17 UsageText: "longhorn controller DIRECTORY SIZE", 18 Flags: []cli.Flag{ 19 cli.StringFlag{ 20 Name: "listen", 21 Value: "localhost:9504", 22 }, 23 cli.StringFlag{ 24 Name: "listen-port-range", 25 Value: "9700-9800", 26 }, 27 }, 28 Action: func(c *cli.Context) { 29 if err := startSyncAgent(c); err != nil { 30 logrus.Fatalf("Error running sync-agent command: %v", err) 31 } 32 }, 33 } 34 } 35 36 func startSyncAgent(c *cli.Context) error { 37 listen := c.String("listen") 38 portRange := c.String("listen-port-range") 39 40 parts := strings.Split(portRange, "-") 41 if len(parts) != 2 { 42 return fmt.Errorf("Invalid format for range: %s", portRange) 43 } 44 45 start, err := strconv.Atoi(strings.TrimSpace(parts[0])) 46 if err != nil { 47 return err 48 } 49 50 end, err := strconv.Atoi(strings.TrimSpace(parts[1])) 51 if err != nil { 52 return err 53 } 54 55 server := agent.NewServer(start, end) 56 router := agent.NewRouter(server) 57 logrus.Infof("Listening on sync %s", listen) 58 59 return http.ListenAndServe(listen, router) 60 }