class Sender(object): def __init__(self): self.parser = Parser() self.emailer = Emailer() self.dber = DatabaseInterface() self.logger = getLogger('root') @property def sendEmail(self): htmlContent = self.parser.getParserResult() sendStatus = self.emailer.sendMessage(getEmailTitle(), htmlContent) if sendStatus: self.logger.info("send email success") else: self.logger.info("send email failed") self.dber.deleteRecord() self.logger.info("delete record success")
class Monitor(object): def __init__(self): self.logger = getLogger('consistency') self.emailer = Emailer() self.affidList = get_affid() def get_group(self): self.groupList = list() for itercount in range(1, len(DIMENSION)): for combination in combinations(DIMENSION, itercount): self.groupList.append(combination) self.logger.info('get group combination count: {0}'.format(len(self.groupList))) def get_result(self): self.get_group() start, end = getHourTimestamp() aff_id = choice(self.affidList) no_dimension_param = NO_DIMENSION_PARAM % (start, end, METRIC, aff_id) no_dimension_result = getResult(no_dimension_param.replace("'", '"')) no_dimension_map = getSortedMap(no_dimension_result) for group in self.groupList: dimension_param = DIMENSION_PARAM % (start, end, METRIC, list(group), aff_id) dimension_result = getResult(dimension_param.replace("'", '"')) dimesion_map = getSortedMap(dimension_result) if not dimesion_map or not no_dimension_map: self.logger.info('result is not exist: dimension query result: {0}\ntimeseries query result: {1}\n'.format(dimesion_map, no_dimension_map)) return -1 if Equaler(dimesion_map) == Equaler(no_dimension_map): self.logger.info("{0}\t{1}\t{2}\n".format("pass", group, aff_id)) else: title = 'Warn : Detected data inconsistencies with group: {0} and aff_id: {1}'.format(group, aff_id) content = """ aff_id: {0} group: {1} dimension query result: {2} timeseries query result: {3}""".format(aff_id, group, dimesion_map, no_dimension_map) self.logger.error(content) status = self.emailer.sendMessage(title, content) if status: self.logger.info('send email success') else: self.logger.error('send email failed')
class DuplicateConvMonitor(object): def __init__(self): self.format = '%Y-%m-%dT%H:00:00' self.emiler = Emailer() self.logger = getLogger('convmonitor') self.splitoffers = getSplitOffers() self.get_trange() # self.get_param() def get_trange(self): end = datetime.datetime.now() if end.hour == 0: begin = datetime.datetime.today() + datetime.timedelta(days=-1) else: begin = datetime.datetime.today() self.beginhour = begin.strftime('%Y-%m-%dT00:00:00') self.endhour = end.strftime(self.format) def get_param(self): self.tid_param = DUPLICATE_CONV_TMPLATE % (self.beginhour, self.endhour) self.tid_convtime_param = DUPLICATE_CONV_TID_TMPLATE % (self.beginhour, self.endhour) def get_transaction_id(self, broker_param): idList = list() try: r = requests.post(BROKER_URL, data = broker_param) self.logger.info('use broker param: {0} get {1}'.format(broker_param, r.tex)) if r.text == '[ ]': self.logger.info('not find duplicate conversions between {0} to {1}, get {2}'.format(self.beginhour, self.endhour, r.text)) else: try: content = json.loads(r.text) self.logger.info(content) except Exception as ex: self.logger.error('can not parser broker result to json format') else: for data in content: idList.append(data.get('event').get('transaction_id')) except Exception as ex: raise ex self.logger.error('error occuar when send http post to broker') return idList def send(self, title, content): status = self.emiler.sendMessage(title, content) if status: self.logger.info('send email success!') else: self.logger.info('send email failed!') @property def monitor(self): idList = list() for selectorList in self.splitoffers: selectorStr = str(selectorList).replace("'", '"') tid_param = DUPLICATE_CONV_TMPLATE % (self.beginhour, self.endhour, selectorStr) tid_list = self.get_transaction_id(tid_param) self.logger.info('use signal offer group get {0}'.format(tid_list)) idList.extend(tid_list) time.sleep(0.5) title = 'use [transaction_id] find {0} duplicate conversions between {1} to {2}'.format( len(idList), self.beginhour, self.endhour ) content = str(idList) if len(idList) > 0: self.send(title, content) idList = list() for selectorList in self.splitoffers: selectorStr = str(selectorList).replace("'", '"') tid_conv_param = DUPLICATE_CONV_TID_TMPLATE % (self.beginhour, self.endhour, selectorStr) tid_list = self.get_transaction_id(tid_conv_param) self.logger.info('use signal offer group get {0}'.format(tid_list)) idList.extend(tid_list) time.sleep(0.5) title = 'use [transaction_id, conv_time] find {0} duplicate conversions between {1} to {2}'.format( len(idList), self.beginhour, self.endhour ) content = str(idList) if len(idList) > 0: self.send(title, content)