Example #1
0
    def __init__(self, name, logger, startAtTheEnd=True):
        self.hostname = socket.gethostname()
        self.key = '%s.%s' % (self.hostname, name)
        self.logger = logger
        self.logDir = '/apps/px/log'
        self.state = load(name)

        if self.state == False:
            # 2 choices
            # 1) we will start at the last byte of the current log
            if startAtTheEnd:
                nbBytes = os.stat("%s/%s.log" % (self.logDir, name)).st_size
                state = State(name,
                              datetime.date.today().strftime("%Y-%m-%d"),
                              nbBytes)
            # 2) we will take all the current log
            else:
                state = State(name,
                              datetime.date.today().strftime("%Y-%m-%d"), 0)
            state.dump(name)
            self.state = load(name)
        self.sleep = 10
        self.publisher = AMQP_Publisher('pxs', 'px_logs', 'topic', self.key)
        self.publisher.connect()
        self.logger.info('Publisher is now connected')
Example #2
0
    def __init__(self, name, logger, startAtTheEnd=True):
        self.hostname = socket.gethostname()
        self.key = '%s.%s' % (self.hostname, name)
        self.logger = logger
        self.logDir = '/apps/px/log'
        self.state = load(name)

        if self.state == False:
            # 2 choices
            # 1) we will start at the last byte of the current log
            if startAtTheEnd:
                nbBytes = os.stat("%s/%s.log" % (self.logDir, name)).st_size
                state = State(name, datetime.date.today().strftime("%Y-%m-%d"), nbBytes)
            # 2) we will take all the current log
            else:
                state = State(name, datetime.date.today().strftime("%Y-%m-%d"), 0)
            state.dump(name)
            self.state = load(name)
        self.sleep = 10
        self.publisher = AMQP_Publisher('pxs', 'px_logs', 'topic', self.key)
        self.publisher.connect()
        self.logger.info('Publisher is now connected')
Example #3
0
class LogPublisher(object):
    def __init__(self, name, logger, startAtTheEnd=True):
        self.hostname = socket.gethostname()
        self.key = '%s.%s' % (self.hostname, name)
        self.logger = logger
        self.logDir = '/apps/px/log'
        self.state = load(name)

        if self.state == False:
            # 2 choices
            # 1) we will start at the last byte of the current log
            if startAtTheEnd:
                nbBytes = os.stat("%s/%s.log" % (self.logDir, name)).st_size
                state = State(name,
                              datetime.date.today().strftime("%Y-%m-%d"),
                              nbBytes)
            # 2) we will take all the current log
            else:
                state = State(name,
                              datetime.date.today().strftime("%Y-%m-%d"), 0)
            state.dump(name)
            self.state = load(name)
        self.sleep = 10
        self.publisher = AMQP_Publisher('pxs', 'px_logs', 'topic', self.key)
        self.publisher.connect()
        self.logger.info('Publisher is now connected')

    def readOldLogs(self, logDir, logName):
        try:
            #print logName
            #print
            f = open(logDir + '/' + logName)
            f.seek(self.state.offset)
            data = f.read()
            nbBytes = len(data)
            if nbBytes != 0:
                self.publisher.publish(data)
                self.logger.info('%s bytes have been published' % (len(data)))
            else:
                self.logger.debug('%s bytes from %s => no need to published' %
                                  (nbBytes, logName))
        except:
            (type, value, tb) = sys.exc_info()
            print("Type: %s, Value: %s" % (type, value))
            return

        # set new state
        self.state.offset = 0
        self.state.incrementExt()
        self.state.dump(self.state.name)

        logName = self.state.name + '.log.' + self.state.ext
        self.readOldLogs(self.logDir, logName)

    def readCurrentLog(self):
        logName = self.state.name + '.log'
        fullName = self.logDir + '/' + logName
        try:
            #print logName
            #print self.state.offset
            f = open(fullName)
            f.seek(self.state.offset)
            data = f.read()
            newPos = f.tell()
            oldPos = self.state.offset
            self.state.offset = newPos
            nbBytes = len(data)
            if nbBytes != 0:
                self.publisher.publish(data)
                self.logger.info('%s bytes have been published' % (nbBytes))
            else:
                self.logger.debug('%s bytes => no need to published' %
                                  (nbBytes))
        except:
            (type, value, tb) = sys.exc_info()
            print("Type: %s, Value: %s" % (type, value))
            return

        # set new state
        self.state.setTodayExt()
        self.state.dump(self.state.name)

    def readLogs(self):
        logName = self.state.name + '.log.' + self.state.ext
        fullName = self.logDir + '/' + logName

        if os.path.isfile(fullName):
            self.readOldLogs(self.logDir, logName)
        self.readCurrentLog()

    def run(self):
        while True:
            try:
                self.readLogs()
                time.sleep(self.sleep)
            except:
                (type, value, tb) = sys.exc_info()
                self.logger.error("Publisher error! Type: %s, Value: %s" %
                                  (type, value))

                try:
                    self.publisher.disconnect()
                    self.logger.info('Publisher is now disconnected')
                except:
                    (type, value, tb) = sys.exc_info()
                    self.logger.info("Publisher error! Type: %s, Value: %s" %
                                     (type, value))

                # We try to reconnect.
                self.publisher.connect()
                self.logger.info('Publisher is now reconnected')
Example #4
0
class LogPublisher(object):
    def __init__(self, name, logger, startAtTheEnd=True):
        self.hostname = socket.gethostname()
        self.key = '%s.%s' % (self.hostname, name)
        self.logger = logger
        self.logDir = '/apps/px/log'
        self.state = load(name)

        if self.state == False:
            # 2 choices
            # 1) we will start at the last byte of the current log
            if startAtTheEnd:
                nbBytes = os.stat("%s/%s.log" % (self.logDir, name)).st_size
                state = State(name, datetime.date.today().strftime("%Y-%m-%d"), nbBytes)
            # 2) we will take all the current log
            else:
                state = State(name, datetime.date.today().strftime("%Y-%m-%d"), 0)
            state.dump(name)
            self.state = load(name)
        self.sleep = 10
        self.publisher = AMQP_Publisher('pxs', 'px_logs', 'topic', self.key)
        self.publisher.connect()
        self.logger.info('Publisher is now connected')

    def readOldLogs(self, logDir, logName):
        try:
            #print logName
            #print
            f = open(logDir + '/' + logName)
            f.seek(self.state.offset)
            data = f.read()
            nbBytes = len(data)
            if nbBytes != 0:
                self.publisher.publish(data)
                self.logger.info('%s bytes have been published' % (len(data)))
            else:
                self.logger.debug('%s bytes from %s => no need to published' % (nbBytes, logName))
        except:
            (type, value, tb) = sys.exc_info()
            print("Type: %s, Value: %s" % (type, value)) 
            return 

        # set new state
        self.state.offset = 0
        self.state.incrementExt()
        self.state.dump(self.state.name)

        logName = self.state.name + '.log.' + self.state.ext
        self.readOldLogs(self.logDir, logName)
        
    def readCurrentLog(self):
        logName = self.state.name + '.log'    
        fullName = self.logDir + '/' + logName
        try:
            #print logName
            #print self.state.offset
            f = open(fullName)
            f.seek(self.state.offset)
            data = f.read()
            newPos = f.tell()
            oldPos = self.state.offset
            self.state.offset = newPos
            nbBytes = len(data)
            if nbBytes != 0:
                self.publisher.publish(data)
                self.logger.info('%s bytes have been published' % (nbBytes))
            else:
                self.logger.debug('%s bytes => no need to published' % (nbBytes))
        except: 
            (type, value, tb) = sys.exc_info()
            print("Type: %s, Value: %s" % (type, value)) 
            return 

        # set new state
        self.state.setTodayExt()
        self.state.dump(self.state.name)

    def readLogs(self):
        logName = self.state.name + '.log.' + self.state.ext
        fullName = self.logDir + '/' + logName
        
        if os.path.isfile(fullName):
            self.readOldLogs(self.logDir, logName)
        self.readCurrentLog()

    def run(self):
        while True:
            try:
                self.readLogs()
                time.sleep(self.sleep)
            except:
                (type, value, tb) = sys.exc_info()
                self.logger.error("Publisher error! Type: %s, Value: %s" % (type, value))

                try:
                    self.publisher.disconnect()
                    self.logger.info('Publisher is now disconnected')
                except:
                    (type, value, tb) = sys.exc_info()
                    self.logger.info("Publisher error! Type: %s, Value: %s" % (type, value))

                # We try to reconnect. 
                self.publisher.connect()
                self.logger.info('Publisher is now reconnected')