|
@@ -0,0 +1,132 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "mfw/util"
|
|
|
+ qutil "qfw/util"
|
|
|
+ "regexp"
|
|
|
+ "saveServer/tools"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "go.mongodb.org/mongo-driver/bson/primitive"
|
|
|
+)
|
|
|
+
|
|
|
+var (
|
|
|
+ client *util.Client
|
|
|
+ config map[string]interface{}
|
|
|
+ port string
|
|
|
+ mustfield []string
|
|
|
+ field []string
|
|
|
+ jsondatafield []string
|
|
|
+ jsondatacheckfield []string
|
|
|
+ randomreg *regexp.Regexp
|
|
|
+ repeattime int
|
|
|
+
|
|
|
+ Mgo *tools.MongodbSim
|
|
|
+ MgoS *tools.MongodbSim
|
|
|
+ MgoE *tools.MongodbSim
|
|
|
+ CollS string
|
|
|
+ CollE string
|
|
|
+ SaveMgoCache = make(chan map[string]interface{}, 1000) //更新集合
|
|
|
+ SP = make(chan bool, 5)
|
|
|
+)
|
|
|
+
|
|
|
+func InitMgo() {
|
|
|
+ //bidding
|
|
|
+ tools.Mgo = &tools.MongodbSim{
|
|
|
+ MongodbAddr: qutil.ObjToString(config["mongodbServers"]),
|
|
|
+ Size: qutil.IntAll(config["mongodbPoolSize"]),
|
|
|
+ DbName: qutil.ObjToString(config["mongodbName"]),
|
|
|
+ }
|
|
|
+ tools.Mgo.InitPool()
|
|
|
+ //spider
|
|
|
+ spider := config["spider"].(map[string]interface{})
|
|
|
+ qutil.Debug(spider)
|
|
|
+ CollS = qutil.ObjToString(spider["coll"])
|
|
|
+ MgoS = &tools.MongodbSim{
|
|
|
+ MongodbAddr: qutil.ObjToString(spider["addr"]),
|
|
|
+ DbName: qutil.ObjToString(spider["db"]),
|
|
|
+ Size: qutil.IntAll(spider["size"]),
|
|
|
+ }
|
|
|
+ MgoS.InitPool()
|
|
|
+ //editor
|
|
|
+ editor := config["editor"].(map[string]interface{})
|
|
|
+ qutil.Debug(editor)
|
|
|
+ CollE = qutil.ObjToString(editor["coll"])
|
|
|
+ MgoE = &tools.MongodbSim{
|
|
|
+ MongodbAddr: qutil.ObjToString(editor["addr"]),
|
|
|
+ DbName: qutil.ObjToString(editor["db"]),
|
|
|
+ Size: qutil.IntAll(editor["size"]),
|
|
|
+ }
|
|
|
+ MgoE.InitPool()
|
|
|
+}
|
|
|
+
|
|
|
+//保存重复数据
|
|
|
+func SaveRepeat() {
|
|
|
+ defer qutil.Catch()
|
|
|
+ qutil.Debug("Save Repeat Data...")
|
|
|
+ arru := make([]map[string]interface{}, 500)
|
|
|
+ indexu := 0
|
|
|
+ for {
|
|
|
+ select {
|
|
|
+ case v := <-SaveMgoCache:
|
|
|
+ arru[indexu] = v
|
|
|
+ indexu++
|
|
|
+ if indexu == 500 {
|
|
|
+ SP <- true
|
|
|
+ go func(arru []map[string]interface{}) {
|
|
|
+ defer func() {
|
|
|
+ <-SP
|
|
|
+ }()
|
|
|
+ MgoS.SaveBulk(CollS, arru...)
|
|
|
+ }(arru)
|
|
|
+ arru = make([]map[string]interface{}, 500)
|
|
|
+ indexu = 0
|
|
|
+ }
|
|
|
+ case <-time.After(1000 * time.Millisecond):
|
|
|
+ if indexu > 0 {
|
|
|
+ SP <- true
|
|
|
+ go func(arru []map[string]interface{}) {
|
|
|
+ defer func() {
|
|
|
+ <-SP
|
|
|
+ }()
|
|
|
+ MgoS.SaveBulk(CollS, arru...)
|
|
|
+ }(arru[:indexu])
|
|
|
+ arru = make([]map[string]interface{}, 500)
|
|
|
+ indexu = 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//publishtime <=0编辑器建任务
|
|
|
+func NewEditorTask(site, spidercode, href string) {
|
|
|
+ defer qutil.Catch()
|
|
|
+ lua := MgoE.FindOne("luaconfig", map[string]interface{}{"code": spidercode})
|
|
|
+ if len(lua) > 0 {
|
|
|
+ event := qutil.IntAll(lua["event"])
|
|
|
+ modifyuser := qutil.ObjToString(lua["modifyuser"])
|
|
|
+ modifyuserid := qutil.ObjToString(lua["modifyuserid"])
|
|
|
+ param := lua["param_common"].(primitive.A)
|
|
|
+ channel := ""
|
|
|
+ if len(param) >= 3 {
|
|
|
+ channel = qutil.ObjToString(param[2])
|
|
|
+ }
|
|
|
+ task := map[string]interface{}{
|
|
|
+ "s_site": site,
|
|
|
+ "s_channel": channel,
|
|
|
+ "s_code": spidercode,
|
|
|
+ "i_state": 1,
|
|
|
+ "s_modify": modifyuser,
|
|
|
+ "s_modifyid": modifyuserid,
|
|
|
+ "i_urgency": "4",
|
|
|
+ "event": event,
|
|
|
+ "l_comeintime": time.Now().Unix(),
|
|
|
+ "l_complete": time.Now().AddDate(0, 0, 1).Unix(),
|
|
|
+ "s_descript": "发布时间异常,href:" + href,
|
|
|
+ "type": "publishtime_err",
|
|
|
+ }
|
|
|
+ MgoE.Save("task", task)
|
|
|
+ } else {
|
|
|
+ qutil.Debug("Find Lua Error:", spidercode)
|
|
|
+ }
|
|
|
+}
|