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  }