From cb510e065017f1b4617ad04dc810d03f7d9199a1 Mon Sep 17 00:00:00 2001 From: pengtao Date: Fri, 16 Oct 2020 19:08:50 +0800 Subject: [PATCH] client func --- client/client.go | 138 ++++++++++++++++++++++++++++++++++++++++ cmd/config/clientCfg.go | 31 +++++++++ cmd/httpclient/data.go | 20 ++++++ cmd/mmysql/data.go | 32 ++++++++++ config/client.ini | 4 ++ server/server.go | 23 +++---- 6 files changed, 233 insertions(+), 15 deletions(-) create mode 100644 client/client.go create mode 100644 cmd/config/clientCfg.go create mode 100644 cmd/httpclient/data.go create mode 100644 cmd/mmysql/data.go create mode 100644 config/client.ini diff --git a/client/client.go b/client/client.go new file mode 100644 index 0000000..9820376 --- /dev/null +++ b/client/client.go @@ -0,0 +1,138 @@ +package main + +import ( + "../cmd/httpclient" + "encoding/json" + "fmt" + "github.com/Unknwon/goconfig" + "github.com/fatih/structs" + "io/ioutil" + "log" + "net" + "net/http" + "os" + "time" +) + +func init() { + // +} + +func getLocalIp() string { + addrs, err := net.InterfaceAddrs() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + for _, address := range addrs { + // 检查ip地址判断是否回环地址 + if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if ipnet.IP.To4() != nil { + //fmt.Println(ipnet.IP.String()) + return ipnet.IP.String() + } + } + } + return "" +} + +func checkUrl(list *httpclient.List) *httpclient.Status { + var s httpclient.Status + s.Area = list.Area + s.Id = list.Id + s.Ip = getLocalIp() + t1 := time.Now() + _, err := http.Get(list.Url) + if err != nil { + s.Status = false + fmt.Println(list.Url, err) + } else { + s.Status = true + } + + //defer resp.Body.Close() + + elapsed := time.Since(t1) + elapsedNan := elapsed.String() + s.Cost = elapsedNan + //s.Cost = strconv.FormatInt(int64(elapsedNan),10) + return &s +} + +func main() { + var cfg *goconfig.ConfigFile + cpath, _ := os.Getwd() + config, err := goconfig.LoadConfigFile(cpath + "/config/client.ini") //加载配置文件 + if err != nil { + log.Println("get config file error") + os.Exit(-1) + } + cfg = config + client, _ := cfg.GetSection("client") + u, _ := client["get_list_url"] + a, _ := client["area"] + + //get list via get + resp, err := http.Get(u + a) + if err != nil { + fmt.Println(err) + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + fmt.Println(err) + } + + var dat []httpclient.List + err = json.Unmarshal(body, &dat) + var vv []*httpclient.Status + + if err != nil { + fmt.Println("error", err) + } else { + for _, v := range dat { + ss := checkUrl(&v) + vv = append(vv, ss) + } + } + + if vv != nil { + fmt.Printf("%+v", vv) + //postUrl := client["post_list_url"] + data := structs.Map(vv) + fmt.Println(data) + //bb := url.Values{data} + // + //body := strings.NewReader(bb.Encode()) + //clt := http.Client{} + //resp, err := clt.Post(postUrl, "application/x-www-form-urlencoded", body) + //if err != nil { + // fmt.Println(err) + //} else { + // fmt.Println(resp) + //} + //b, err := json.Marshal(vv) + //if err != nil { + //log.Println("json format error:", err) + //return + //} + // + // body := bytes.NewBuffer(b) + // resp, err := http.Post(postUrl, contentType, body) + // if err != nil { + // log.Println("Post failed:", err) + // return + //} + // + // defer resp.Body.Close() + // + // content, err := ioutil.ReadAll(resp.Body) + // if err != nil { + // log.Println("Read failed:", err) + // return + //} + // + // log.Println("content:", string(content)) + //} + } +} diff --git a/cmd/config/clientCfg.go b/cmd/config/clientCfg.go new file mode 100644 index 0000000..5069dc3 --- /dev/null +++ b/cmd/config/clientCfg.go @@ -0,0 +1,31 @@ +package config + +import ( + "fmt" + "github.com/Unknwon/goconfig" + "log" + "os" +) + +type ClientCfg struct { + Area string + GetListUrl string + PostStatusUrl string +} + +func (c *ClientCfg) GetCfg() { + var cfg *goconfig.ConfigFile + cpath, _ := os.Getwd() + config, err := goconfig.LoadConfigFile(cpath + "/config/client.ini") //加载配置文件 + if err != nil { + log.Println("get config file error") + os.Exit(-1) + } + cfg = config + + client, _ := cfg.GetSection("client") + cc, _ := client["get_list_url"] + fmt.Print(cc) + c.PostStatusUrl, _ = client["post_list_url"] + c.Area, _ = client["area"] +} diff --git a/cmd/httpclient/data.go b/cmd/httpclient/data.go new file mode 100644 index 0000000..90fef9c --- /dev/null +++ b/cmd/httpclient/data.go @@ -0,0 +1,20 @@ +package httpclient + +type List struct { + Id int32 `json:"id"` + Name string `json:"name"` + Host string `json:"host"` + Area string `json:"area"` + Port int32 `json:"port"` + Url string `json:"url"` + User string `json:"user"` + Sendto string `json:"sendto"` +} + +type Status struct { + Id int32 `json:"id"` + Cost string `json:"cost"` + Status bool `json:"status"` + Ip string `json:"ip"` + Area string `json:"area"` +} diff --git a/cmd/mmysql/data.go b/cmd/mmysql/data.go new file mode 100644 index 0000000..82fc5ae --- /dev/null +++ b/cmd/mmysql/data.go @@ -0,0 +1,32 @@ +package mmysql + +import "fmt" + +type Ilist interface { + GetList(area string) ([]*List, error) +} +type List struct { + Id int32 `json:"id"` + Name string `json:"name"` + Host string `json:"host"` + Area string `json:"area"` + Port int32 `json:"port"` + Url string `json:"url"` + User string `json:"user"` + Sendto string `json:"sendto"` +} + +func NewList() *List { + var list *List + return list +} +func (s *List) GetList(area string) ([]*List, error) { + var vv []*List + vv = append(vv, NewList()) + return vv, nil +} + +func test_main() { + fmt.Print("test run!") + +} diff --git a/config/client.ini b/config/client.ini new file mode 100644 index 0000000..cc961d1 --- /dev/null +++ b/config/client.ini @@ -0,0 +1,4 @@ +[client] +get_list_url=http://127.0.0.1:8000/servicelist?area= +post_list_url=http://127.0.0.1:8000/servicestatus +area=bj \ No newline at end of file diff --git a/server/server.go b/server/server.go index 6333cc2..ba93e39 100644 --- a/server/server.go +++ b/server/server.go @@ -18,14 +18,6 @@ var format = logging.MustStringFormatter( ) func init() { - //errFile, err := os.OpenFile("errors.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) - //if err != nil { - // panic(err) - //} - //defer errFile.Close() - //log.SetFlags(log.Ldate|log.Lshortfile) - //log.SetOutput(io.MultiWriter(os.Stdout, errFile)) - ////log := log.New(io.MultiWriter(os.Stderr, errFile), "前缀", log.Ldate|log.Ltime|log.Lshortfile) logFile, err := os.OpenFile("errors.log", os.O_WRONLY, 0666) if err != nil { @@ -48,7 +40,7 @@ func main() { router := gin.Default() router.GET("/healcheck", func(c *gin.Context) { - // 方法二:使用结构体 + // 使用结构体 var msg struct { Name string `json:"user"` Message string @@ -65,12 +57,13 @@ func main() { if err != nil { log.Error(err) } - jsons, errs := json.Marshal(vv) - log.Info(string(jsons)) - if errs != nil { - log.Error(errs.Error()) - } - c.JSON(http.StatusOK, string(jsons)) + //jsons, errs := json.Marshal(vv) + //log.Info(string(jsons)) + //if errs != nil { + // log.Error(errs.Error()) + //} + //body := bytes.NewBuffer(jsons) + c.JSON(http.StatusOK, vv) })