From 26552269775de6ab02d85f9de93cb80e72b5ddea Mon Sep 17 00:00:00 2001
From: sunty <suntianyu0923@163.com>
Date: 星期四, 01 八月 2019 15:05:17 +0800
Subject: [PATCH] add add enable status control service
---
extend/esutil/EsClient.go | 78 ++++++++++----
service/EnableStatusControlService.go | 150 ++++++++++++++++++++++++++++++
main.go | 28 +++-
3 files changed, 223 insertions(+), 33 deletions(-)
diff --git a/extend/esutil/EsClient.go b/extend/esutil/EsClient.go
index dd8bc3e..e2e8a05 100644
--- a/extend/esutil/EsClient.go
+++ b/extend/esutil/EsClient.go
@@ -107,7 +107,7 @@
}
boundary := writer.Boundary()
close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
- fmt.Println("PostFormData.fileLen:",len(fileBytes))
+ fmt.Println("PostFormData.fileLen:", len(fileBytes))
file := bytes.NewBuffer(fileBytes)
request_reader := io.MultiReader(body, file, close_buf)
@@ -245,31 +245,61 @@
return dat
}
}
+
//瑙f瀽http
func EsReq(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")
+ 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 {
- fmt.Println("build request fail !")
- return nil, err
- }
+ 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
- }
+ 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
-}
\ No newline at end of file
+ defer resp.Body.Close()
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ fmt.Println(err)
+ return nil, err
+ }
+ return body, nil
+}
+
+//瑙f瀽json
+func Sourcelist(buf []byte) (sources []map[string]interface{}, err error) {
+ var info interface{}
+ json.Unmarshal(buf, &info)
+ out, ok := info.(map[string]interface{})
+ if !ok {
+ return nil, errors.New("http response interface can not change map[string]interface{}")
+ }
+
+ middle, ok := out["hits"].(map[string]interface{})
+ if !ok {
+ return nil, errors.New("first hits change error!")
+ }
+ for _, in := range middle["hits"].([]interface{}) {
+ tmpbuf, ok := in.(map[string]interface{})
+ if !ok {
+ fmt.Println("change to source error!")
+ continue
+ }
+ source, ok := tmpbuf["_source"].(map[string]interface{})
+ if !ok {
+ fmt.Println("change _source error!")
+ continue
+ }
+ sources = append(sources, source)
+ }
+ return sources, nil
+}
diff --git a/main.go b/main.go
index 46d64eb..3d00c7a 100644
--- a/main.go
+++ b/main.go
@@ -4,33 +4,36 @@
"basic.com/dbapi.git"
"flag"
"github.com/golang/glog"
+ "github.com/robfig/cron"
"strconv"
"webserver/extend/config"
"webserver/extend/logger"
"webserver/router"
"webserver/service"
)
+
var envirment = flag.String("e", "dev", "")
-var dbIp = flag.String("dbIp","127.0.0.1","default dbIp=127.0.0.1")
-var dbPort = flag.String("dbPort","8001","default dbPort=8001")
-func init(){
+var dbIp = flag.String("dbIp", "127.0.0.1", "default dbIp=127.0.0.1")
+var dbPort = flag.String("dbPort", "8001", "default dbPort=8001")
+
+func init() {
var logFile = "./logger/webserver.log"
- var logSaveDays = 15
+ var logSaveDays = 15
// 鏃ュ織鍒濆鍖�
logger.Config(logFile, logger.DebugLevel)
logger.SetSaveDays(logSaveDays)
logger.Info("loginit success !")
-}
-func main() {
flag.Parse()
service.InitService()
p, err := strconv.Atoi(*dbPort)
- if err !=nil {
+ if err != nil {
p = 8001
}
- dbapi.Init(*dbIp,p)
+ //*dbIp = "192.168.1.123"
+ //*dbIp = "192.168.1.182"
+ dbapi.Init(*dbIp, p)
flag.Usage = func() {
glog.Exit("flag parse usage !")
@@ -39,8 +42,15 @@
flag.Lookup("alsologtostderr").Value.Set("true")
flag.Lookup("log_dir").Value.Set("./log")
config.Init(*envirment)
+}
+func main() {
+ c := cron.New()
+ c.AddFunc("@ daily", func() {
+ res := service.InitEnableStatus()
+ logger.Debug(res)
+ })
+ c.Start()
r := router.NewRouter()
-
r.Run("0.0.0.0:8000")
//defer new(gorun.SimpleFaceDetect).FaceDetactClose()
diff --git a/service/EnableStatusControlService.go b/service/EnableStatusControlService.go
new file mode 100644
index 0000000..a7dae12
--- /dev/null
+++ b/service/EnableStatusControlService.go
@@ -0,0 +1,150 @@
+package service
+
+import (
+ "basic.com/dbapi.git"
+ "encoding/json"
+ "fmt"
+ "strconv"
+ "strings"
+ "time"
+ "webserver/extend/config"
+ "webserver/extend/esutil"
+ "webserver/extend/logger"
+)
+
+func GetVerificationData() []map[string]interface{} {
+ url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
+ "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/_search"
+ var setApi dbapi.SysSetApi
+ _, sysconf := setApi.GetServerInfo()
+ jsonDsl := `{
+ "query": {
+ "bool": {
+ "filter": [{
+ "term": {
+ "isDelete": "0"
+ }
+ },
+ {
+ "terms": {
+ "analyServerId": ["` + sysconf.ServerId + `",""]
+ }
+ }
+ ]
+ }
+ },
+ "size": 10000
+}
+`
+ buf, err := esutil.EsReq("POST", url, []byte(jsonDsl))
+ if err != nil {
+ logger.Debug(err)
+ }
+
+ sources, err := esutil.Sourcelist(buf)
+ if err != nil {
+ logger.Debug(err)
+ }
+ return sources
+}
+
+func VerificationTime(source []map[string]interface{}) map[string][]string {
+ resultInfo := make(map[string][]string, 0)
+ currentTime := time.Now()
+ for _, v := range source {
+ id := v["id"].(string)
+ startTime := v["startTime"].(string)
+ endTime := ""
+ if v["endTime"] != nil {
+ endTime = v["endTime"].(string)
+ }
+ st, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local)
+ if endTime != "" {
+ et, _ := time.ParseInLocation("2006-01-02 15:04:05", endTime, time.Local)
+ if et.After(currentTime) && st.Before(currentTime) {
+ resultInfo["effective"] = append(resultInfo["effective"], id)
+ } else {
+ resultInfo["invalid"] = append(resultInfo["invalid"], id)
+ }
+ } else if st.Before(currentTime) && endTime == "" {
+ resultInfo["effective"] = append(resultInfo["effective"], id)
+ } else {
+ resultInfo["invalid"] = append(resultInfo["invalid"], id)
+ }
+ }
+ //fmt.Println(resultInfo)
+ return resultInfo
+}
+
+func UpdateEnableStatus(id []string, flag bool) (message string) {
+ ids := strings.Replace(strings.Trim(fmt.Sprint(id), "[]"), " ", "\",\"", -1)
+ status := 0
+ if flag == true {
+ status = 1
+ }
+ enable := strconv.Itoa(status)
+ url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
+ "/" + config.EsInfo.EsIndex.DbTables.IndexName + "/_update_by_query?refresh"
+ jsonDsl := `
+ {
+ "script": {
+ "lang": "painless",
+ "inline": "ctx._source.enable = ` + enable + `"
+ },
+ "query": {
+ "terms": {
+ "id": ["` + ids + `"]
+ }
+ }
+}
+`
+ buf, err := esutil.EsReq("POST", url, []byte(jsonDsl))
+ if err != nil {
+ logger.Debug("http request info is err!")
+ message = "淇敼澶辫触"
+ }
+ var info interface{}
+ json.Unmarshal(buf, &info)
+ out, ok := info.(map[string]interface{})
+ if !ok {
+ logger.Debug("http response interface can not change map[string]interface{}")
+ message = "淇敼澶辫触"
+ }
+ middle, ok := out["updated"].(float64)
+ if !ok {
+ logger.Debug("first result change error!")
+ message = "淇敼澶辫触"
+ }
+ if middle > 0 {
+ logger.Debug("淇敼鎴愬姛")
+ message = "淇敼鎴愬姛"
+ }
+ return message
+}
+
+func InitEnableStatus() (messageInfo string) {
+ verificationData := GetVerificationData()
+ verificationTime := VerificationTime(verificationData)
+ idOfEffective := verificationTime["effective"]
+ idOfinvalid := verificationTime["invalid"]
+ mesInfo := false
+ effectiveMesInfo := ""
+ invalidMesInfo := ""
+ if len(idOfEffective) > 0 {
+ effectiveMesInfo = UpdateEnableStatus(idOfEffective, true)
+ } else {
+ effectiveMesInfo = "淇敼鎴愬姛"
+ }
+ if len(idOfinvalid) > 0 {
+ invalidMesInfo = UpdateEnableStatus(idOfinvalid, false)
+ } else {
+ invalidMesInfo = "淇敼鎴愬姛"
+ }
+ if effectiveMesInfo == "淇敼鎴愬姛" && invalidMesInfo == "淇敼鎴愬姛" {
+ mesInfo = true
+ }
+ if mesInfo == true {
+ messageInfo = "淇敼鎴愬姛"
+ }
+ return messageInfo
+}
--
Gitblit v1.8.0