|
|
package traffic
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"time"
|
|
|
|
|
|
"github.com/mafanr/juz/misc"
|
|
|
|
|
|
"github.com/mafanr/g"
|
|
|
|
|
|
"github.com/sunface/talent"
|
|
|
"go.uber.org/zap"
|
|
|
)
|
|
|
|
|
|
func (t *Traffic) loadData() {
|
|
|
lastLoadTime = time.Now()
|
|
|
// 加载所有数据
|
|
|
t.loadAll()
|
|
|
|
|
|
// 定时加载最新的信息
|
|
|
go t.loadUpdated()
|
|
|
}
|
|
|
|
|
|
var lastLoadTime time.Time
|
|
|
|
|
|
func (t *Traffic) loadAll() {
|
|
|
// 加载所有strategy
|
|
|
strategies := make([]*misc.Strategy, 0)
|
|
|
err := g.DB.Select(&strategies, "select * from strategy")
|
|
|
if err != nil {
|
|
|
g.L.Fatal("load strategies error!", zap.Error(err))
|
|
|
}
|
|
|
|
|
|
for _, s := range strategies {
|
|
|
if s.Type == misc.STRATEGY_TRAFFIC {
|
|
|
ts := &misc.TrafficStrategy{}
|
|
|
json.Unmarshal([]byte(s.Content), &ts)
|
|
|
t.Strategies.Store(s.ID, ts)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func (t *Traffic) loadUpdated() {
|
|
|
for {
|
|
|
// 为了防止访问时,恰好在更新数据,这里给出2秒的容忍值
|
|
|
lastT := talent.Time2String(lastLoadTime.Add(-2 * time.Second))
|
|
|
lastLoadTime = time.Now()
|
|
|
|
|
|
// 加载策略
|
|
|
|
|
|
strategies := make([]*misc.Strategy, 0)
|
|
|
query := fmt.Sprintf("select * from strategy where modify_date >= '%s'", lastT)
|
|
|
err := g.DB.Select(&strategies, query)
|
|
|
if err != nil {
|
|
|
g.L.Error("load strategies error!", zap.Error(err), zap.String("query", query))
|
|
|
return
|
|
|
}
|
|
|
|
|
|
for _, s := range strategies {
|
|
|
if s.Type == misc.STRATEGY_TRAFFIC {
|
|
|
ts := &misc.TrafficStrategy{}
|
|
|
json.Unmarshal([]byte(s.Content), &ts)
|
|
|
t.Strategies.Store(s.ID, ts)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
time.Sleep(10 * time.Second)
|
|
|
}
|
|
|
}
|