def __init__(self, fileUtilObj, dataTemplateObj, dictNeedRunMsg, intHourTime, intHourCheckAll, allModuleRunAllObj): self.fileUtil = fileUtilObj self.dataTemplate = dataTemplateObj self.runTime = RunTime() self.allModuleRunAllObj = allModuleRunAllObj self.intHourTime = intHourTime self.intHourCheckAll = intHourCheckAll intPastDaysNum = int(dictNeedRunMsg.get('past_days_num')) strPastDay = str(self.runTime.getPastDataDay(intPastDaysNum)) self.intPastTimeStamp = self.runTime.getTimeStamp( strPastDay, "%Y-%m-%d") # 这里也更改为当前日期 # self.dataYesterday = self.runTime.getPastDataDay(1) self.dataDay = self.runTime.getTime("%Y-%m-%d") self.intIndexWhetherCheck = self.checkWhetherRestartPm2(dictNeedRunMsg) self.intIndexWhetherExistPmPro = self.checkWhetherExistPmPro( dictNeedRunMsg) if self.intIndexWhetherExistPmPro == 1: self.proNameForLetter = dictNeedRunMsg.get('pro_for_letter') else: self.proNameForLetter = 'null' if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent(("-->执行检测数据库字段任务"), 'runLog') dictMsgForCheckLetter = self.getMsgForCheckLetter(dictNeedRunMsg) dictMsgForMysql = self.getMsgForMysql(dictNeedRunMsg) if (((len(dictMsgForCheckLetter) == 1) and ('err' in dictMsgForCheckLetter)) or ((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql))): if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent("检测数据库字段所需配置不全, 致检测任务中止运行", 'runLog') else: self.strTable = dictMsgForCheckLetter.get('table_name') self.strField = dictMsgForCheckLetter.get('field_name') self.strFieldCompare1 = dictMsgForCheckLetter.get( 'fieldcompare_name1') self.strFieldCompare2 = dictMsgForCheckLetter.get( 'fieldcompare_name2') self.strFieldCompare3 = dictMsgForCheckLetter.get( 'fieldcompare_name3') self.strFieldCompare4 = dictMsgForCheckLetter.get( 'fieldcompare_name4') self.strFieldCompareValue = dictMsgForCheckLetter.get( 'fieldcompare_name_value') self.intFirst = int(dictMsgForCheckLetter.get('first_field_value')) self.intNext = int(dictMsgForCheckLetter.get('next_field_value')) self.intSleepTime = int(dictMsgForCheckLetter.get('sleeptime')) self.checkRun(dictMsgForMysql)
def checkTog(self, dictMsgForRMlog): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("-->尝试准备删除日志文件", 'runLog') if (len(dictMsgForRMlog) == 1) and ('err' in dictMsgForRMlog): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("删除日志的配置数据不全,致任务中止", 'runLog') else: intRMlogHour = int(dictMsgForRMlog.get('when_time_rm')) intPassday = int(dictMsgForRMlog.get('rm_log_passday')) runTime = RunTime() strOtherDay = str(runTime.getPastDataDay(intPassday)) strNewOtherDay = runTime.doCutHorizontalLine(strOtherDay) if (self.intHourTime == intRMlogHour) or (self.intHourTime == int("0" + str(intRMlogHour))): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ("时间已为" + str(intRMlogHour) + "时,将准备删除日志文件"), 'runLog') listFileName = self.fileUtilObj.getFileNameFromPath( self.strLogPath) listNeedRMFileName = self.getNeedRMFileNameMonitor( listFileName, strNewOtherDay) if len(listNeedRMFileName) != 0: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ("需要删除的日志文件有:\n" + str(listNeedRMFileName)), 'runLog') intMark = self.rmLog(listNeedRMFileName) if intMark == 1: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( (str(intPassday) + "天前(" + strOtherDay + "之前)的日志文件已都删除"), 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( "删除日志出现错误,删除日志任务退出...", 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ("未发现" + str(intPassday) + "天前(" + strOtherDay + "之前)的日志文件,即无文件需要删除.\n" + "删除日志文件任务将退出"), 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ("时间不为" + str(intRMlogHour) + "时,不执行删除日志文件"), 'runLog')
def setAttribute(self): # 设置一些属性 runTime = RunTime() self.strDateTime = runTime.getDateTime() self.strHourTime = runTime.getHourTime() self.strDayTime = runTime.getNumDayTime() self.strMinTime = runTime.getMinTime() self.strHourMinTime = runTime.getHourMinTime() self.strNumSecondTime = runTime.getNumSecondTime() self.strNumHourTime = runTime.getNumHourTime() print(self.strDateTime) strlogContentSecondName = "monitor_content-" + self.strNumSecondTime + ".log" strlogContentName = "monitor_content-" + self.strNumHourTime + ".log" strlogErrName = "monitor_err-" + self.strNumHourTime + ".log" strlogErrSecondName = "monitor_err-" + self.strNumSecondTime + ".log" strRunLogName = "monitor_log-" + self.strDayTime + ".log" self.strlogContentSecondName = self.strLogPath + '/' + strlogContentSecondName self.strlogContentName = self.strLogPath + '/' + strlogContentName self.strlogErrName = self.strLogPath + '/' + strlogErrName self.strlogErrSecondName = self.strLogPath + '/' + strlogErrSecondName self.strRunLogPathName = self.strLogPath + '/' + strRunLogName
def __init__(self, fileUtilObj, dataTempObj, dictNeedRunMsg, intNowHourTime, intHourCheckAll, allModuleRunAllObj): self.fileUtilObj = fileUtilObj self.dataTempObj = dataTempObj self.intNowHourTime = intNowHourTime self.intHourCheckAll = intHourCheckAll self.allModuleRunAllObj = allModuleRunAllObj self.runTimeObj = RunTime() self.mysqlUtilObj = MySqlUtil(self.fileUtilObj) if (self.intNowHourTime == self.intHourCheckAll) or (self.intNowHourTime == ("0" + self.intHourCheckAll)): if self.allModuleRunAllObj.intOverAllGetIntegralSit == 0: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("-->执行获取积分使用详情", 'runLog') dictMsgForMysql = self.mysqlUtilObj.getMsgForMysql( dictNeedRunMsg) if (len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ("获取积分使用详情所需mysql信息不全,致检测任务中止"), 'runLog') else: dateTodayBegin = self.runTimeObj.getTime("%Y-%m-%d") self.intTodayBeginStamp = self.runTimeObj.getTimeStamp( str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTimeObj.getDateTime() self.intTodayEndStamp = self.runTimeObj.getTimeStamp( dateTodayEnd, "%Y-%m-%d %H:%M:%S") self.doGetIntegralSit(dictMsgForMysql) self.allModuleRunAllObj.intOverAllGetIntegralSit = 1 if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("今日获取积分使用详情已经标记为1", 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("-->获取积分使用详情今日已执行,今日将不再执行", 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("未到达时间,不执行获取积分使用详情", 'runLog')
def __init__(self, fileUtilObj, dataTempObj, dictNeedRunMsg, intNowHourTime, intHourCheckAll, allModuleRunAllObj): self.fileUtilObj = fileUtilObj self.dataTempObj = dataTempObj self.runTimeObj = RunTime() self.intNowHourTime = intNowHourTime self.intHourCheckAll = intHourCheckAll self.allModuleRunAllObj = allModuleRunAllObj if ((self.intNowHourTime == self.intHourCheckAll) or (self.intNowHourTime == ("0" + self.intHourCheckAll))): if(self.allModuleRunAllObj.intOverAllCountNum == 0): if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("-->执行统计图片数量", 'runLog') dictMsgForMysql = self.getMsgForMysql(dictNeedRunMsg) if ((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql)): if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent(("统计'动态','食谱'图片数量所需配置信息不全,致检测任务中止"), 'runLog') else: dateTodayBegin = self.runTimeObj.getTime("%Y-%m-%d") self.intTodayBeginStamp = self.runTimeObj.getTimeStamp(str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTimeObj.getDateTime() self.intTodayEndStamp = self.runTimeObj.getTimeStamp(dateTodayEnd, "%Y-%m-%d %H:%M:%S") self.doCount(dictMsgForMysql, dictNeedRunMsg) self.allModuleRunAllObj.intOverAllCountNum = 1 if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("今日统计图片数量操作已经标记为1", 'runLog') else: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("-->统计图片数量今日已执行,今日将不再执行", 'runLog') else: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("未到达时间,不执行统计图片数量", 'runLog')
def timingRun(self): # 这个属于定时器 # 即定时执行,代码中每个多少秒来执行此方法中的代码 # 现在代码中实现的是,每间隔相应秒数就会重新实例化一个FileUtil对象, # 也就是每间隔相应秒数后将重新读取配置,并写读取系统时间 # 这一点不足的就是每次执行检测都需要重新读取检测配置文件,这固然好点 # 但也有不足就是读取浪费, # 现在有个想法就是将读取系统时间和读取检测配置文件这两个功能分开来实现 # 即做到每间隔相应秒数后就读取系统时间,而做到只读取一次配置文件 self.allModuleRunAll = AllModuleRunAll() while True: self.fileUtil = FileUtil() dictNeedRunMsg = self.fileUtil.getNeedRunMsg() self.strServerName = dictNeedRunMsg.get('servername') self.dataTemplate = DataTemplate(self.fileUtil.strDateTime, self.strServerName) # dictNeedRunMsg = self.fileUtil.getNeedRunMsg() intRunIntervals = int(dictNeedRunMsg.get('run_intervals')) self.intHourCheckAll = dictNeedRunMsg.get('when_hour_checkall') self.warningLevel = dictNeedRunMsg.get('warning_level') intTimeB = int(dictNeedRunMsg.get('time_beginning')) intTimeE = int(dictNeedRunMsg.get('time_end')) if len(dictNeedRunMsg) > 1: # 脚本执行检测需要监控的项目 self.runProcess(dictNeedRunMsg) #emailUtil = EmailUtil(dictNeedRunMsg, self.fileUtil) elif len(dictNeedRunMsg) == 1: self.fileUtil.writerContent("配置文件参数值不全,未执行检测", 'runLog') else: self.fileUtil.writerContent("配置文件读取失败,未执行检测", 'runLog') # if intTimeB <= int(self.fileUtil.strHourTime) < intTimeE: if (int(self.fileUtil.strHourTime) >= intTimeB) and (int( self.fileUtil.strHourTime) <= intTimeE): self.choiceSendMsgMethod(dictNeedRunMsg) else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("不在时间段内, 不执行发送消息任务", 'runLog') if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( (str(intRunIntervals / 60) + "分钟后将再次检测运行"), 'runLog') self.fileUtil.writerContent( "============" + str(RunTime().getDateTime()) + "============", 'runLog') time.sleep(intRunIntervals) if str(self.fileUtil.strHourTime) == "00": intIndex = self.allModuleRunAll.initAllNum() if intIndex == 1: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("所有项目一天执行次数现已重置为0", 'runLog') self.fileUtil.writerContent( "---" + self.fileUtil.strDateTime, 'runLog') '''
class CheckLetter: # 检测数据库表中某个字段 # 检测是否推送 def __init__(self, fileUtilObj, dataTemplateObj, dictNeedRunMsg, intHourTime, intHourCheckAll, allModuleRunAllObj): self.fileUtil = fileUtilObj self.dataTemplate = dataTemplateObj self.runTime = RunTime() self.allModuleRunAllObj = allModuleRunAllObj self.intHourTime = intHourTime self.intHourCheckAll = intHourCheckAll intPastDaysNum = int(dictNeedRunMsg.get('past_days_num')) strPastDay = str(self.runTime.getPastDataDay(intPastDaysNum)) self.intPastTimeStamp = self.runTime.getTimeStamp( strPastDay, "%Y-%m-%d") # 这里也更改为当前日期 # self.dataYesterday = self.runTime.getPastDataDay(1) self.dataDay = self.runTime.getTime("%Y-%m-%d") self.intIndexWhetherCheck = self.checkWhetherRestartPm2(dictNeedRunMsg) self.intIndexWhetherExistPmPro = self.checkWhetherExistPmPro( dictNeedRunMsg) if self.intIndexWhetherExistPmPro == 1: self.proNameForLetter = dictNeedRunMsg.get('pro_for_letter') else: self.proNameForLetter = 'null' if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent(("-->执行检测数据库字段任务"), 'runLog') dictMsgForCheckLetter = self.getMsgForCheckLetter(dictNeedRunMsg) dictMsgForMysql = self.getMsgForMysql(dictNeedRunMsg) if (((len(dictMsgForCheckLetter) == 1) and ('err' in dictMsgForCheckLetter)) or ((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql))): if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent("检测数据库字段所需配置不全, 致检测任务中止运行", 'runLog') else: self.strTable = dictMsgForCheckLetter.get('table_name') self.strField = dictMsgForCheckLetter.get('field_name') self.strFieldCompare1 = dictMsgForCheckLetter.get( 'fieldcompare_name1') self.strFieldCompare2 = dictMsgForCheckLetter.get( 'fieldcompare_name2') self.strFieldCompare3 = dictMsgForCheckLetter.get( 'fieldcompare_name3') self.strFieldCompare4 = dictMsgForCheckLetter.get( 'fieldcompare_name4') self.strFieldCompareValue = dictMsgForCheckLetter.get( 'fieldcompare_name_value') self.intFirst = int(dictMsgForCheckLetter.get('first_field_value')) self.intNext = int(dictMsgForCheckLetter.get('next_field_value')) self.intSleepTime = int(dictMsgForCheckLetter.get('sleeptime')) self.checkRun(dictMsgForMysql) def checkRun(self, dictMsgForMysql): # 执行检测 # 这个检测数据库字段并未分时间段 # 其他的项目检测就分了大任务和小任务检测,即按时和按分检测 # 这个就没有,因为数据库中的字段都是时刻在变化 # 2017-12-12添加大小任务,大任务统计前一天已推送和未推送的数据 if (self.intHourTime == self.intHourCheckAll) or (self.intHourTime == ("0" + self.intHourCheckAll)): if self.allModuleRunAllObj.intOverAllCheckLetterNum == 0: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("执行检测" + str(self.dataDay) + "的推送情况"), 'runLog') listNoSendMsg = self.getNoSendMsgToday(dictMsgForMysql) intNoSendNum = len(listNoSendMsg) intAlreadySendNum = self.getAlreadySendNumToday( dictMsgForMysql) self.dataTemplate.dataAll += ("> - " + str(self.dataDay) + "已推送 **" + str(intAlreadySendNum) + "** 条,未推送总数为 **" + str(intNoSendNum) + "** 条\n") if intNoSendNum != 0: # 不将为推送详情发送出去 #self.dataTemplate.dataAll += ("> \t\t 其未推送的信息如下:\n") strNoSendMsgTable = PrettyTableDo( ).getMsgForTableShowByListDict(listNoSendMsg, 1) if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent( (str(len(listNoSendMsg)) + "条未推送的信息如下:\n" + strNoSendMsgTable), 'runLog') # for listNoSendMsgItem in listNoSendMsg: # if(self.fileUtil.boolWhetherShowLog & True): # self.fileUtil.writerContent((str(listNoSendMsgItem) + "\n"), 'runLog') #self.dataTemplate.dataAll += ("> \t\t " + str(listNoSendMsgItem) + "\n") self.allModuleRunAllObj.intOverAllCheckLetterNum = 1 if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent(("今日检测数据库字段次数已标记为" + str( self.allModuleRunAllObj.intOverAllCheckLetterNum)), 'runLog') else: if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent( ("-->今日" + str(self.intHourCheckAll) + "时内已检测数据库字段,今日将不再全面检测\n" + "将进行错误监控任务"), 'runLog') # 配置文件中的when_hour_checkall时内进行错误监控,和下面else内一样 self.checkTog(dictMsgForMysql) else: self.checkTog(dictMsgForMysql) def checkTog(self, dictMsgForMysql): doMySql = DoMysql(dictMsgForMysql) objConnection = doMySql.connectionMySQL() listResult = self.findTheField(objConnection) listNewResult = self.findWhetherTheField(listResult, self.intSleepTime, dictMsgForMysql) if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent("检测已完成", 'runLog') def findTheField(self, objConnection): # 查找设定表中的设定字段的值 # 若发现该字段的值为intFirst值,则进行时间性的间隔判断 # 将查找到的shopid和studentId值存放到一个字典中 # objConnection: 数据库的一条连接 # strTable: 表名 # strField: 字段名 # intFirst: 字段名的值(第一次的值,该值在规定时间秒后会发生更改) # intNext: 字段名更改后的值 # 获取之后将其返回,类型为list集合 # 方法内的sql是统计获取多少天内未推送出去的信息个数,获取其id,studentId,shopId,并存放到集合中,供给70秒后的第二次的确定 listResult = [] if objConnection is None: if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent("数据库连接失败", 'runLog') else: if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent("数据库连接成功", 'runLog') self.fileUtil.writerContent( (("准备查找" + self.strField + "值为%d" + "的数据") % (self.intFirst)), 'runLog') try: with objConnection.cursor() as cursor: strSearchSql = ( "SELECT " + self.strFieldCompare1 + " , " + self.strFieldCompare2 + " , " + self.strFieldCompare3 + " FROM " + self.strTable + " WHERE " + self.strField + "= %d AND " + self.strFieldCompareValue + " != " + "'" + "'" + " AND " + self.strFieldCompareValue + " IS NOT NULL" + " AND " + self.strFieldCompareValue + " != " + "'" + "null" + "'" + " AND " + " send_count != 6 AND " + self.strFieldCompare4 + " >= %d") cursor.execute(strSearchSql % (self.intFirst, self.intPastTimeStamp)) listResult = cursor.fetchall() cursor.close() if (listResult is None) or (len(listResult) == 0): if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent( (("未查找到" + self.strField + "值为%d" + "的数据") % (self.intFirst)), 'runLog') else: strFirstValueMsgTable = PrettyTableDo( ).getMsgForTableShowByListDict(listResult, 1) if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent( ("已查找到%d条数据,如下" % (len(listResult))), 'runLog') self.fileUtil.writerContent( strFirstValueMsgTable, 'runLog') # for listResultItem in listResult: # self.fileUtil.writerContent(str(listResultItem), 'runLog') #findWhetherTheField(objConnection, strTable, strField, intFirst, intNext, listResult) finally: if objConnection._closed: if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent("第一次查询连接意外关闭", 'runLog') else: objConnection.close() if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("第一次查询连接已正常关闭", 'runLog') return listResult def findWhetherTheField(self, listResult, intTime, dictMsgForMysql): # 这个方法里,需要与数据库建立一条新的连接 # strTable: 表名 # strField: 字段名 # intNext: 字段名更改后的值 # listResult: 字段名的值为第一次更改前的集合,集合中包括shopid,studentId # 将结果存放到对象self.dataTemplate中 # 最后,返回一个过了规定时间还未更改strField的值的字段集合 listNewResultFind = [] if (len(listResult) == 0): if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("无数据需要处理", 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( (("休眠" + str(self.intSleepTime) + "秒~\n") + "..."), 'runLog') time.sleep(self.intSleepTime) #listNewResultFind = [] doMySql = DoMysql(dictMsgForMysql) objConnection2 = doMySql.connectionMySQL() for dictInListItem in listResult: intShopId = dictInListItem.get(self.strFieldCompare1) intStudentId = dictInListItem.get(self.strFieldCompare2) intId = dictInListItem.get(self.strFieldCompare3) try: with objConnection2.cursor() as cursor: strSearchIntNextSql = ( ("SELECT " + self.strField + " FROM " + self.strTable + " WHERE " + self.strFieldCompare1 + " = %d AND " + self.strFieldCompare2 + " = %d AND " + self.strFieldCompare3 + " = %d") % (intShopId, intStudentId, intId)) #print(strSearchIntNextSql) cursor.execute(strSearchIntNextSql) listInListItemResult = cursor.fetchall() dictItemField = listInListItemResult[0] #print(dictItemField) intFieldValue = dictItemField.get(self.strField) if (intFieldValue == self.intNext): if (self.fileUtil.boolWhetherShowLog & True): self.fileUtil.writerContent( ((self.strFieldCompare1 + " = %d, " + self.strFieldCompare2 + "= %d及" + self.strFieldCompare3 + " = %d的已经更改") % (intShopId, intStudentId, intId)), 'runLog') else: listNewResultFind.append(dictInListItem) if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ((self.strFieldCompare1 + " = %d, " + self.strFieldCompare2 + "= %d及" + self.strFieldCompare3 + " + %d的还未更改" + self.strField + " = %d") % (intShopId, intStudentId, intId, intFieldValue)), 'runLog') cursor.close() finally: if objConnection2._closed: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( "第二次查询连接意外关闭", 'runLog') objConnection2.close() if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("第二次查询连接已正常关闭", 'runLog') strResultItem = "" if len(listNewResultFind) == 0: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( (("所有" + self.strField + "的值已经更改为%d") % (self.intNext)), 'runLog') else: strLogContent = ( (doMySql.strDatabase + "数据库中, " + str(intTime) + "秒后,还有如下" + str(len(listNewResultFind)) + "条字段的" + self.strField + "值依然是%d,如下") % (self.intFirst)) strContentEnd = '' strNewResultFindMsgTable = PrettyTableDo( ).getMsgForTableShowByListDict(listNewResultFind, 1) for listNewResultItem in listNewResultFind: strResultItem += str(listNewResultItem) + "\n" if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( (strLogContent + "\n" + strNewResultFindMsgTable), 'runLog') # self.fileUtil.writerContent(strNewResultFineMsgTable, 'runLog') if self.intIndexWhetherCheck == 1: if self.proNameForLetter != 'null': if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("将尝试重启服务" + self.proNameForLetter), 'runLog') projectCheck = ProjectCheck(self.fileUtil) intResult = projectCheck.restartProByStrName( self.proNameForLetter) if intResult == 1: strContentEnd = (self.proNameForLetter + "服务已重启") else: strContentEnd = (self.proNameForLetter + "服务重启失败") else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("未配置检测项目", 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("不执行重启服务" + self.proNameForLetter), 'runLog') intNoSendNum = len(listNewResultFind) strContent = "> - 未推送总数有 **" + str( intNoSendNum) + "** 条(" + strContentEnd + ")\n\n" self.dataTemplate.dataAll += strContent return listNewResultFind def getMsgForCheckLetter(self, dictNeedRunMsg): # 获取检测数据库字段所需的数据,并判断是否完全 # 返回一个dict类型的数据 # 存放的字段有 # table_name # field_name # fieldcompare_name1 # fieldcompare_name2 # fieldcompare_name_value # first_field_value # next_field_value # sleeptime dictMsgForCheckLetter = {} for keyItem in dictNeedRunMsg: if ((keyItem == 'table_name') | (keyItem == 'field_name') | (keyItem == 'fieldcompare_name1') | (keyItem == 'fieldcompare_name2') | (keyItem == 'fieldcompare_name3') | (keyItem == 'fieldcompare_name4') | (keyItem == 'fieldcompare_name_value') | (keyItem == 'first_field_value') | (keyItem == 'next_field_value') | (keyItem == 'sleeptime') | (keyItem == 'fieldcompare_name3')): if (dictNeedRunMsg.get(keyItem) != ''): dictMsgForCheckLetter[keyItem] = dictNeedRunMsg.get( keyItem) else: dictMsgForCheckLetter.clear() dictMsgForCheckLetter['err'] = "Msg Incomplete" break return dictMsgForCheckLetter def getNoSendMsgYesterday(self, dictMsgForMysql): # 从数据库中获取前一天未发送消息的字段,存放到一个list集合 # dictMsgForMysql: 连接数据库所需的信息 # 返回一个list集合 listNoSend = [] dateYesterday = self.runTime.getPastDataDay(1) intYesterdayStamp = self.runTime.getTimeStamp(str(dateYesterday), "%Y-%m-%d") intTodayStamp = self.runTime.getTodayStamp() doMySql = DoMysql(dictMsgForMysql) objConnection3 = doMySql.connectionMySQL() if objConnection3 is None: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询未推送连接失败", 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询未推送连接成功", 'runLog') self.fileUtil.writerContent( "准备查找" + str(dateYesterday) + "未推送的字段信息", 'runLog') try: with objConnection3.cursor() as cursor: strSearchNoSend = ( ("SELECT " + self.strFieldCompare1 + " , " + self.strFieldCompare2 + " , " + self.strFieldCompare3 + " FROM " + self.strTable + " WHERE " + self.strField + " = %d " + " AND " + self.strFieldCompareValue + " != " + "'" + "'" + " AND " + self.strFieldCompareValue + " IS NOT NULL" + " AND " + self.strFieldCompareValue + " != " + "'" + "null" + "'" + " AND " + " send_count != 6 AND " + self.strFieldCompare4 + " >= %d AND " + self.strFieldCompare4 + " <= %d") % (self.intFirst, intYesterdayStamp, intTodayStamp)) cursor.execute(strSearchNoSend) listNoSend = cursor.fetchall() cursor.close() finally: if objConnection3._closed: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询未推送数据连接意外关闭", 'runLog') else: objConnection3.close() if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询未推送数据连接已正常关闭", 'runLog') if len(listNoSend) == 0: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("未查找到" + str(dateYesterday) + "未推送的字段信息"), 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("查找到%d条数据未发送" % (len(listNoSend))), 'runLog') return listNoSend def getAlreadySendNumYesterday(self, dictMsgForMysql): # 获取前一天已经发送推送的个数 # dictMsgForMysql: 连接数据库所需的信息 # 返回一个int类型 listAlreadySend = [] intAlreadySendNum = 0 dateYesterday = self.runTime.getPastDataDay(1) intYesterdayStamp = self.runTime.getTimeStamp(str(dateYesterday), "%Y-%m-%d") intTodayStamp = self.runTime.getTodayStamp() doMySql = DoMysql(dictMsgForMysql) objConnection4 = doMySql.connectionMySQL() if objConnection4 is None: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询已推送连接失败", 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询已推送连接成功", 'runLog') self.fileUtil.writerContent( "查找" + str(dateYesterday) + "已推送的字段信息", 'runLog') try: with objConnection4.cursor() as cursor: strSearchAlreadySend = ( ("SELECT COUNT(" + self.strField + ") FROM " + self.strTable + " WHERE " + self.strField + " = %d AND " + self.strFieldCompare4 + " >= %d AND " + self.strFieldCompare4 + " <= %d") % (self.intNext, intYesterdayStamp, intTodayStamp)) cursor.execute(strSearchAlreadySend) listAlreadySend = cursor.fetchall() cursor.close() finally: if objConnection4._closed: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询已推送数据连接意外关闭", 'runLog') else: objConnection4.close() if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询已推送数据连接已正常关闭", 'runLog') if len(listAlreadySend) == 0: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("未查找到" + str(dateYesterday) + "已推送的字段信息"), 'runLog') else: dictItem = listAlreadySend[0] intAlreadySendNum = int( dictItem.get("COUNT(" + self.strField + ")")) if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("查找到%d条数据已发送" % (intAlreadySendNum)), 'runLog') return intAlreadySendNum def getNoSendMsgToday(self, dictMsgForMysql): # 从数据库中获取今天(从零点截止至当前运行此方法的时刻)未发送消息的字段,存放到一个list集合 # dictMsgForMysql: 连接数据库所需的信息 # 返回一个list集合 # 此方法与getNoSendMsgYesterday()方法的实现是一样的,不过就是查找的时间不同。 # 添加此方法的原因是需求变了,即获取当天的数据。--添加于2018-03-14 listNoSend = [] dateTodayBegin = self.runTime.getTime("%Y-%m-%d") intTodayBeginStamp = self.runTime.getTimeStamp(str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTime.getDateTime() intTodayEndStamp = self.runTime.getTimeStamp(dateTodayEnd, "%Y-%m-%d %H:%M:%S") doMySql = DoMysql(dictMsgForMysql) objConnection3 = doMySql.connectionMySQL() if objConnection3 is None: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询未推送连接失败", 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询未推送连接成功", 'runLog') self.fileUtil.writerContent( "查找" + str(dateTodayBegin) + "未推送的字段信息", 'runLog') try: with objConnection3.cursor() as cursor: strSearchNoSend = ( ("SELECT " + self.strFieldCompare1 + " , " + self.strFieldCompare2 + " , " + self.strFieldCompare3 + " FROM " + self.strTable + " WHERE " + self.strField + " = %d " + " AND " + self.strFieldCompareValue + " != " + "'" + "'" + " AND " + self.strFieldCompareValue + " IS NOT NULL" + " AND " + self.strFieldCompareValue + " != " + "'" + "null" + "'" + " AND " + " send_count != 6 AND " + self.strFieldCompare4 + " >= %d AND " + self.strFieldCompare4 + " <= %d") % (self.intFirst, intTodayBeginStamp, intTodayEndStamp)) if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询今日未推送数据sql: " + strSearchNoSend) cursor.execute(strSearchNoSend) listNoSend = cursor.fetchall() cursor.close() finally: if objConnection3._closed: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询未推送数据连接意外关闭", 'runLog') else: objConnection3.close() if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询未推送数据连接已正常关闭", 'runLog') if len(listNoSend) == 0: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("未查找到" + str(dateTodayBegin) + "未推送的字段信息"), 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("查找到%d条数据未发送" % (len(listNoSend))), 'runLog') return listNoSend def getAlreadySendNumToday(self, dictMsgForMysql): # 获取今天(从零点截止至当前运行此方法的时刻)已经发送推送的个数 # dictMsgForMysql: 连接数据库所需的信息 # 返回一个int类型 # 此方法与getAlreadySendNumYesterday()方法的实现是一样的,不过就是查找的时间不同。 # 添加此方法的原因是需求变了,即获取当天的数据。--添加于2018-03-14 listAlreadySend = [] intAlreadySendNum = 0 dateTodayBegin = self.runTime.getTime("%Y-%m-%d") intTodayBeginStamp = self.runTime.getTimeStamp(str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTime.getDateTime() intTodayEndStamp = self.runTime.getTimeStamp(dateTodayEnd, "%Y-%m-%d %H:%M:%S") doMySql = DoMysql(dictMsgForMysql) objConnection4 = doMySql.connectionMySQL() if objConnection4 is None: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询已推送连接失败", 'runLog') else: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("数据库查询已推送连接成功", 'runLog') self.fileUtil.writerContent( "查找" + str(dateTodayBegin) + "已推送的字段信息", 'runLog') try: with objConnection4.cursor() as cursor: strSearchAlreadySend = ( ("SELECT COUNT(" + self.strField + ") FROM " + self.strTable + " WHERE " + self.strField + " = %d AND " + self.strFieldCompare4 + " >= %d AND " + self.strFieldCompare4 + " <= %d") % (self.intNext, intTodayBeginStamp, intTodayEndStamp)) if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询今日已推送数据sql: " + strSearchAlreadySend) cursor.execute(strSearchAlreadySend) listAlreadySend = cursor.fetchall() cursor.close() finally: if objConnection4._closed: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询已推送数据连接意外关闭", 'runLog') else: objConnection4.close() if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent("查询已推送数据连接已正常关闭", 'runLog') if len(listAlreadySend) == 0: if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("未查找到" + str(dateTodayBegin) + "已推送的字段信息"), 'runLog') else: dictItem = listAlreadySend[0] intAlreadySendNum = int( dictItem.get("COUNT(" + self.strField + ")")) if self.fileUtil.boolWhetherShowLog & True: self.fileUtil.writerContent( ("查找到%d条数据已发送" % (intAlreadySendNum)), 'runLog') return intAlreadySendNum def getMsgForMysql(self, dictNeedRunMsg): # 获取连接mysql数据库所需要的数据,并判断是否完全 # 返回一个dict类型的数据 # 存放的字段 # host # port # user # passwd # database dictMsgForMysql = {} for keyItem in dictNeedRunMsg: if ((keyItem == 'host') | (keyItem == 'port') | (keyItem == 'user') | (keyItem == 'passwd') | (keyItem == 'database')): if (dictNeedRunMsg.get(keyItem) != ''): dictMsgForMysql[keyItem] = dictNeedRunMsg.get(keyItem) else: dictMsgForMysql.clear() dictMsgForMysql['err'] = "Msg Incomplete" break return dictMsgForMysql def checkWhetherRestartPm2(self, dictNeedRunMsg): # 检测是否进行重启pm2搭载的项目 # whether_check_pm2字段的值yes/no两个作用 # 一是全局检测pm2 list的输出是否正常(是否有stop),其实现在pm2Check.py中 # 二是在此文件中用来判断,当程序检测到有未推送字段的时候,根据此判断是否进行重启 # add in 2018-04-09 if 'whether_check_pm2' in dictNeedRunMsg: if dictNeedRunMsg.get('whether_check_pm2') == 'yes': intIndex = 1 else: intIndex = 0 return intIndex def checkWhetherExistPmPro(self, dictNeedRunMsg): # 判断是否存在pro_for_letter if 'pro_for_letter' in dictNeedRunMsg: if dictNeedRunMsg.get('whether_check_pm2') != '': intIndex = 1 else: intIndex = 0 return intIndex
def checkTog(self, dictMsgForMysql, dictMsgForCheckPic): # 检测 self.runTime = RunTime() self.dateYesterday = self.runTime.getPastDataDay(1) self.intYesterdayStamp = self.runTime.getTimeStamp(str(self.dateYesterday), "%Y-%m-%d") self.intTodayStamp = self.runTime.getTodayStamp() if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("-->检测" + str(self.dateYesterday) + "图片到达率"), 'runLog') if (((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql)) or ((len(dictMsgForCheckPic) == 1) and ('err' in dictMsgForCheckPic))): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("检测图片到达率所需配置信息不全,致检测任务中止", 'runLog') else: self.strSearchSql = dictMsgForCheckPic.get('sql_path') self.intAccuracy = dictMsgForCheckPic.get('number_accuracy') intArrivalsStandart = int(dictMsgForCheckPic.get('arrivals_standard')) intMark = self.fileUtilObj.checkFileExists(self.strSearchSql) if intMark == 1: strSqlContent = self.fileUtilObj.readFileContent(self.strSearchSql) strTotalSearchSql = self.getToalSql(strSqlContent, self.intYesterdayStamp, self.intTodayStamp) listResultFirst = self.doSearchSql(strTotalSearchSql, dictMsgForMysql) listResult = self.rmoveDecimal(listResultFirst) listMsgForLog = self.getSomeForLog(listResult) picArrivalCompare = PicArrivalCompare(self.fileUtilObj, self.dataTemplateObj, self.listNeedNotSendDateWeek) listNewResultSome = self.getSomeMsg(listResult, intArrivalsStandart) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("查找到的机构信息如下:", 'runLog') for listMsgForLogItem in listMsgForLog: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent((str(listMsgForLogItem)), 'runLog') dictValue = self.getAverageValueTotal(listResultFirst) self.dataTemplateObj.dataAll += (" > - 查找到 **" + str(dictValue.get('totalNum')) + "** 家机构有使用签到,并于" + str(self.dateYesterday) + "一天内总共的图片平均到达率为 **" + str(dictValue.get('averageValue')) + "%** ,其中到达率低于" + str(intArrivalsStandart) + "%的有 **" + str(len(listNewResultSome)) + "** 家机构\n") if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("查找到" + str(dictValue.get('totalNum')) + "家机构有使用签到,并于" + str(self.dateYesterday) + "一天内总共的图片平均到达率为" + str(dictValue.get('averageValue')) + "%,其中到达率低于" + str(intArrivalsStandart) + "%的有" + str(len(listNewResultSome)) + "家机构"), 'runLog') picArrivalCompare.compareData(listResult) picArrivalCompare.writerListTotalToFile(listResult) else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("未发现" + self.strSearchSql + "文件,将停止检测"), 'runLog')
def checkTogToday(self, dictMsgForMysql, dictMsgForCheckPic): # 检测 # 检测当天(从零点截止至当前运行此方法的时刻)的图片到达率 # 添加此方法的原因是需求变了,即获取当天的数据。--添加于2018-03-14 self.runTime = RunTime() # self.dateYesterday = self.runTime.getPastDataDay(1) # self.intYesterdayStamp = self.runTime.getTimeStamp(str(self.dateYesterday), "%Y-%m-%d") # self.intTodayStamp = self.runTime.getTodayStamp() dateTodayBegin = self.runTime.getTime("%Y-%m-%d") intTodayBeginStamp = self.runTime.getTimeStamp(str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTime.getDateTime() intTodayEndStamp = self.runTime.getTimeStamp(dateTodayEnd, "%Y-%m-%d %H:%M:%S") if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("-->检测" + str(dateTodayBegin) + "图片到达率"), 'runLog') if (((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql)) or ((len(dictMsgForCheckPic) == 1) and ('err' in dictMsgForCheckPic))): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("检测图片到达率所需配置信息不全,致检测任务中止", 'runLog') else: self.strSearchSql = dictMsgForCheckPic.get('sql_path') self.intAccuracy = dictMsgForCheckPic.get('number_accuracy') intArrivalsStandart = int(dictMsgForCheckPic.get('arrivals_standard')) intMark = self.fileUtilObj.checkFileExists(self.strSearchSql) if intMark == 1: strSqlContent = self.fileUtilObj.readFileContent(self.strSearchSql) strTotalSearchSql = self.getToalSql(strSqlContent, intTodayBeginStamp, intTodayEndStamp) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("查询图片到达率sql: " + strTotalSearchSql), 'runLog') listResultFirst = self.doSearchSql(strTotalSearchSql, dictMsgForMysql) listResult = self.rmoveDecimal(listResultFirst) # listMsgForLog = self.getSomeForLog(listResult) # 上面的代码只是打印日志,使用集合打印.现在用表格化输出,使用此下代码 strMsgTable = PrettyTableDo().getMsgForTableShowByListDict(listResultFirst, 1) # 方法getSomeForLog()闲置不用 # change in 2018-04-02 picArrivalCompare = PicArrivalCompare(self.fileUtilObj, self.dataTemplateObj, self.listNeedNotSendDateWeek) listNewResultSome = self.getSomeMsg(listResult, intArrivalsStandart) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("数据库中查找到今日使用了设备的机构信息如下:\n" + strMsgTable), 'runLog') # for listMsgForLogItem in listMsgForLog: # if (self.fileUtilObj.boolWhetherShowLog & True): # self.fileUtilObj.writerContent((str(listMsgForLogItem)), 'runLog') dictValue = self.getAverageValueTotal(listResultFirst) self.dataTemplateObj.dataAll += (" > - 查找到 **" + str(dictValue.get('totalNum')) + "** 家机构有使用签到,并于" + str(dateTodayBegin) + "一天内总共的图片平均到达率为 **" + str(dictValue.get('averageValue')) + "%** ,其中到达率低于" + str(intArrivalsStandart) + "%的有 **" + str(len(listNewResultSome)) + "** 家机构\n") if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("查找到" + str(dictValue.get('totalNum')) + "家机构有使用签到,并于" + str(dateTodayBegin) + "一天内总共的图片平均到达率为" + str(dictValue.get('averageValue')) + "%,其中到达率低于" + str(intArrivalsStandart) + "%的有" + str(len(listNewResultSome)) + "家机构"), 'runLog') picArrivalCompare.compareData(listResultFirst) picArrivalCompare.writerListTotalToFile(listResult) else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("未发现" + self.strSearchSql + "文件,将停止检测"), 'runLog')
class PicArrivals: # 检测图片到达率 # 根据其配置,一天只检测一次 # 获取前一天总的图片到达率 # 添加获取当前的图片到达率 def __init__(self, fileUtilObj, dictNeedRunMsg, dataTemplateObj, intHourTime, intHourCheckAll, allModuleRunAllObj): self.fileUtilObj = fileUtilObj self.dataTemplateObj = dataTemplateObj self.intHourTime = intHourTime self.intHourCheckAll = intHourCheckAll self.allModuleRunAllObj = allModuleRunAllObj self.listNeedNotSendDateWeek = self.getNeedNotSendWeekDate(dictNeedRunMsg) if (self.intHourTime == self.intHourCheckAll) or (self.intHourTime == ("0" + self.intHourCheckAll)): if self.allModuleRunAllObj.intOverAllCheckPicArrivals == 0: dictMsgForMysql = self.getMsgForMysql(dictNeedRunMsg) dictMsgForCheckPic = self.getMsgForCheckPic(dictNeedRunMsg) self.checkTogToday(dictMsgForMysql, dictMsgForCheckPic) self.allModuleRunAllObj.intOverAllCheckPicArrivals = 1 if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("今日检测图片到达率次数已标记为" + str(self.allModuleRunAllObj.intOverAllCheckPicArrivals)), 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("-->今日" + str(self.intHourCheckAll) + "时内已检测图片到达率,今日将不再全面检测"), 'runLog') def checkTog(self, dictMsgForMysql, dictMsgForCheckPic): # 检测 self.runTime = RunTime() self.dateYesterday = self.runTime.getPastDataDay(1) self.intYesterdayStamp = self.runTime.getTimeStamp(str(self.dateYesterday), "%Y-%m-%d") self.intTodayStamp = self.runTime.getTodayStamp() if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("-->检测" + str(self.dateYesterday) + "图片到达率"), 'runLog') if (((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql)) or ((len(dictMsgForCheckPic) == 1) and ('err' in dictMsgForCheckPic))): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("检测图片到达率所需配置信息不全,致检测任务中止", 'runLog') else: self.strSearchSql = dictMsgForCheckPic.get('sql_path') self.intAccuracy = dictMsgForCheckPic.get('number_accuracy') intArrivalsStandart = int(dictMsgForCheckPic.get('arrivals_standard')) intMark = self.fileUtilObj.checkFileExists(self.strSearchSql) if intMark == 1: strSqlContent = self.fileUtilObj.readFileContent(self.strSearchSql) strTotalSearchSql = self.getToalSql(strSqlContent, self.intYesterdayStamp, self.intTodayStamp) listResultFirst = self.doSearchSql(strTotalSearchSql, dictMsgForMysql) listResult = self.rmoveDecimal(listResultFirst) listMsgForLog = self.getSomeForLog(listResult) picArrivalCompare = PicArrivalCompare(self.fileUtilObj, self.dataTemplateObj, self.listNeedNotSendDateWeek) listNewResultSome = self.getSomeMsg(listResult, intArrivalsStandart) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("查找到的机构信息如下:", 'runLog') for listMsgForLogItem in listMsgForLog: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent((str(listMsgForLogItem)), 'runLog') dictValue = self.getAverageValueTotal(listResultFirst) self.dataTemplateObj.dataAll += (" > - 查找到 **" + str(dictValue.get('totalNum')) + "** 家机构有使用签到,并于" + str(self.dateYesterday) + "一天内总共的图片平均到达率为 **" + str(dictValue.get('averageValue')) + "%** ,其中到达率低于" + str(intArrivalsStandart) + "%的有 **" + str(len(listNewResultSome)) + "** 家机构\n") if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("查找到" + str(dictValue.get('totalNum')) + "家机构有使用签到,并于" + str(self.dateYesterday) + "一天内总共的图片平均到达率为" + str(dictValue.get('averageValue')) + "%,其中到达率低于" + str(intArrivalsStandart) + "%的有" + str(len(listNewResultSome)) + "家机构"), 'runLog') picArrivalCompare.compareData(listResult) picArrivalCompare.writerListTotalToFile(listResult) else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("未发现" + self.strSearchSql + "文件,将停止检测"), 'runLog') def checkTogToday(self, dictMsgForMysql, dictMsgForCheckPic): # 检测 # 检测当天(从零点截止至当前运行此方法的时刻)的图片到达率 # 添加此方法的原因是需求变了,即获取当天的数据。--添加于2018-03-14 self.runTime = RunTime() # self.dateYesterday = self.runTime.getPastDataDay(1) # self.intYesterdayStamp = self.runTime.getTimeStamp(str(self.dateYesterday), "%Y-%m-%d") # self.intTodayStamp = self.runTime.getTodayStamp() dateTodayBegin = self.runTime.getTime("%Y-%m-%d") intTodayBeginStamp = self.runTime.getTimeStamp(str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTime.getDateTime() intTodayEndStamp = self.runTime.getTimeStamp(dateTodayEnd, "%Y-%m-%d %H:%M:%S") if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("-->检测" + str(dateTodayBegin) + "图片到达率"), 'runLog') if (((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql)) or ((len(dictMsgForCheckPic) == 1) and ('err' in dictMsgForCheckPic))): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("检测图片到达率所需配置信息不全,致检测任务中止", 'runLog') else: self.strSearchSql = dictMsgForCheckPic.get('sql_path') self.intAccuracy = dictMsgForCheckPic.get('number_accuracy') intArrivalsStandart = int(dictMsgForCheckPic.get('arrivals_standard')) intMark = self.fileUtilObj.checkFileExists(self.strSearchSql) if intMark == 1: strSqlContent = self.fileUtilObj.readFileContent(self.strSearchSql) strTotalSearchSql = self.getToalSql(strSqlContent, intTodayBeginStamp, intTodayEndStamp) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("查询图片到达率sql: " + strTotalSearchSql), 'runLog') listResultFirst = self.doSearchSql(strTotalSearchSql, dictMsgForMysql) listResult = self.rmoveDecimal(listResultFirst) # listMsgForLog = self.getSomeForLog(listResult) # 上面的代码只是打印日志,使用集合打印.现在用表格化输出,使用此下代码 strMsgTable = PrettyTableDo().getMsgForTableShowByListDict(listResultFirst, 1) # 方法getSomeForLog()闲置不用 # change in 2018-04-02 picArrivalCompare = PicArrivalCompare(self.fileUtilObj, self.dataTemplateObj, self.listNeedNotSendDateWeek) listNewResultSome = self.getSomeMsg(listResult, intArrivalsStandart) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("数据库中查找到今日使用了设备的机构信息如下:\n" + strMsgTable), 'runLog') # for listMsgForLogItem in listMsgForLog: # if (self.fileUtilObj.boolWhetherShowLog & True): # self.fileUtilObj.writerContent((str(listMsgForLogItem)), 'runLog') dictValue = self.getAverageValueTotal(listResultFirst) self.dataTemplateObj.dataAll += (" > - 查找到 **" + str(dictValue.get('totalNum')) + "** 家机构有使用签到,并于" + str(dateTodayBegin) + "一天内总共的图片平均到达率为 **" + str(dictValue.get('averageValue')) + "%** ,其中到达率低于" + str(intArrivalsStandart) + "%的有 **" + str(len(listNewResultSome)) + "** 家机构\n") if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("查找到" + str(dictValue.get('totalNum')) + "家机构有使用签到,并于" + str(dateTodayBegin) + "一天内总共的图片平均到达率为" + str(dictValue.get('averageValue')) + "%,其中到达率低于" + str(intArrivalsStandart) + "%的有" + str(len(listNewResultSome)) + "家机构"), 'runLog') picArrivalCompare.compareData(listResultFirst) picArrivalCompare.writerListTotalToFile(listResult) else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("未发现" + self.strSearchSql + "文件,将停止检测"), 'runLog') def getAverageValue(self, listResult): # listResult: 所有数据,包括达到100的 # 统计平均值 # dict里存放的字段有 # totalNum: 所有机构个数 # averageValue: 图片到达率平均值 dictValue = {} intTotalNum = len(listResult) floatTotalValue = 0.0 if intTotalNum != 0: for listResultItem in listResult: floatValue = float(listResultItem.get('rate')) floatTotalValue += floatValue floatAverageValue = (floatTotalValue / intTotalNum) else: floatAverageValue = 0.00 dictValue['totalNum'] = intTotalNum dictValue['averageValue'] = round(floatAverageValue, int(self.intAccuracy)) return dictValue def getAverageValueTotal(self, listResult): # listResult: 所有数据,包括达到100的 # 统计平均值 # dict里存放的字段有 # totalNum: 所有机构个数 # averageValue: 图片到达率平均值 # 计算所有的图片平均到达率,这个方法时根据sql所查出来的(所有数据的pic_to_ed字段值的总数/pic_to_all字段值的总数) # 以此来作为平均图片到达率 # 而上面的之前方法getAverageValue()是计算rate字段值的总数/数据的条数 # 现在看来getAverageValue()方法得到的值并不能作为所有的平均图片到达率,而是现在的此方法 # this method add in 2018-05-21 dictValue = {} intTotalNum = len(listResult) if intTotalNum != 0: intTotalEd = 0 intTotalAll = 0 for listResultItem in listResult: intEdValue = int(listResultItem.get('pic_to_ed')) intAllValue = int(listResultItem.get('pic_to_all')) intTotalEd += intEdValue intTotalAll += intAllValue floatAverageValue = (intTotalEd / intTotalAll) else: floatAverageValue = 0.00 dictValue['totalNum'] = intTotalNum dictValue['averageValue'] = round((floatAverageValue * 100), int(self.intAccuracy)) return dictValue def getToalSql(self, strSqlFileContent, intTodayBeginStamp, intTodayEndStamp): # 组合sql语句,从sql文件中读取到的sql语句中存在格式化字符%d # strSqlFileContent: 从sql文件中读取到的sql内容 # intTodayBeginStamp: 前一天0点的时间戳 # intTodayEndStamp: 运行当天-点的时间戳 strNewSql = (strSqlFileContent %(intTodayBeginStamp, intTodayEndStamp)) return strNewSql def doSearchSql(self, strSearchSql, dictMsgForMysql): # 执行sql语句,这里用来做查找 # strSql: 要执行的sql语句 listResult = [] doMySql = DoMysql(dictMsgForMysql) connectionObj = doMySql.connectionMySQL() if connectionObj is None: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("数据库查询图片到达率连接失败", 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("数据库查询图片到达率已连接", 'runLog') try: with connectionObj.cursor() as cursor: cursor.execute(strSearchSql) listResult = cursor.fetchall() if len(listResult) == 0: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("未查找到数据", 'runLog') except: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("查询时出错", 'runLog') finally: connectionObj.close() if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("数据库查询图片连接已关闭", 'runLog') return listResult def rmoveDecimal(self, listResult): # 去除decimal listNewResult = [] for listResultItem in listResult: dictResultItem = {} dictResultItem['org_name'] = listResultItem.get('org_name') dictResultItem['shop_name'] = listResultItem.get('shop_name') dictResultItem['org_id'] = listResultItem.get('org_id') dictResultItem['shop_id'] = listResultItem.get('shop_id') dictResultItem['rate'] = float(listResultItem.get('rate')) listNewResult.append(dictResultItem) return listNewResult def getSomeMsg(self, listResult, intRate): # listResult:搜索到的全部数据 # intRate: 参数,这里例如为80 # 提起出到达率为达到80的机构 listNewResult = [] for listResultItem in listResult: if(float(listResultItem.get('rate')) <= float(intRate)): listNewResult.append(listResultItem) return listNewResult def getSomeForLog(self, listResult): # 获取机构的部分数据,为显示在log文件上 # listResult: 查找到的全部数据 listTitle = ["机构名", "校区名", "机构id", "校区id", "图片到达率"] listSomeForLog = [] listSomeForLog.append(listTitle) for listResultItem in listResult: listSomeForLogItem = [] strOrgName = listResultItem.get('org_name') strShopName = listResultItem.get('shop_name') strOrgId = listResultItem.get('org_id') strShopId = listResultItem.get('shop_id') strRate = listResultItem.get('rate') listSomeForLogItem.append(strOrgName) listSomeForLogItem.append(strShopName) listSomeForLogItem.append(strOrgId) listSomeForLogItem.append(strShopId) listSomeForLogItem.append(strRate) listSomeForLog.append(listSomeForLogItem) return listSomeForLog def getMsgForMysql(self, dictNeedRunMsg): # 获取连接mysql数据库所需要的数据,并判断是否完全 # 返回一个dict类型的数据 # 存放的字段 # host # port # user # passwd # database dictMsgForMysql = {} for keyItem in dictNeedRunMsg: if((keyItem == 'host') | (keyItem == 'port') | (keyItem == 'user') | (keyItem == 'passwd') | (keyItem == 'database')): if dictNeedRunMsg.get(keyItem) != '': dictMsgForMysql[keyItem] = dictNeedRunMsg.get(keyItem) else: dictMsgForMysql.clear() dictMsgForMysql['err'] = "Msg Incomplete" break return dictMsgForMysql def getMsgForCheckPic(self, dictNeedRunMsg): # 获取检测图片到达率所需的数据,并判断数据是否完全 # 返回一个dict类型的数据 # sql_path: 存放sql语句的文件路径及文件名 # number_accuracy: 保留的小数的个数,精度范围 # arrivals_standard: 到达率的一个标准 dictMsgForCheckPic = {} for keyItem in dictNeedRunMsg: if((keyItem == 'sql_path') | (keyItem == 'number_accuracy') | (keyItem == 'arrivals_standard')): if dictNeedRunMsg.get(keyItem) != '': dictMsgForCheckPic[keyItem] = dictNeedRunMsg.get(keyItem) else: dictMsgForCheckPic.clear() dictMsgForCheckPic['err'] = "Msg Incomplete" break return dictMsgForCheckPic def getNeedNotSendWeekDate(self, dictNeedRunMsg): # need_not_send_dateweek: 指定周几不发送未使用设备的机构列表到钉钉 # 这项配置可以不配置,并不是必须的配置参数,如果未进行配置那么则表示周一至周日都发送 # add in -2018-04-02 listNeedNotSendDateWeek = [] if 'need_not_send_dateweek' in dictNeedRunMsg: strNeedNotSendWeekDate = dictNeedRunMsg.get('need_not_send_dateweek') listNeedNotSendDateWeek = strNeedNotSendWeekDate.split(' ') return listNeedNotSendDateWeek
def showLogAndTemplate(self, dictNewResult): # dictNewResult: 存放数据的dict # 添加新需求-->将减少的机构发送显示到dingTalk中 # 添加判断,若增加或减少的机构为0,则日志中不打印 # add --2018-03-28 # 添加限定条件,即如限定周日周六两天不发送减少的机构列表到dingTalk中 # add in -2018-04-02 # 添加表格化输出,取消直接list打印 # add in 2018-04-02 listTotalExist = dictNewResult['listTotalExist'] listDataOnlyExistForBY = dictNewResult['listDataOnlyExistForBY'] listDataOnlyExistForY = dictNewResult['listDataOnlyExistForY'] dictContentResult = self.judgeMentChangeForNew(listTotalExist, listDataOnlyExistForBY, listDataOnlyExistForY) strTotalReduceContent = '' prettyTableDo = PrettyTableDo() if len(listTotalExist) != 0: strTotalExistTable = prettyTableDo.getMsgForTableShowByListDict( listTotalExist, 1) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ((str(dictContentResult.get('strTotalExistContent'))) + "详情如下\n" + strTotalExistTable), 'runLog') # for listTotalExistItem in listTotalExist: # self.fileUtilObj.writerContent(str(listTotalExistItem), 'runLog') if len(listDataOnlyExistForY) != 0: strDataOnlyExistForYTable = prettyTableDo.getMsgForTableShowByListDict( listDataOnlyExistForY, 1) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ((str(dictContentResult.get('strOnlyAddContent'))) + "增加详情如下\n" + strDataOnlyExistForYTable), 'runLog') # for listDataOnlyExistForYItem in listDataOnlyExistForY: # self.fileUtilObj.writerContent(str(listDataOnlyExistForYItem), 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("无增加的机构", 'runLog') if len(listDataOnlyExistForBY) != 0: strDataOnlyExistForBYTable = prettyTableDo.getMsgForTableShowByListDict( listDataOnlyExistForBY, 1) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ((str(dictContentResult.get('strOnlyReduceContent'))) + "减少详情如下\n" + strDataOnlyExistForBYTable), 'runLog') for listDataOnlyExistForBYItem in listDataOnlyExistForBY: # self.fileUtilObj.writerContent(str(listDataOnlyExistForBYItem), 'runLog') strTotalReduceContent += ( listDataOnlyExistForBYItem.get('org_name') + " - " + listDataOnlyExistForBYItem.get('shop_name') + "\n\n") else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("无减少的机构", 'runLog') if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( (str(dictContentResult.get('strTotalChangeContent'))), 'runLog') self.dataTemplateObj.dataAll += ("[" + str( dictContentResult.get('strOnlyAddContent') + dictContentResult.get('strOnlyReduceContent') + dictContentResult.get('strTotalChangeContent')) + "]\n\n") strWeekNum = RunTime().getWeekNum() if strWeekNum in self.listNeedNotSendDateWeek: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ("当前为周" + strWeekNum + ",不发送到钉钉"), 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("今日减少机构列表信息将添加到消息模板中", 'runLog') if len(listDataOnlyExistForBY) != 0: self.dataTemplateObj.dataAll += "减少机构如下: \n\n" + strTotalReduceContent + "\n\n"
class CountPicNum: # 统计'动态','食谱'这两项当天上传的图片数量 # 此项为每天只检测一次 # 打算在这里将存放sql语句的文件写死 strGetFoodPicNumSql = "sql/get-foodPicNum.sql" strGetDynamicPicNumSql = "sql/get-dynamicPicNum.sql" def __init__(self, fileUtilObj, dataTempObj, dictNeedRunMsg, intNowHourTime, intHourCheckAll, allModuleRunAllObj): self.fileUtilObj = fileUtilObj self.dataTempObj = dataTempObj self.runTimeObj = RunTime() self.intNowHourTime = intNowHourTime self.intHourCheckAll = intHourCheckAll self.allModuleRunAllObj = allModuleRunAllObj if ((self.intNowHourTime == self.intHourCheckAll) or (self.intNowHourTime == ("0" + self.intHourCheckAll))): if(self.allModuleRunAllObj.intOverAllCountNum == 0): if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("-->执行统计图片数量", 'runLog') dictMsgForMysql = self.getMsgForMysql(dictNeedRunMsg) if ((len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql)): if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent(("统计'动态','食谱'图片数量所需配置信息不全,致检测任务中止"), 'runLog') else: dateTodayBegin = self.runTimeObj.getTime("%Y-%m-%d") self.intTodayBeginStamp = self.runTimeObj.getTimeStamp(str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTimeObj.getDateTime() self.intTodayEndStamp = self.runTimeObj.getTimeStamp(dateTodayEnd, "%Y-%m-%d %H:%M:%S") self.doCount(dictMsgForMysql, dictNeedRunMsg) self.allModuleRunAllObj.intOverAllCountNum = 1 if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("今日统计图片数量操作已经标记为1", 'runLog') else: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("-->统计图片数量今日已执行,今日将不再执行", 'runLog') else: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("未到达时间,不执行统计图片数量", 'runLog') def doCount(self, dictMsgForMysql, dictNeedRunMsg): # 总执行 if 'whether_count_food' in dictNeedRunMsg: if dictNeedRunMsg.get('whether_count_food') == 'yes': if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("开始统计食谱的图片数量", 'runLog') listResult = self.getCountFoodPicNum(dictMsgForMysql) if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent(("获取到的结果为:" + str(listResult)), 'runLog') floatFoodPicNum = listResult[0].get('foodPicNum') if(floatFoodPicNum is None): floatFoodPicNum = 0 strSendData = ("> - 查找到今日(截止至目前" + str(self.intHourCheckAll) + "时)食谱中上传的图片有 **" + str(floatFoodPicNum) + "** 张") self.dataTempObj.dataAll += strSendData + "\n\n" if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("生成数据如: " + strSendData, 'runLog') else: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("不统计食谱的图片数量", 'runLog') if 'whether_count_dynamic' in dictNeedRunMsg: if dictNeedRunMsg.get('whether_count_dynamic') == 'yes': if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("开始统计动态的图片数量", 'runLog') listResult = self.getCountDynamicPicNum(dictMsgForMysql) if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent(("获取到的结果为:" + str(listResult)), 'runLog') floatDynamicPicNum = listResult[0].get('dynamicPicNum') if(floatDynamicPicNum is None): floatDynamicPicNum = 0 strSendData = ("> - 查找到今日(截止至目前" + str(self.intHourCheckAll) + "时)动态中上传的图片有 **" + str(floatDynamicPicNum) + "** 张") self.dataTempObj.dataAll += strSendData + "\n\n" if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("生成数据如: " + strSendData, 'runLog') else: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("不统计动态的图片数量", 'runLog') def getCountFoodPicNum(self, dictMsgForMysql): # 查询食谱图片数量 strCountFoodPicSql = self.fileUtilObj.readFileContent(self.strGetFoodPicNumSql) strTotalSql = self.getToalSql(strCountFoodPicSql, self.intTodayBeginStamp, self.intTodayEndStamp) if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent(("查询食谱图片数量sql: " + strTotalSql), 'runLog') listResult = self.doSearchSql(strTotalSql, dictMsgForMysql) # print("listResult: ") # print(str(listResult)) return listResult def getCountDynamicPicNum(self, dictMsgForMysql): # 查询动态图片数量 strCountDynamicPicSql = self.fileUtilObj.readFileContent(self.strGetDynamicPicNumSql) strTotalSql = self.getToalSql(strCountDynamicPicSql, self.intTodayBeginStamp, self.intTodayEndStamp) if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent(("查询动态图片数量sql: " + strTotalSql), 'runLog') listResult = self.doSearchSql(strTotalSql, dictMsgForMysql) return listResult def doSearchSql(self, strSearchSql, dictMsgForMysql): # 执行sql语句,这里用来做查找 # strSql: 要执行的sql语句 listResult = [] doMySql = DoMysql(dictMsgForMysql) connectionObj = doMySql.connectionMySQL() if (connectionObj is None): if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("数据库查询连接失败", 'runLog') else: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("数据库查询已连接", 'runLog') try: with connectionObj.cursor() as cursor: cursor.execute(strSearchSql) listResult = cursor.fetchall() if (len(listResult) == 0): if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("未查找到数据", 'runLog') except: if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("查询时出错", 'runLog') finally: connectionObj.close() if (self.fileUtilObj.boolWhetherShowLog & True): self.fileUtilObj.writerContent("数据库查询连接已关闭", 'runLog') return listResult def getToalSql(self, strSqlFileContent, intTodayBeginStamp, intTodayEndStamp): # 组合sql语句,从sql文件中读取到的sql语句中存在格式化字符%d # strSqlFileContent: 从sql文件中读取到的sql内容 # intTodayBeginStamp: 前一天0点的时间戳 # intTodayEndStamp: 运行当天-点的时间戳 strNewSql = (strSqlFileContent % (intTodayBeginStamp, intTodayEndStamp)) return strNewSql def getMsgForMysql(self, dictNeedRunMsg): # 获取连接mysql数据库所需要的数据,并判断是否完全 # 返回一个dict类型的数据 # 存放的字段 # host # port # user # passwd # database dictMsgForMysql = {} for keyItem in dictNeedRunMsg: if ((keyItem == 'host') | (keyItem == 'port') | (keyItem == 'user') | (keyItem == 'passwd') | (keyItem == 'database')): if (dictNeedRunMsg.get(keyItem) != ''): dictMsgForMysql[keyItem] = dictNeedRunMsg.get(keyItem) else: dictMsgForMysql.clear() dictMsgForMysql['err'] = "Msg Incomplete" break return dictMsgForMysql
class IntegralSit: # 获取积分使用详情 # 此项为每天只检测一次 strGetIntegralSituationSql = "sql/get-integralSituation.sql" def __init__(self, fileUtilObj, dataTempObj, dictNeedRunMsg, intNowHourTime, intHourCheckAll, allModuleRunAllObj): self.fileUtilObj = fileUtilObj self.dataTempObj = dataTempObj self.intNowHourTime = intNowHourTime self.intHourCheckAll = intHourCheckAll self.allModuleRunAllObj = allModuleRunAllObj self.runTimeObj = RunTime() self.mysqlUtilObj = MySqlUtil(self.fileUtilObj) if (self.intNowHourTime == self.intHourCheckAll) or (self.intNowHourTime == ("0" + self.intHourCheckAll)): if self.allModuleRunAllObj.intOverAllGetIntegralSit == 0: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("-->执行获取积分使用详情", 'runLog') dictMsgForMysql = self.mysqlUtilObj.getMsgForMysql( dictNeedRunMsg) if (len(dictMsgForMysql) == 1) and ('err' in dictMsgForMysql): if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent( ("获取积分使用详情所需mysql信息不全,致检测任务中止"), 'runLog') else: dateTodayBegin = self.runTimeObj.getTime("%Y-%m-%d") self.intTodayBeginStamp = self.runTimeObj.getTimeStamp( str(dateTodayBegin), "%Y-%m-%d") dateTodayEnd = self.runTimeObj.getDateTime() self.intTodayEndStamp = self.runTimeObj.getTimeStamp( dateTodayEnd, "%Y-%m-%d %H:%M:%S") self.doGetIntegralSit(dictMsgForMysql) self.allModuleRunAllObj.intOverAllGetIntegralSit = 1 if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("今日获取积分使用详情已经标记为1", 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("-->获取积分使用详情今日已执行,今日将不再执行", 'runLog') else: if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent("未到达时间,不执行获取积分使用详情", 'runLog') def doGetIntegralSit(self, dictMsgForMysql): # 查询并将数据存入模板 strSqlContent = self.fileUtilObj.readFileContent( self.strGetIntegralSituationSql) strTotalSql = self.getToalSql(strSqlContent, self.intTodayBeginStamp, self.intTodayEndStamp) listResult = self.mysqlUtilObj.doSearchSql(strTotalSql, dictMsgForMysql) if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("获取积分使用详情sql: " + strTotalSql), 'runLog') self.fileUtilObj.writerContent(("获取到的结果为: " + str(listResult)), 'runLog') decTotalIntegNum = listResult[0].get('totalIntegralNum') if decTotalIntegNum is None: decTotalIntegNum = 0 intShopNum = listResult[0].get('totalShopNum') if intShopNum is None: intShopNum = 0 strResultContent = ("> - 查找到今日(截止至目前" + str(self.intNowHourTime) + "时)使用了积分的校区数总计 **" + str(intShopNum) + "** 所,积分使用次数总计 **" + str(decTotalIntegNum) + "** 次") self.dataTempObj.dataAll += strResultContent + "\n\n" if self.fileUtilObj.boolWhetherShowLog & True: self.fileUtilObj.writerContent(("生成数据如:" + strResultContent), 'runLog') def getToalSql(self, strSqlFileContent, intTodayBeginStamp, intTodayEndStamp): # 组合sql语句,从sql文件中读取到的sql语句中存在格式化字符%d # strSqlFileContent: 从sql文件中读取到的sql内容 # intTodayBeginStamp: 前一天0点的时间戳 # intTodayEndStamp: 运行当天-点的时间戳 strNewSql = (strSqlFileContent % (intTodayBeginStamp, intTodayEndStamp)) return strNewSql