|
@@ -6,8 +6,10 @@ import (
|
|
|
"log"
|
|
|
. "model"
|
|
|
qu "qfw/util"
|
|
|
-
|
|
|
"sync"
|
|
|
+ "sync/atomic"
|
|
|
+
|
|
|
+ //"sync"
|
|
|
"time"
|
|
|
|
|
|
"github.com/cron"
|
|
@@ -25,15 +27,15 @@ type Customer struct {
|
|
|
}
|
|
|
|
|
|
func TimeTask() {
|
|
|
- //InitCustomer()
|
|
|
+ go StartTask()
|
|
|
c := cron.New()
|
|
|
cronstr := "0 */" + fmt.Sprint(TaskTime) + " * * * ?"
|
|
|
//cronstr := "0 0 */" + fmt.Sprint(TaskTime) + " * * ?"//每TaskTime小时执行一次
|
|
|
qu.Debug("cronstr:", cronstr)
|
|
|
- c.AddFunc(cronstr, func() { Start() })
|
|
|
+ //c.AddFunc(cronstr, func() { StartTask() })
|
|
|
c.Start()
|
|
|
}
|
|
|
-func Start() {
|
|
|
+func StartTask() {
|
|
|
InitCustomer()
|
|
|
GetCustomerData()
|
|
|
}
|
|
@@ -43,54 +45,19 @@ func InitCustomer() {
|
|
|
qu.Debug("Init Customer...")
|
|
|
tmpRange := GetIdRange() //获取id区间
|
|
|
qu.Debug(tmpRange)
|
|
|
- return
|
|
|
customers, _ := MgoTag.Find("customer", map[string]interface{}{"i_use": 1}, nil, nil)
|
|
|
for _, c := range customers {
|
|
|
- csr := &Customer{}
|
|
|
- esArr := []string{}
|
|
|
customer := qu.ObjToString(c["s_customername"])
|
|
|
- tags, _ := MgoTag.Find("tags", map[string]interface{}{"s_customer": customer}, nil, map[string]interface{}{"s_esquery": 1})
|
|
|
- for _, t := range tags {
|
|
|
- esquery := qu.ObjToString(t["s_esquery"])
|
|
|
- query := map[string]*QueryObjecct{}
|
|
|
- if json.Unmarshal([]byte(esquery), &query) == nil {
|
|
|
- qb := query["query"]
|
|
|
- filter := qb.Filtered.Filter
|
|
|
- if filter != nil && filter.Bool != nil { //有filter
|
|
|
- index := 0 //记录range的位置
|
|
|
- for i, m := range filter.Bool.Must {
|
|
|
- mMap := m.(map[string]interface{})
|
|
|
- if mMap["range"] != nil { //有range
|
|
|
- index = i
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
- if index != 0 {
|
|
|
- filter.Bool.Must[index] = tmpRange
|
|
|
- } else {
|
|
|
- filter.Bool.Must = append(filter.Bool.Must, tmpRange)
|
|
|
- }
|
|
|
- } else { //无filter则添加
|
|
|
- bo := &BoolObject{}
|
|
|
- bo.Must = append(bo.Must, tmpRange)
|
|
|
- tmpFilter := &Filter{
|
|
|
- Bool: bo,
|
|
|
- }
|
|
|
- qb.Filtered.Filter = tmpFilter
|
|
|
- }
|
|
|
- strquery, _ := json.Marshal(query)
|
|
|
- qu.Debug("strquery---", string(strquery))
|
|
|
- esArr = append(esArr, string(strquery))
|
|
|
- }
|
|
|
- }
|
|
|
+ esArr := GetCustomerEs(customer, tmpRange)
|
|
|
if len(esArr) > 0 {
|
|
|
+ csr := &Customer{}
|
|
|
csr.EsQuery = esArr
|
|
|
CustomerArr = append(CustomerArr, csr)
|
|
|
}
|
|
|
}
|
|
|
- qu.Debug(len(CustomerArr))
|
|
|
}
|
|
|
|
|
|
+//获取数据
|
|
|
func GetCustomerData() {
|
|
|
for _, customer := range CustomerArr {
|
|
|
customer.GetData()
|
|
@@ -136,7 +103,6 @@ func (c *Customer) GetData() {
|
|
|
}
|
|
|
break
|
|
|
}
|
|
|
-
|
|
|
for _, hit := range searchResult.Hits.Hits {
|
|
|
//开始处理数据
|
|
|
wg.Add(1)
|
|
@@ -148,23 +114,64 @@ func (c *Customer) GetData() {
|
|
|
}()
|
|
|
tmp := make(map[string]interface{})
|
|
|
if json.Unmarshal(*tmpHit.Source, &tmp) == nil {
|
|
|
- numTags++
|
|
|
+ atomic.AddInt64(&numTags, 1)
|
|
|
}
|
|
|
}(hit)
|
|
|
- wg.Wait()
|
|
|
numDocs += 1
|
|
|
if numDocs%500 == 0 {
|
|
|
- //log.Println("Current:", numDocs)
|
|
|
+ log.Println("Current:", numDocs)
|
|
|
}
|
|
|
}
|
|
|
scrollId = searchResult.ScrollId
|
|
|
}
|
|
|
+ wg.Wait()
|
|
|
client.ClearScroll().ScrollId(scrollId).Do() //清理游标
|
|
|
+ log.Println("Result Data Count:", numDocs)
|
|
|
log.Println("Result Data Count:", numDocs, " Tags Data Count:", numTags)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//获取用户所有es
|
|
|
+func GetCustomerEs(customer string, tmpRange bson.M) (esArr []string) {
|
|
|
+ tags, _ := MgoTag.Find("tags", map[string]interface{}{"s_customer": customer}, nil, map[string]interface{}{"s_esquery": 1})
|
|
|
+ for _, t := range tags {
|
|
|
+ esquery := qu.ObjToString(t["s_esquery"])
|
|
|
+ query := map[string]*QueryObjecct{}
|
|
|
+ if json.Unmarshal([]byte(esquery), &query) == nil {
|
|
|
+ qb := query["query"]
|
|
|
+ filter := qb.Filtered.Filter
|
|
|
+ if filter != nil && filter.Bool != nil { //有filter
|
|
|
+ index := 0 //记录range的位置
|
|
|
+ for i, m := range filter.Bool.Must {
|
|
|
+ mMap := m.(map[string]interface{})
|
|
|
+ if mMap["range"] != nil { //有range
|
|
|
+ index = i
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if index != 0 {
|
|
|
+ filter.Bool.Must[index] = tmpRange
|
|
|
+ } else {
|
|
|
+ filter.Bool.Must = append(filter.Bool.Must, tmpRange)
|
|
|
+ }
|
|
|
+ } else { //无filter则添加
|
|
|
+ bo := &BoolObject{}
|
|
|
+ bo.Must = append(bo.Must, tmpRange)
|
|
|
+ tmpFilter := &Filter{
|
|
|
+ Bool: bo,
|
|
|
+ }
|
|
|
+ qb.Filtered.Filter = tmpFilter
|
|
|
+ }
|
|
|
+ strquery, _ := json.Marshal(query)
|
|
|
+ esArr = append(esArr, string(strquery))
|
|
|
+ } else {
|
|
|
+ log.Println(customer, "Es Error")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
//根据时间获取起始和终止ID范围
|
|
|
func GetIdRange() bson.M {
|
|
|
now := time.Now()
|
|
@@ -174,8 +181,8 @@ func GetIdRange() bson.M {
|
|
|
startTime := time.Unix(start, 0)
|
|
|
eid := bson.NewObjectIdWithTime(endTime).Hex()
|
|
|
sid := bson.NewObjectIdWithTime(startTime).Hex()
|
|
|
- // sid = "5cf14f800000000000000000"
|
|
|
- // eid = "5ed3d4800000000000000000"
|
|
|
+ sid = "5cf14f800000000000000000"
|
|
|
+ eid = "5ed3d4800000000000000000"
|
|
|
tmpRange := bson.M{
|
|
|
"range": bson.M{
|
|
|
"id": bson.M{
|