Exemple #1
0
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')
 def __init__(self):
     self.logger = getLogger('consistency')
     self.emailer = Emailer()
     self.affidList = get_affid()
Exemple #4
0
 def __init__(self):
     self.parser = Parser()
     self.emailer = Emailer()
     self.dber = DatabaseInterface()
     self.logger = getLogger('root')
 def __init__(self):
     self.format = '%Y-%m-%dT%H:00:00'
     self.emiler = Emailer()
     self.logger = getLogger('convmonitor')
     self.splitoffers = getSplitOffers()
     self.get_trange()
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)