report.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  1. package timetask
  2. import (
  3. "bytes"
  4. "fmt"
  5. "github.com/tealeg/xlsx"
  6. qu "qfw/util"
  7. gm "qfw/util/mail"
  8. "strconv"
  9. "sync"
  10. "time"
  11. "util"
  12. )
  13. const Compete_YBW = "元博网(采购与招标网)"
  14. const Compete_ZGZBYCGW = "中国招标与采购网"
  15. func SpiderWeeklyReport() {
  16. defer qu.Catch()
  17. eTime := util.GetTime(0)
  18. sTime := util.GetTime(-7)
  19. qu.Debug(sTime, eTime)
  20. //上周统计信息
  21. LastWeekAddTaskAllNum, //上周新建任务数
  22. LastWeekAddLuaNum, //lua上周新增爬虫数
  23. LastWeekAddEffectTaskNum, //上周新增有效任务数
  24. LastWeekAddPythonNum, //python上周新增爬虫数
  25. LastWeekCheckTaskNum, //上周核实任务数
  26. LastWeekFinishLuaNum, //lua上周完成爬虫数
  27. LastWeekFinishEffectTaskNum, //上周完成有效任务数
  28. LastWeekFinishPythonNum, //python上周完成爬虫数
  29. LastWeekCodeAllNum, //现有爬虫数量
  30. LastWeekSiteAllNum, //现有站点数量
  31. LastWeekMgoNum, //上周mgo数量
  32. LastWeekEsNum, //上周es数量
  33. LastWeekCompeteMgoNum, //上周竞品采集mgo数量
  34. LastWeekCompeteEsNum := GetLastWeekReport() //上周竞品采集es数量
  35. //1、任务相关
  36. //上周新建任务数量
  37. qu.Debug("上周新建任务数量:", LastWeekAddTaskAllNum)
  38. //本周新建任务数量
  39. query := map[string]interface{}{
  40. "l_comeintime": map[string]interface{}{
  41. "$gte": sTime,
  42. "$lt": eTime,
  43. },
  44. }
  45. ThisWeekAddTaskNum := util.MgoE.Count("task", query)
  46. qu.Debug("本周新建任务数量:", ThisWeekAddTaskNum)
  47. //新建任务同比增减
  48. AddTaskIncDecRatio := float64(0)
  49. if ThisWeekAddTaskNum != 0 {
  50. AddTaskIncDecRatio = float64(ThisWeekAddTaskNum-LastWeekAddTaskAllNum) / float64(ThisWeekAddTaskNum)
  51. }
  52. AddTaskIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AddTaskIncDecRatio), 64)
  53. qu.Debug("新建任务同比增减:", AddTaskIncDecRatio)
  54. //上周核实任务数量
  55. qu.Debug("上周核实任务数量:", LastWeekCheckTaskNum)
  56. //本周核实任务数量
  57. query = map[string]interface{}{
  58. "l_checktime": map[string]interface{}{
  59. "$gte": sTime,
  60. "$lt": eTime,
  61. },
  62. "i_state": map[string]interface{}{
  63. "$gte": 2, //任务状态:处理中、待审核、审核通过、未通过、关闭
  64. },
  65. }
  66. ThisWeekCheckTaskNum := util.MgoE.Count("task", query)
  67. qu.Debug("本周核实任务数量:", ThisWeekCheckTaskNum)
  68. //核实任务同比增减
  69. CheckTaskIncDecRatio := float64(0)
  70. if ThisWeekCheckTaskNum != 0 {
  71. CheckTaskIncDecRatio = float64(ThisWeekCheckTaskNum-LastWeekCheckTaskNum) / float64(ThisWeekCheckTaskNum)
  72. }
  73. CheckTaskIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", CheckTaskIncDecRatio), 64)
  74. qu.Debug("核实任务同比增减:", CheckTaskIncDecRatio)
  75. //待核实任务总数
  76. query = map[string]interface{}{
  77. //"i_state": map[string]interface{}{
  78. // "$lte": 1, //任务状态:待确认、待处理
  79. //},
  80. "i_state": 1, //待处理
  81. }
  82. NeedToCheckTaskAllNum := util.MgoE.Count("task", query)
  83. qu.Debug("待核实任务总数:", NeedToCheckTaskAllNum)
  84. //2、lua新增爬虫
  85. //上周新建爬虫数量
  86. qu.Debug("lua上周新建爬虫数量:", LastWeekAddLuaNum)
  87. //本周新建爬虫数量
  88. query = map[string]interface{}{
  89. "comeintime": map[string]interface{}{
  90. "$gte": sTime,
  91. "$lt": eTime,
  92. },
  93. "platform": "golua平台",
  94. }
  95. ThisWeekAddLuaNum := util.MgoEB.Count("luaconfig", query)
  96. qu.Debug("lua本周新建爬虫数量:", ThisWeekAddLuaNum)
  97. //lua新建爬虫同比增减
  98. AddLuaIncDecRatio := float64(0)
  99. if ThisWeekAddLuaNum != 0 {
  100. AddLuaIncDecRatio = float64(ThisWeekAddLuaNum-LastWeekAddLuaNum) / float64(ThisWeekAddLuaNum)
  101. }
  102. AddLuaIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AddLuaIncDecRatio), 64)
  103. qu.Debug("lua新建爬虫同比增减:", AddLuaIncDecRatio)
  104. //上周已完成新建爬虫数量
  105. qu.Debug("lua上周已完成新建爬虫数量:", LastWeekFinishLuaNum)
  106. //本周已完成新建爬虫数量
  107. query = map[string]interface{}{
  108. "comeintime": map[string]interface{}{
  109. "$gte": sTime,
  110. "$lt": eTime,
  111. },
  112. }
  113. ThisWeekFinishLuaNum := util.MgoE.Count("lua_logs_auditor_new", query)
  114. qu.Debug("lua本周已完成新建爬虫数量:", ThisWeekFinishLuaNum)
  115. //lua完成新建爬虫同比增减
  116. FinishLuaIncDecRatio := float64(0)
  117. if ThisWeekFinishLuaNum != 0 {
  118. FinishLuaIncDecRatio = float64(ThisWeekFinishLuaNum-LastWeekFinishLuaNum) / float64(ThisWeekFinishLuaNum)
  119. }
  120. FinishLuaIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", FinishLuaIncDecRatio), 64)
  121. qu.Debug("lua完成新建爬虫同比增减:", FinishLuaIncDecRatio)
  122. //待完成新建爬虫总数
  123. query = map[string]interface{}{
  124. "event": 7000,
  125. "platform": "golua平台",
  126. "state": map[string]interface{}{
  127. "$lte": 2, //待完成、待审核、未通过
  128. },
  129. }
  130. NeedToFinishNewLuaAllNum := CountNeedToFinishNewLuaAllNum(query)
  131. qu.Debug("lua待完成新建爬虫总数:", NeedToFinishNewLuaAllNum)
  132. //3、lua历史维护
  133. //上周新增待维护任务数量
  134. qu.Debug("上周新增待维护任务数量:", LastWeekAddEffectTaskNum)
  135. //本周新增待维护任务数量
  136. query = map[string]interface{}{
  137. "l_checktime": map[string]interface{}{
  138. "$gte": sTime,
  139. "$lt": eTime,
  140. },
  141. "i_state": map[string]interface{}{ //处理中、待审核、审核通过、未通过
  142. "$gte": 2,
  143. "$lte": 5,
  144. },
  145. }
  146. ThisWeekAddEffectTaskNum := util.MgoE.Count("task", query)
  147. qu.Debug("本周新增待维护任务数量:", ThisWeekAddEffectTaskNum)
  148. //新建待维护任务同比增减
  149. AddEffectTaskIncDecRatio := float64(0)
  150. if ThisWeekAddEffectTaskNum != 0 {
  151. AddEffectTaskIncDecRatio = float64(ThisWeekAddEffectTaskNum-LastWeekAddEffectTaskNum) / float64(ThisWeekAddEffectTaskNum)
  152. }
  153. AddEffectTaskIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AddEffectTaskIncDecRatio), 64)
  154. qu.Debug("新建待维护任务同比增减:", AddEffectTaskIncDecRatio)
  155. //上周完成待维护任务数量
  156. qu.Debug("上周完成待维护任务数量:", LastWeekFinishEffectTaskNum)
  157. //本周完成待维护任务数量
  158. query = map[string]interface{}{
  159. "l_uploadtime": map[string]interface{}{
  160. "$gte": sTime,
  161. "$lt": eTime,
  162. },
  163. "i_state": 4, //审核通过
  164. }
  165. ThisWeekFinishEffectTaskNum := util.MgoE.Count("task", query)
  166. qu.Debug("本周完成待维护任务数量:", ThisWeekFinishEffectTaskNum)
  167. //完成待维护任务同比增减
  168. FinishEffectTaskIncDecRatio := float64(0)
  169. if ThisWeekFinishEffectTaskNum != 0 {
  170. FinishEffectTaskIncDecRatio = float64(ThisWeekFinishEffectTaskNum-LastWeekFinishEffectTaskNum) / float64(ThisWeekFinishEffectTaskNum)
  171. }
  172. FinishEffectTaskIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", FinishEffectTaskIncDecRatio), 64)
  173. qu.Debug("完成待维护任务同比增减:", FinishEffectTaskIncDecRatio)
  174. //待维护任务总数
  175. query = map[string]interface{}{
  176. "i_state": map[string]interface{}{
  177. "$in": []int{2, 3, 5}, //处理中、待审核、未通过
  178. },
  179. }
  180. NeedToFinishEffectTaskAllNum := util.MgoE.Count("task", query)
  181. qu.Debug("待维护任务总数:", NeedToFinishEffectTaskAllNum)
  182. //4、python爬虫
  183. //上周新建爬虫数量
  184. qu.Debug("python上周新建爬虫数量:", LastWeekAddPythonNum)
  185. //本周新建爬虫数量
  186. query = map[string]interface{}{
  187. "comeintime": map[string]interface{}{
  188. "$gte": sTime,
  189. "$lt": eTime,
  190. },
  191. "platform": "python",
  192. }
  193. ThisWeekAddPythonNum := util.MgoEB.Count("luaconfig", query)
  194. qu.Debug("python本周新建爬虫数量:", ThisWeekAddPythonNum)
  195. //新建爬虫数量同比增减
  196. AddPythonIncDecRatio := float64(0)
  197. if ThisWeekAddPythonNum != 0 {
  198. AddPythonIncDecRatio = float64(ThisWeekAddPythonNum-LastWeekAddPythonNum) / float64(ThisWeekAddPythonNum)
  199. }
  200. AddPythonIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AddPythonIncDecRatio), 64)
  201. qu.Debug("python新建爬虫同比增减:", AddPythonIncDecRatio)
  202. //上周已完成爬虫数量
  203. qu.Debug("python上周已完成爬虫数量:", LastWeekFinishPythonNum)
  204. //本周已完成爬虫数量
  205. query = map[string]interface{}{
  206. "l_uploadtime": map[string]interface{}{
  207. "$gte": sTime,
  208. "$lt": eTime,
  209. },
  210. "platform": "python",
  211. "state": 11,
  212. }
  213. ThisWeekFinishPythonNum := util.MgoE.Count("luaconfig", query)
  214. qu.Debug("python本周已完成爬虫数量:", ThisWeekFinishPythonNum)
  215. //已完成爬虫数量同比增减
  216. FinishPythonIncDecRatio := float64(0)
  217. if ThisWeekFinishPythonNum != 0 {
  218. FinishPythonIncDecRatio = float64(ThisWeekFinishPythonNum-LastWeekFinishPythonNum) / float64(ThisWeekFinishPythonNum)
  219. }
  220. FinishPythonIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", FinishPythonIncDecRatio), 64)
  221. qu.Debug("python已完成爬虫数量同比增减:", FinishPythonIncDecRatio)
  222. //python待完成爬虫总数
  223. query = map[string]interface{}{
  224. "$or": []interface{}{
  225. map[string]interface{}{
  226. "platform": "python",
  227. "state": map[string]interface{}{
  228. "$nin": []int{4, 5, 7, 10, 11}, //除已作废、已上架、无发布、已删除、已上线状态的爬虫都是待开发的爬虫
  229. },
  230. },
  231. map[string]interface{}{
  232. "platform": "golua平台",
  233. "state": 9, //lua平台无法处理(转python)的爬虫算到python待完成的爬虫里
  234. },
  235. },
  236. }
  237. NeedToFinishPythonAllNum := util.MgoEB.Count("luaconfig", query)
  238. qu.Debug("python待完成爬虫总数:", NeedToFinishPythonAllNum)
  239. //5、爬虫和站点信息
  240. ThisWeekCodeAllNum, ThisWeekSiteAllNum := GetCodeAndSiteInfo()
  241. qu.Debug("上周统计爬虫总量,站点总量:", LastWeekCodeAllNum, LastWeekSiteAllNum)
  242. qu.Debug("本周统计爬虫总量,站点总量:", ThisWeekCodeAllNum, ThisWeekSiteAllNum)
  243. //爬虫总量增长率
  244. AllCodeIncDecRatio := float64(0)
  245. if ThisWeekCodeAllNum != 0 {
  246. AllCodeIncDecRatio = float64(ThisWeekCodeAllNum-LastWeekCodeAllNum) / float64(ThisWeekCodeAllNum)
  247. }
  248. AllCodeIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AllCodeIncDecRatio), 64)
  249. qu.Debug("爬虫总量增长率:", AllCodeIncDecRatio)
  250. //站点总量增长率
  251. AllSiteIncDecRatio := float64(0)
  252. if ThisWeekSiteAllNum != 0 {
  253. AllSiteIncDecRatio = float64(ThisWeekSiteAllNum-LastWeekSiteAllNum) / float64(ThisWeekSiteAllNum)
  254. }
  255. AllSiteIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AllSiteIncDecRatio), 64)
  256. qu.Debug("爬虫总量增长率:", AllSiteIncDecRatio)
  257. //6、数据量统计
  258. //mgo本周采集量
  259. query = map[string]interface{}{
  260. "comeintime": map[string]interface{}{
  261. "$gte": sTime,
  262. "$lt": eTime,
  263. },
  264. }
  265. ThisWeekMgoNum := util.MgoB.Count("bidding", query)
  266. qu.Debug("上周,本周mgo采集总量:", LastWeekMgoNum, ThisWeekMgoNum)
  267. //mgo采集量增长率
  268. AllMgoNumIncDecRatio := float64(0)
  269. if ThisWeekMgoNum != 0 {
  270. AllMgoNumIncDecRatio = float64(ThisWeekMgoNum-LastWeekMgoNum) / float64(ThisWeekMgoNum)
  271. }
  272. AllMgoNumIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AllMgoNumIncDecRatio), 64)
  273. qu.Debug("mgo采集量增长率:", AllMgoNumIncDecRatio)
  274. //本周es索引量
  275. esQuery := `{"query": {"bool": {"must": [{"range": {"comeintime": {"gte": "` + fmt.Sprint(sTime) + `","lt": "` + fmt.Sprint(eTime) + `"}}}]}}}`
  276. ThisWeekEsNum := util.Es.Count(util.EsIndex, util.EsType, esQuery)
  277. qu.Debug("上周,本周es索引总量:", LastWeekEsNum, ThisWeekEsNum)
  278. //es索引量增长率
  279. AllEsNumIncDecRatio := float64(0)
  280. if ThisWeekEsNum != 0 {
  281. AllEsNumIncDecRatio = (float64(ThisWeekEsNum) - float64(LastWeekEsNum)) / float64(ThisWeekEsNum)
  282. }
  283. AllEsNumIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", AllEsNumIncDecRatio), 64)
  284. qu.Debug("es索引量增长率:", AllEsNumIncDecRatio)
  285. //竞品mgo本周采集量
  286. ThisWeekCompeteMgoNum := GetThisWeekCompeteMgoNum(sTime, eTime)
  287. qu.Debug("上周,本周竞品mgo采集总量:", LastWeekCompeteMgoNum, ThisWeekCompeteMgoNum)
  288. //竞品mgo采集量增长率:
  289. CompeteMgoNumIncDecRatio := float64(0)
  290. if ThisWeekEsNum != 0 {
  291. CompeteMgoNumIncDecRatio = float64(ThisWeekCompeteMgoNum-LastWeekCompeteMgoNum) / float64(ThisWeekCompeteMgoNum)
  292. }
  293. CompeteMgoNumIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", CompeteMgoNumIncDecRatio), 64)
  294. qu.Debug("竞品mgo采集量增长率:", CompeteMgoNumIncDecRatio)
  295. //竞品es本周索引量(元博网(采购与招标网)、中国招标与采购网)
  296. ThisWeekCompeteEsNum := 0
  297. for _, competeSite := range []string{Compete_ZGZBYCGW, Compete_YBW} {
  298. esQuery = `{"query": {"bool": {"must": [{"range": {"comeintime": {"gte": "` + fmt.Sprint(sTime) + `","lt": "` + fmt.Sprint(eTime) + `"}}},{"term": {"site": "` + competeSite + `"}}]}}}`
  299. tmpNum := util.Es.Count(util.EsIndex, util.EsType, esQuery)
  300. qu.Debug(competeSite, "es统计量:", tmpNum)
  301. ThisWeekCompeteEsNum += int(tmpNum)
  302. }
  303. qu.Debug("上周,本周竞品es索引总量:", LastWeekCompeteEsNum, ThisWeekCompeteEsNum)
  304. //竞品es索引量增长率
  305. CompeteEsNumIncDecRatio := float64(0)
  306. if ThisWeekEsNum != 0 {
  307. CompeteEsNumIncDecRatio = float64(ThisWeekCompeteEsNum-LastWeekCompeteEsNum) / float64(ThisWeekCompeteEsNum)
  308. }
  309. CompeteEsNumIncDecRatio, _ = strconv.ParseFloat(fmt.Sprintf("%.4f", CompeteEsNumIncDecRatio), 64)
  310. qu.Debug("竞品es索引量增长率:", CompeteEsNumIncDecRatio)
  311. //保存本周记录
  312. util.MgoS.Save("spider_weeklyreport", map[string]interface{}{
  313. "addtasknum": ThisWeekAddTaskNum,
  314. "addluanum": ThisWeekAddLuaNum,
  315. "addeffecttasknum": ThisWeekAddEffectTaskNum,
  316. "addpythonnum": ThisWeekAddPythonNum,
  317. "checktasknum": ThisWeekCheckTaskNum,
  318. "finishluanum": ThisWeekFinishLuaNum,
  319. "finisheffecttasknum": ThisWeekFinishEffectTaskNum,
  320. "finishpythonnum": ThisWeekFinishPythonNum,
  321. "needchecktaskallnum": NeedToCheckTaskAllNum,
  322. "needfinishluaallnum": NeedToFinishNewLuaAllNum,
  323. "needfinishtaskallnum": NeedToFinishEffectTaskAllNum,
  324. "needfinishpythonallnum": NeedToFinishPythonAllNum,
  325. "allcodenum": ThisWeekCodeAllNum,
  326. "allsitenum": ThisWeekSiteAllNum,
  327. "mgonum": ThisWeekMgoNum,
  328. "esnum": ThisWeekEsNum,
  329. "competemgonum": ThisWeekCompeteMgoNum,
  330. "competeesnum": ThisWeekCompeteEsNum,
  331. "comeintime": time.Now().Unix(),
  332. })
  333. //生成excel
  334. file, err := xlsx.OpenFile("res/report.xlsx")
  335. if err != nil {
  336. qu.Debug("Open Report File Error:", err)
  337. return
  338. }
  339. sheet := file.Sheets[0]
  340. taskRow := sheet.Rows[1]
  341. taskRow.Cells[1].SetValue(fmt.Sprint(LastWeekAddTaskAllNum))
  342. taskRow.Cells[2].SetValue(fmt.Sprint(ThisWeekAddTaskNum))
  343. taskRow.Cells[3].SetValue(fmt.Sprint(ConvertDataType(AddTaskIncDecRatio)) + "%")
  344. taskRow.Cells[4].SetValue(fmt.Sprint(LastWeekCheckTaskNum))
  345. taskRow.Cells[5].SetValue(fmt.Sprint(ThisWeekCheckTaskNum))
  346. taskRow.Cells[6].SetValue(fmt.Sprint(ConvertDataType(CheckTaskIncDecRatio)) + "%")
  347. taskRow.Cells[7].SetValue(fmt.Sprint(NeedToCheckTaskAllNum))
  348. newLuaRow := sheet.Rows[2]
  349. newLuaRow.Cells[1].SetValue(fmt.Sprint(LastWeekAddLuaNum))
  350. newLuaRow.Cells[2].SetValue(fmt.Sprint(ThisWeekAddLuaNum))
  351. newLuaRow.Cells[3].SetValue(fmt.Sprint(ConvertDataType(AddLuaIncDecRatio)) + "%")
  352. newLuaRow.Cells[4].SetValue(fmt.Sprint(LastWeekFinishLuaNum))
  353. newLuaRow.Cells[5].SetValue(fmt.Sprint(ThisWeekFinishLuaNum))
  354. newLuaRow.Cells[6].SetValue(fmt.Sprint(ConvertDataType(FinishLuaIncDecRatio)) + "%")
  355. newLuaRow.Cells[7].SetValue(fmt.Sprint(NeedToFinishNewLuaAllNum))
  356. historyLuaRow := sheet.Rows[3]
  357. historyLuaRow.Cells[1].SetValue(fmt.Sprint(LastWeekAddEffectTaskNum))
  358. historyLuaRow.Cells[2].SetValue(fmt.Sprint(ThisWeekAddEffectTaskNum))
  359. historyLuaRow.Cells[3].SetValue(fmt.Sprint(ConvertDataType(AddEffectTaskIncDecRatio)) + "%")
  360. historyLuaRow.Cells[4].SetValue(fmt.Sprint(LastWeekFinishEffectTaskNum))
  361. historyLuaRow.Cells[5].SetValue(fmt.Sprint(ThisWeekFinishEffectTaskNum))
  362. historyLuaRow.Cells[6].SetValue(fmt.Sprint(ConvertDataType(FinishEffectTaskIncDecRatio)) + "%")
  363. historyLuaRow.Cells[7].SetValue(fmt.Sprint(NeedToFinishEffectTaskAllNum))
  364. pythonRow := sheet.Rows[4]
  365. pythonRow.Cells[1].SetValue(fmt.Sprint(LastWeekAddPythonNum))
  366. pythonRow.Cells[2].SetValue(fmt.Sprint(ThisWeekAddPythonNum))
  367. pythonRow.Cells[3].SetValue(fmt.Sprint(ConvertDataType(AddPythonIncDecRatio)) + "%")
  368. pythonRow.Cells[4].SetValue(fmt.Sprint(LastWeekFinishPythonNum))
  369. pythonRow.Cells[5].SetValue(fmt.Sprint(ThisWeekFinishPythonNum))
  370. pythonRow.Cells[6].SetValue(fmt.Sprint(ConvertDataType(FinishPythonIncDecRatio)) + "%")
  371. pythonRow.Cells[7].SetValue(fmt.Sprint(NeedToFinishPythonAllNum))
  372. thisWeekNumRow := sheet.Rows[6]
  373. thisWeekNumRow.Cells[1].SetValue(fmt.Sprint(LastWeekCodeAllNum))
  374. thisWeekNumRow.Cells[2].SetValue(fmt.Sprint(LastWeekSiteAllNum))
  375. thisWeekNumRow.Cells[3].SetValue(fmt.Sprint(LastWeekMgoNum))
  376. thisWeekNumRow.Cells[4].SetValue(fmt.Sprint(LastWeekEsNum))
  377. thisWeekNumRow.Cells[5].SetValue(fmt.Sprint(LastWeekCompeteMgoNum))
  378. thisWeekNumRow.Cells[6].SetValue(fmt.Sprint(LastWeekCompeteEsNum))
  379. lastWeekNumRow := sheet.Rows[7]
  380. lastWeekNumRow.Cells[1].SetValue(fmt.Sprint(ThisWeekCodeAllNum))
  381. lastWeekNumRow.Cells[2].SetValue(fmt.Sprint(ThisWeekSiteAllNum))
  382. lastWeekNumRow.Cells[3].SetValue(fmt.Sprint(ThisWeekMgoNum))
  383. lastWeekNumRow.Cells[4].SetValue(fmt.Sprint(ThisWeekEsNum))
  384. lastWeekNumRow.Cells[5].SetValue(fmt.Sprint(ThisWeekCompeteMgoNum))
  385. lastWeekNumRow.Cells[6].SetValue(fmt.Sprint(ThisWeekCompeteEsNum))
  386. incDecRatioRow := sheet.Rows[8]
  387. incDecRatioRow.Cells[1].SetValue(fmt.Sprint(ConvertDataType(AllCodeIncDecRatio)) + "%")
  388. incDecRatioRow.Cells[2].SetValue(fmt.Sprint(ConvertDataType(AllSiteIncDecRatio)) + "%")
  389. incDecRatioRow.Cells[3].SetValue(fmt.Sprint(ConvertDataType(AllMgoNumIncDecRatio)) + "%")
  390. incDecRatioRow.Cells[4].SetValue(fmt.Sprint(ConvertDataType(AllEsNumIncDecRatio)) + "%")
  391. incDecRatioRow.Cells[5].SetValue(fmt.Sprint(ConvertDataType(CompeteMgoNumIncDecRatio)) + "%")
  392. incDecRatioRow.Cells[6].SetValue(fmt.Sprint(ConvertDataType(CompeteEsNumIncDecRatio)) + "%")
  393. changeNumrow := sheet.Rows[9]
  394. changeNumrow.Cells[1].SetValue(fmt.Sprint(ThisWeekCodeAllNum - LastWeekCodeAllNum))
  395. changeNumrow.Cells[2].SetValue(fmt.Sprint(ThisWeekSiteAllNum - LastWeekSiteAllNum))
  396. changeNumrow.Cells[3].SetValue(fmt.Sprint(ThisWeekMgoNum - LastWeekMgoNum))
  397. changeNumrow.Cells[4].SetValue(fmt.Sprint(ThisWeekEsNum - int64(LastWeekEsNum)))
  398. changeNumrow.Cells[5].SetValue(fmt.Sprint(ThisWeekCompeteMgoNum - LastWeekCompeteMgoNum))
  399. changeNumrow.Cells[6].SetValue(fmt.Sprint(ThisWeekCompeteEsNum - LastWeekCompeteEsNum))
  400. mw := &util.MyWrite{
  401. Byte: &bytes.Buffer{},
  402. }
  403. file.Write(mw)
  404. bt := mw.Byte.Bytes()
  405. now := time.Now()
  406. name := qu.FormatDate(&now, qu.Date_Short_Layout) + "爬虫统计周报.xlsx"
  407. gm.GSendMail_Bq("jy@jianyu360.cn", "zhangjinkun@topnet.net.cn,maxiaoshan@topnet.net.cn", "", "", "爬虫统计周报", "", name, bt, util.GMail)
  408. }
  409. func GetCodeAndSiteInfo() (int, int) {
  410. defer qu.Catch()
  411. codeMap := map[string]bool{} //爬虫集合
  412. siteMap := map[string]bool{} //站点集合
  413. //1、统计爬虫和站点
  414. sess := util.MgoEB.GetMgoConn()
  415. defer util.MgoEB.DestoryMongoConn(sess)
  416. ch := make(chan bool, 2)
  417. wg := &sync.WaitGroup{}
  418. lock := &sync.Mutex{}
  419. query := map[string]interface{}{
  420. "state": map[string]interface{}{
  421. "$nin": []int{4, 10}, //查询非作废和非删除状态的爬虫
  422. },
  423. }
  424. field := map[string]interface{}{
  425. "code": 1,
  426. "site": 1,
  427. }
  428. it := sess.DB(util.MgoEB.DbName).C("luaconfig").Find(&query).Select(&field).Iter()
  429. n := 0
  430. for tmp := make(map[string]interface{}); it.Next(tmp); n++ {
  431. ch <- true
  432. wg.Add(1)
  433. go func(tmp map[string]interface{}) {
  434. defer func() {
  435. <-ch
  436. wg.Done()
  437. }()
  438. code := qu.ObjToString(tmp["code"])
  439. site := qu.ObjToString(tmp["site"])
  440. lock.Lock()
  441. codeMap[code] = true
  442. siteMap[site] = true
  443. lock.Unlock()
  444. }(tmp)
  445. if n%1000 == 0 {
  446. qu.Debug("current:", n)
  447. }
  448. tmp = map[string]interface{}{}
  449. }
  450. wg.Wait()
  451. codeNum := len(codeMap)
  452. siteNum := len(siteMap)
  453. codeMap = map[string]bool{} //爬虫集合
  454. siteMap = map[string]bool{} //站点集合
  455. return codeNum, siteNum
  456. }
  457. func GetThisWeekCompeteMgoNum(sTime, eTime int64) (ThisWeekCompeteMgoNum int) {
  458. defer qu.Catch()
  459. sess := util.MgoB.GetMgoConn()
  460. defer util.MgoB.DestoryMongoConn(sess)
  461. ch := make(chan bool, 2)
  462. wg := &sync.WaitGroup{}
  463. lock := &sync.Mutex{}
  464. query := map[string]interface{}{
  465. "comeintime": map[string]interface{}{
  466. "$gte": sTime,
  467. "$lt": eTime,
  468. },
  469. }
  470. field := map[string]interface{}{
  471. "site": 1,
  472. }
  473. it := sess.DB(util.MgoB.DbName).C("bidding").Find(&query).Select(&field).Iter()
  474. n := 0
  475. for tmp := make(map[string]interface{}); it.Next(tmp); n++ {
  476. ch <- true
  477. wg.Add(1)
  478. go func(tmp map[string]interface{}) {
  479. defer func() {
  480. <-ch
  481. wg.Done()
  482. }()
  483. site := qu.ObjToString(tmp["site"])
  484. lock.Lock()
  485. if site == Compete_YBW || site == Compete_ZGZBYCGW {
  486. ThisWeekCompeteMgoNum++
  487. }
  488. lock.Unlock()
  489. }(tmp)
  490. if n%1000 == 0 {
  491. qu.Debug("current:", n)
  492. }
  493. tmp = map[string]interface{}{}
  494. }
  495. wg.Wait()
  496. return
  497. }
  498. func GetLastWeekReport() (int, int, int, int, int, int, int, int, int, int, int, int, int, int) {
  499. defer qu.Catch()
  500. datas, _ := util.MgoS.Find("spider_weeklyreport", nil, map[string]interface{}{"_id": -1}, nil, true, 0, 1)
  501. if len(*datas) == 1 {
  502. data := (*datas)[0]
  503. return qu.IntAll(data["addtasknum"]),
  504. qu.IntAll(data["addluanum"]),
  505. qu.IntAll(data["addeffecttasknum"]),
  506. qu.IntAll(data["addpythonnum"]),
  507. qu.IntAll(data["checktasknum"]),
  508. qu.IntAll(data["finishluanum"]),
  509. qu.IntAll(data["finisheffecttasknum"]),
  510. qu.IntAll(data["finishpythonnum"]),
  511. qu.IntAll(data["allcodenum"]),
  512. qu.IntAll(data["allsitenum"]),
  513. qu.IntAll(data["mgonum"]),
  514. qu.IntAll(data["esnum"]),
  515. qu.IntAll(data["competemgonum"]),
  516. qu.IntAll(data["competeesnum"])
  517. } else {
  518. qu.Debug("历史周报信息查询失败")
  519. }
  520. return -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
  521. }
  522. func CountNeedToFinishNewLuaAllNum(query map[string]interface{}) (result int) {
  523. defer qu.Catch()
  524. sess := util.MgoEB.GetMgoConn()
  525. defer util.MgoEB.DestoryMongoConn(sess)
  526. ch := make(chan bool, 2)
  527. wg := &sync.WaitGroup{}
  528. lock := &sync.Mutex{}
  529. field := map[string]interface{}{
  530. "code": 1,
  531. }
  532. it := sess.DB(util.MgoEB.DbName).C("luaconfig").Find(&query).Select(&field).Iter()
  533. n := 0
  534. for tmp := make(map[string]interface{}); it.Next(tmp); n++ {
  535. ch <- true
  536. wg.Add(1)
  537. go func(tmp map[string]interface{}) {
  538. defer func() {
  539. <-ch
  540. wg.Done()
  541. }()
  542. code := qu.ObjToString(tmp["code"])
  543. count := util.MgoE.Count("lua_logs_auditor", map[string]interface{}{"code": code, "types": "审核"})
  544. if count == 0 { //无审核记录表示新爬虫
  545. lock.Lock()
  546. result++
  547. lock.Unlock()
  548. }
  549. }(tmp)
  550. if n%100 == 0 {
  551. qu.Debug("current:", n)
  552. }
  553. tmp = map[string]interface{}{}
  554. }
  555. wg.Wait()
  556. return
  557. }
  558. //解决float64*100后精度丢失问题
  559. func ConvertDataType(ratio float64) float64 {
  560. ratio, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", ratio*100), 64)
  561. return ratio
  562. }