Exemplo n.º 1
0
class MsgHandler(HandlerBase):
    """ msg processor for winwin """
    def __init__(self, channel):
        """ 
        channel 
        
        """
        self.channel = channel
        #self.conf = conf

        super(MsgHandler, self).__init__()

        #self.conf = self.g.conf

        if self.conf['logging']['debug']:
            #print "%%%" * 20
            log.debug('no redis connected')
            pass
        else:
            self.red = RedisClient(self.conf['redis'])
            self.red.load_script(self.conf['output']['enqueue_script'])

    def process(self):
        """ process msg """

        rtn = self.red.enqueue(eqpt_no=eqpt_no,
                               timestamp=timestamp,
                               cmd=cmd,
                               rawdata=msgpack.packb(rawdata),
                               data=msgpack.packb(data),
                               measurement=measurement.lower())
        log.debug(rtn)

    def run(self):
        """ loop """

        while True:

            try:
                #log.debug("queue size: %d" % self.g.msg_queue.qsize())
                ### get msg from msg_queue
                line = self.get()

                if line == 'stop it':
                    log.warning("stopped by msg")
                    break

                log.debug(self.conf[self.channel])

                log.debug(line)

                #msg_queue.task_done()

            except Exception as ex:
                log.error(ex)
Exemplo n.º 2
0
class DAMHandler(HandlerBase):
    """ msg processor for Dam"""
    def __init__(self, plugin):
        """
        channel 
        
        """

        super(DAMHandler, self).__init__(__file__, plugin)

        log.debug('---' * 25)

        log.debug('---' * 25)

        self.red = RedisClient(self.conf['redis'])
        self.red.load_script(self.conf['output']['enqueue_script'])

    def process(self, **kwargs):
        """
        process 
        
        """
        rtn = self.red.enqueue(eqpt_no=kwargs['eqpt_no'],
                               timestamp=kwargs['timestamp'],
                               cmd=kwargs['cmd'],
                               rawdata=msgpack.packb(kwargs['rawdata']),
                               data=msgpack.packb(kwargs['data']),
                               measurement=kwargs['measurement'])
        log.debug(rtn)

    def run(self):
        """
        loop
        
        """
        while True:

            try:
                ### get  msg from msg_queue

                fields = self.get()

                for field in fields:

                    timestamp = field['timestamp']
                    eqpt_no = field['unit']
                    print eqpt_no

                    # log.debug(button_status)
                    measurement = self.conf['dam_measurement']['measurement']
                    log.debug(fields)
                    # msg = {'uuid':uid, 'timestamp':timestamp,'type':type, 'channel':self.channel, 'interval':interval, 'payload ':payload}
                    self.process(eqpt_no=eqpt_no,
                                 timestamp=int(timestamp * (1000)),
                                 cmd='STR',
                                 rawdata=field['payload'],
                                 data=field['payload'],
                                 measurement=measurement)
                    # msg_queue.task_done()
                    print("*" * 50)
                    log.debug(int(timestamp))
                    print("*" * 50)
            except Exception as e:

                log.debug(e)
Exemplo n.º 3
0
class Worker(object):
    """ worker find content in windows """
    def __init__(self, conf):
        """ init """

        self.conf = conf

        self.winwin = WinWin(conf['station'])

        self.influxc = InfluxC(conf['influxdb'])

        self.red = RedisClient(conf['redis'])

        self.interval = conf['app']['interval']
        self.title_like = conf['app']['title_like']

        self.tags = conf['output']['tags']
        self.measurement = conf['output']['measurement']
        self.red.load_script(conf['output']['enqueue_script'])

        ### find window
        self.winwin.get_win_list(self.title_like)

        self.fields = {}

        self.text_pos = {}

    def build_json(self):
        """ build json for influxdb """

        data = [{"time":int(time.time()), "measurement":self.measurement, \
                "tags":self.tags, "fields":self.fields}]

        return data

    def build_fields(self):
        """ build fields for influxdb json  """
        #log.debug("build_fields")
        for hwnd in self.winwin.win_list:

            self.winwin.get_child_list(hwnd)

            for parent_hwnd in self.winwin.win_dict:

                #log.debug(hex(hwnd_parent))
                #log.debug("##" * 20)
                for item in self.winwin.win_dict[parent_hwnd]:
                    #log.debug("****"*20)
                    #log.debug("%s-[%s]-%s-%s" %(item[0], hex(item[1]), item[2], item[3]))
                    #log.debug("****"*20)

                    class_name, child_hwnd, parent_title, title = item

                    #log.debug("%s,%s" %(hex(child_hwnd), class_name))

                    (left, top, right,
                     bottom) = self.winwin.get_rect(child_hwnd)
                    #log.debug("%s,%s,%s,%s" %(left, top, right, bottom))
                    #log.debug("class name:%s" % class_name)

                    title = self.winwin.get_title(child_hwnd)
                    #log.debug("[%s][%s] parent title:%s" % (hex(child_hwnd), title, parent_title))
                    if class_name == 'Edit':

                        text = self.winwin.get_value(child_hwnd)
                        #log.debug("text:%s" % text)
                        if text != '':
                            self.fields['edit1'] = text
                    # Current Sequence Statistics
                    elif class_name == 'SysListView32' or class_name == 'ListBox':
                        data = self.winwin.get_list_view_items(parent_hwnd,
                                                               column_index=1)
                        log.debug(hex(parent_hwnd))

                        #v = self.winwin.get_parent_info(parent_hwnd)
                        #log.debug("%s - %s" %(hex(v[0]), v[1]))
                        #v = self.winwin.get_parent_info(v[0])
                        #log.debug("%s - %s" %(hex(v[0]), v[1]))
                        #if v[1] == 'Channel Counters':
                        #    self.fields['counter1'] = int(data[0])
                        #    self.fields['counter2'] = int(data[1])
                        log.debug(data)

                    elif class_name == 'ThunderRT6TextBox' and parent_title == 'Current Sequence Statistics':
                        title = self.winwin.get_value(
                            child_hwnd)  #self.winwin.get_title(child_hwnd)
                        log.debug("###############[%s]" % (title))
                        log.debug("###>%s [%s,%s,%s,%s][%s]" %
                                  (title, left, top, right, bottom,
                                   left + top + right + bottom))

                        self.fields['total_time'] = title
                    elif class_name == 'ThunderRT6TextBox' and parent_title == 'Current Status':
                        title = self.winwin.get_title(child_hwnd)
                        log.debug("===>%s [%s,%s,%s,%s][%s]" %
                                  (title, left, top, right, bottom,
                                   left + top + right + bottom))

                        self.fields['sequence'] = title

                    elif class_name == 'ProgressBar20WndClass' and parent_title == 'Current Status':
                        pos, range = self.winwin.get_progress(child_hwnd)
                        self.fields['progress'] = pos / range
                        log.debug("%s:%s" % (pos, range))

    def enqueue(self):
        """ put data to queue in redis """

        if len(self.fields) > 0:
            json_data = self.build_json()
            log.debug(json_data)

            ### send data to influxdb
            #influxc.send(json_data)
            eqpt_no = "abc"
            timestamp = int(time.time())
            cmd = "cmd"
            measurement = "RPC"
            rawdata = self.fields
            data = self.fields

            log.debug(self.fields)

            rtn = self.red.enqueue(eqpt_no, timestamp, cmd,
                                   msgpack.packb(rawdata), msgpack.packb(data),
                                   measurement.lower())
            log.debug(rtn)

        elif len(self.winwin.win_dict) > 0:
            pass
        else:
            log.debug("find window again...")
            self.winwin.get_win_list(self.title_like)

    def run(self):
        """ run the job """

        while True:

            ### init fields each round
            self.fields = {}

            try:
                #log.debug("abc")
                self.build_fields()
                log.debug(self.fields)
                self.enqueue()

            except ConnectionError as err:

                log.error(traceback.format_exc())

            except NoScriptError as err:

                log.error(traceback.format_exc())
                try:
                    self.red.load_script(self.conf['output']['enqueue_script'])
                except:
                    pass

            except AttributeError as err:
                log.error(traceback.format_exc())

            except Exception as ex:
                log.error(traceback.format_exc())
                log.debug("find window again...")
                self.winwin.get_win_list(self.title_like)

            time.sleep(self.interval)