New file |
| | |
| | | package esutil |
| | | |
| | | import ( |
| | | "bufio" |
| | | "bytes" |
| | | "errors" |
| | | "fmt" |
| | | "github.com/golang/glog" |
| | | "io" |
| | | "io/ioutil" |
| | | "net/http" |
| | | "os" |
| | | "strings" |
| | | "time" |
| | | ) |
| | | |
| | | //启动服务 |
| | | func StartSServer(binPath string) bool { |
| | | resultMsg := CMDSC("sh " + binPath + "/seaweedfs_start.sh") |
| | | if resultMsg == "运行失败" { |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | //关闭服务 |
| | | func StopSServer(binPath string) bool { |
| | | resultMsg := CMDSC("sh " + binPath + "/seaweedfs_stop.sh") |
| | | if resultMsg == "运行失败" { |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | type SWFSInfo struct { |
| | | Ip string |
| | | DefaultReplication string |
| | | Peers []string |
| | | } |
| | | |
| | | //验证服务 |
| | | func VerifyServer(ip string) (bool, error) { |
| | | masterUrl := "http://" + ip + ":6333/ui/index.html" |
| | | volumeUrl := "http://" + ip + ":6700/ui/index.html" |
| | | _, mErr := HttpRC("GET", masterUrl, nil) |
| | | if mErr != nil { |
| | | return false, errors.New("master 启动失败") |
| | | } |
| | | _, vErr := HttpRC("GET", volumeUrl, nil) |
| | | if vErr != nil { |
| | | return false, errors.New("volume 启动失败") |
| | | } |
| | | return true, nil |
| | | |
| | | } |
| | | |
| | | //读取配置文件 |
| | | func GetConfig(configPath string) (SWFSInfo, error) { |
| | | var info SWFSInfo |
| | | cp := configPath + "/seaweedfs_start.sh" |
| | | file, err := os.OpenFile(cp, os.O_RDWR, 0666) |
| | | if err != nil { |
| | | glog.Error("open config file fail, err: ", err) |
| | | return info, err |
| | | } |
| | | defer file.Close() |
| | | |
| | | buf := bufio.NewReader(file) |
| | | peers := make([]string, 0) |
| | | ip := "" |
| | | defaultReplication := "" |
| | | for { |
| | | line, _, c := buf.ReadLine() |
| | | if c == io.EOF { |
| | | break |
| | | } |
| | | if strings.Contains(string(line), "peers=") { |
| | | rt := strings.Split(string(line), "=")[1] |
| | | if len(rt) < 1 { |
| | | continue |
| | | } |
| | | p := strings.Split(rt, ",") |
| | | peers = append(peers, p...) |
| | | } |
| | | if strings.Contains(string(line), "ip=") { |
| | | ip = strings.Split(string(line), "=")[1] |
| | | continue |
| | | } |
| | | if strings.Contains(string(line), "defaultReplication=") { |
| | | defaultReplication = strings.Split(string(line), "=")[1] |
| | | continue |
| | | } |
| | | } |
| | | info.Ip = ip |
| | | info.DefaultReplication = defaultReplication |
| | | info.Peers = peers |
| | | return info, nil |
| | | } |
| | | |
| | | //设置配置文件 |
| | | func SetConfig(configPath string, ip string, peers []string, defaultReplication string) bool { |
| | | cp := configPath + "/seaweedfs_start.sh" |
| | | file, err := os.OpenFile(cp, os.O_RDWR, 0666) |
| | | if err != nil { |
| | | glog.Error("open config file fail, err: ", err) |
| | | return false |
| | | } |
| | | defer file.Close() |
| | | |
| | | buf := bufio.NewReader(file) |
| | | output := make([]byte, 0) |
| | | for { |
| | | line, _, c := buf.ReadLine() |
| | | if c == io.EOF { |
| | | break |
| | | } |
| | | if strings.Contains(string(line), "ip=") { |
| | | newline := "ip=" + ip |
| | | line = []byte(newline) |
| | | } |
| | | if strings.Contains(string(line), "peers=") { |
| | | newline := "peers=" + strings.Replace(strings.Trim(fmt.Sprint(peers), "[]"), " ", ",", -1) |
| | | line = []byte(newline) |
| | | } |
| | | if strings.Contains(string(line), "defaultReplication=") { |
| | | newline := "defaultReplication=" + defaultReplication |
| | | line = []byte(newline) |
| | | } |
| | | output = append(output, line...) |
| | | output = append(output, []byte("\n")...) |
| | | } |
| | | |
| | | if err := writeToFile(cp, output); err != nil { |
| | | glog.Errorf("write config file err: %v", err) |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | func writeToFile(filePath string, outPut []byte) error { |
| | | f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_TRUNC, 0600) |
| | | defer f.Close() |
| | | if err != nil { |
| | | return err |
| | | } |
| | | writer := bufio.NewWriter(f) |
| | | _, err = writer.Write(outPut) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | writer.Flush() |
| | | return nil |
| | | } |
| | | |
| | | func HttpRCT(method string, url string, parama []byte) (buf []byte, err error) { |
| | | timeout := time.Duration(10 * time.Second) |
| | | client := http.Client{ |
| | | Timeout: timeout, |
| | | } |
| | | request, err := http.NewRequest(method, url, bytes.NewBuffer(parama)) |
| | | request.Header.Set("Content-type", "application/json") |
| | | request.Header.Add("x-auth-token", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3ND"+ |
| | | "UwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW"+ |
| | | "9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYW"+ |
| | | "RtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG"+ |
| | | "1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW"+ |
| | | "5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1"+ |
| | | "wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd2"+ |
| | | "5sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbW"+ |
| | | "luTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2"+ |
| | | "R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcIm"+ |
| | | "NvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3Mj"+ |
| | | "pY3SQ7j6AlTXnQDG8") |
| | | |
| | | if err != nil { |
| | | fmt.Println("build request fail !") |
| | | return nil, err |
| | | } |
| | | |
| | | resp, err := client.Do(request) |
| | | if err != nil { |
| | | fmt.Println("request error: ", err) |
| | | return nil, err |
| | | } |
| | | |
| | | defer resp.Body.Close() |
| | | body, err := ioutil.ReadAll(resp.Body) |
| | | if err != nil { |
| | | fmt.Println(err) |
| | | return nil, err |
| | | } |
| | | return body, nil |
| | | } |