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