| | |
| | | package util |
| | | |
| | | import ( |
| | | "bufio" |
| | | "bytes" |
| | | "errors" |
| | | "fmt" |
| | | "io" |
| | | "io/ioutil" |
| | | "net/http" |
| | | "os" |
| | | "os/exec" |
| | | "strings" |
| | | "time" |
| | | |
| | | "basic.com/valib/logger.git" |
| | | ) |
| | | |
| | | //启动服务 |
| | | func StartServer(binPath string) bool { |
| | | resultMsg := CMDSC("sh " + binPath + "/seaweedfs_start.sh") |
| | | if resultMsg == "运行失败" { |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | //关闭服务 |
| | | func StopServer(binPath string) bool { |
| | | resultMsg := CMDSC("sh " + binPath + "/seaweedfs_stop.sh") |
| | | time.Sleep(time.Second * 11) |
| | | if resultMsg == "运行失败" { |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | //验证服务 |
| | | 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 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 { |
| | | logger.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 { |
| | | logger.Error("write config file err: ", err) |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | //设置配置文件 ip 以及 peer |
| | | func SetConfigByIpAndPeer(configPath string, ip string, peers []string) bool { |
| | | cp := configPath + "/seaweedfs_start.sh" |
| | | file, err := os.OpenFile(cp, os.O_RDWR, 0666) |
| | | if err != nil { |
| | | logger.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) |
| | | } |
| | | output = append(output, line...) |
| | | output = append(output, []byte("\n")...) |
| | | } |
| | | |
| | | if err := writeToFile(cp, output); err != nil { |
| | | logger.Error("write config file err: ", err) |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | //始化存储(删除数据) |
| | | func InitStore(storePath []string) (bool, error) { |
| | | if len(storePath) < 1 { |
| | | return false, errors.New("未指定存储路径") |
| | | } |
| | | for _, p := range storePath { |
| | | logger.Debug(p) |
| | | } |
| | | return true, nil |
| | | } |
| | | |
| | | type SWFSInfo struct { |
| | | Ip string |
| | | DefaultReplication string |
| | | Peers []string |
| | | } |
| | | |
| | | //读取配置文件 |
| | | 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 { |
| | | logger.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 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 CMDSC(scriptStr string) string { |
| | | cmd := exec.Command("sh", "-c", scriptStr) |
| | | var out bytes.Buffer |
| | | cmd.Stdout = &out |
| | | err := cmd.Run() |
| | | if err != nil { |
| | | return "运行失败" |
| | | } |
| | | return out.String() |
| | | } |
| | | |
| | | func HttpRC(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") |
| | | if err != nil { |
| | | logger.Error("build request fail !") |
| | | return nil, err |
| | | } |
| | | |
| | | resp, err := client.Do(request) |
| | | if err != nil { |
| | | logger.Error("request error: ", err) |
| | | return nil, err |
| | | } |
| | | |
| | | defer resp.Body.Close() |
| | | body, err := ioutil.ReadAll(resp.Body) |
| | | if err != nil { |
| | | logger.Error(err) |
| | | return nil, err |
| | | } |
| | | return body, nil |
| | | } |
| | | package util
|
| | |
|
| | | import (
|
| | | "bufio"
|
| | | "bytes"
|
| | | "errors"
|
| | | "fmt"
|
| | | "io"
|
| | | "io/ioutil"
|
| | | "net/http"
|
| | | "os"
|
| | | "os/exec"
|
| | | "strings"
|
| | | "time"
|
| | |
|
| | | "basic.com/valib/logger.git"
|
| | | )
|
| | |
|
| | | //启动服务
|
| | | func StartServer(binPath string) bool {
|
| | | resultMsg := CMDSC("sh " + binPath + "/seaweedfs_start.sh")
|
| | | if resultMsg == "运行失败" {
|
| | | return false
|
| | | }
|
| | | return true
|
| | | }
|
| | |
|
| | | //关闭服务
|
| | | func StopServer(binPath string) bool {
|
| | | resultMsg := CMDSC("sh " + binPath + "/seaweedfs_stop.sh")
|
| | | time.Sleep(time.Second * 11)
|
| | | if resultMsg == "运行失败" {
|
| | | return false
|
| | | }
|
| | | return true
|
| | | }
|
| | |
|
| | | //验证服务
|
| | | 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 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 {
|
| | | logger.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 {
|
| | | logger.Error("write config file err: ", err)
|
| | | return false
|
| | | }
|
| | | return true
|
| | | }
|
| | |
|
| | | //设置配置文件 ip 以及 peer
|
| | | func SetConfigByIpAndPeer(configPath string, ip string, peers []string) bool {
|
| | | cp := configPath + "/seaweedfs_start.sh"
|
| | | file, err := os.OpenFile(cp, os.O_RDWR, 0666)
|
| | | if err != nil {
|
| | | logger.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)
|
| | | }
|
| | | output = append(output, line...)
|
| | | output = append(output, []byte("\n")...)
|
| | | }
|
| | |
|
| | | if err := writeToFile(cp, output); err != nil {
|
| | | logger.Error("write config file err: ", err)
|
| | | return false
|
| | | }
|
| | | return true
|
| | | }
|
| | |
|
| | | //始化存储(删除数据)
|
| | | func InitStore(storePath []string) (bool, error) {
|
| | | if len(storePath) < 1 {
|
| | | return false, errors.New("未指定存储路径")
|
| | | }
|
| | | for _, p := range storePath {
|
| | | logger.Debug(p)
|
| | | }
|
| | | return true, nil
|
| | | }
|
| | |
|
| | | type SWFSInfo struct {
|
| | | Ip string
|
| | | DefaultReplication string
|
| | | Peers []string
|
| | | }
|
| | |
|
| | | //读取配置文件
|
| | | 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 {
|
| | | logger.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 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 CMDSC(scriptStr string) string {
|
| | | cmd := exec.Command("sh", "-c", scriptStr)
|
| | | var out bytes.Buffer
|
| | | cmd.Stdout = &out
|
| | | err := cmd.Run()
|
| | | if err != nil {
|
| | | return "运行失败"
|
| | | }
|
| | | return out.String()
|
| | | }
|
| | |
|
| | | func HttpRC(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")
|
| | | if err != nil {
|
| | | logger.Error("build request fail !")
|
| | | return nil, err
|
| | | }
|
| | |
|
| | | resp, err := client.Do(request)
|
| | | if err != nil {
|
| | | logger.Error("request error: ", err)
|
| | | return nil, err
|
| | | }
|
| | |
|
| | | defer resp.Body.Close()
|
| | | body, err := ioutil.ReadAll(resp.Body)
|
| | | if err != nil {
|
| | | logger.Error(err)
|
| | | return nil, err
|
| | | }
|
| | | return body, nil
|
| | | }
|