Ejemplo n.º 1
0
 def __init__(self, app, call_id='GLOBAL', logfile='/var/log/sip.log'):
     self.itime = time()
     self.app = '/%s' % app
     self.call_id = call_id
     bend = os.environ.get('SIPLOG_BEND', 'stderr').lower()
     tform = os.environ.get('SIPLOG_TFORM', 'abs').lower()
     if tform == 'rel':
         self.offstime = True
         itime = os.environ.get('SIPLOG_TSTART', self.itime)
         self.itime = float(itime)
     if bend == 'stderr':
         self.write = self.write_stderr
     elif bend == 'none':
         self.write = self.donoting
     else:
         self.write = self.write_logfile
         self.wi_available = Condition()
         self.wi = []
         if bend != 'syslog':
             self.logger = AsyncLogger(app, self)
             self.logfile = os.environ.get('SIPLOG_LOGFILE_FILE', logfile)
             self.signal_handler = LogSignal(self, SIGUSR1, self.reopen)
         else:
             self.logger = AsyncLoggerSyslog(app, self)
             self.app = ''
     self.level = eval('SIPLOG_' + os.environ.get('SIPLOG_LVL', 'INFO'))
Ejemplo n.º 2
0
 def __init__(self, app, call_id = 'GLOBAL', logfile = '/var/log/sip.log'):
     self.itime = time()
     self.app = '/%s' % app
     self.call_id = call_id
     bend = os.environ.get('SIPLOG_BEND', 'stderr').lower()
     tform = os.environ.get('SIPLOG_TFORM', 'abs').lower()
     if tform == 'rel':
         self.offstime = True
         itime = os.environ.get('SIPLOG_TSTART', self.itime)
         self.itime = float(itime)
     if bend == 'stderr':
         self.write = self.write_stderr
     elif bend == 'none':
         self.write = self.donoting
     else:
         self.write = self.write_logfile
         self.wi_available = Condition()
         self.wi = []
         if bend != 'syslog':
             self.logger = AsyncLogger(app, self)
             self.logfile = os.environ.get('SIPLOG_LOGFILE_FILE', logfile)
             self.signal_handler = LogSignal(self, SIGUSR1, self.reopen)
         else:
             self.logger = AsyncLoggerSyslog(app, self)
             self.app = ''
     self.level = eval('SIPLOG_' + os.environ.get('SIPLOG_LVL', 'INFO'))
Ejemplo n.º 3
0
 def __init__(self, app, call_id="GLOBAL", logfile="/var/log/sip.log"):
     self.app = "/%s" % app
     self.call_id = call_id
     bend = os.environ.get("SIPLOG_BEND", "stderr").lower()
     if bend == "stderr":
         self.write = self.write_stderr
     elif bend == "none":
         self.write = self.donoting
     else:
         self.write = self.write_logfile
         self.wi_available = Condition()
         self.wi = []
         if bend != "syslog":
             self.logger = AsyncLogger(app, self)
             self.logfile = os.environ.get("SIPLOG_LOGFILE_FILE", logfile)
             self.signal_handler = LogSignal(self, SIGUSR1, self.reopen)
         else:
             self.logger = AsyncLoggerSyslog(app, self)
             self.app = ""
     self.level = eval("SIPLOG_" + os.environ.get("SIPLOG_LVL", "INFO"))
Ejemplo n.º 4
0
class SipLogger(object):
    app = None
    call_id = None
    level = None
    write = None
    logfile = None
    discarded = 0
    pid = None
    logger = None
    signal_handler = None

    def __init__(self, app, call_id = 'GLOBAL', logfile = '/var/log/sip.log'):
        self.app = '/%s' % app
        self.call_id = call_id
        bend = os.environ.get('SIPLOG_BEND', 'stderr').lower()
        if bend == 'stderr':
            self.write = self.write_stderr
        elif bend == 'none':
            self.write = self.donoting
        else:
            self.write = self.write_logfile
            self.wi_available = Condition()
            self.wi = []
            if bend != 'syslog':
                self.logger = AsyncLogger(app, self)
                self.logfile = os.environ.get('SIPLOG_LOGFILE_FILE', logfile)
                self.signal_handler = LogSignal(self, SIGUSR1, self.reopen)
            else:
                self.logger = AsyncLoggerSyslog(app, self)
                self.app = ''
        self.level = eval('SIPLOG_' + os.environ.get('SIPLOG_LVL', 'INFO'))

    def donoting(self, *args, **kwargs):
        pass

    def write_stderr(self, *args, **kwargs):
        if kwargs.get('level', SIPLOG_INFO) < self.level:
            return
        sys.__stderr__.write(self.format(args, kwargs))

    def write_logfile(self, *args, **kwargs):
        if kwargs.get('level', SIPLOG_INFO) < self.level:
            return
        discarded = False
        self.wi_available.acquire()
        if len(self.wi) > 1000:
            # Discard some items, as the writer doesn't seems to be able
            # to keep up pace with incoming requests
            self.discarded += len(self.wi) - 1000
            self.wi = self.wi[-1000:]
            discarded = True
        self.wi.append(('write', args, kwargs))
        self.wi_available.notify()
        self.wi_available.release()
        if discarded and self.discarded % 1000 == 0:
            print 'SipLogger: discarded %d requests, I/O too slow' % self.discarded

    def format(self, args, kwargs):
        ltime = kwargs.get('ltime', None)
        if ltime == None:
            ltime = time()
        call_id = kwargs.get('call_id', self.call_id)
        if self.pid != None:
            pid = '[%d]' % self.pid
        else:
            pid = ''
        return '%s.%.3d/%s%s%s: %s\n' % (strftime('%d %b %H:%M:%S', localtime(ltime)), \
          (ltime % 1) * 1000, call_id, self.app, pid, \
          reduce(lambda x, y: x + y, [str(x) for x in args]))

    def reopen(self, signum = None):
        self.wi_available.acquire()
        self.wi.append(('reopen', None, None))
        self.wi_available.notify()
        self.wi_available.release()

    def shutdown(self):
        if self.logger == None:
            return
        if self.signal_handler != None:
            self.signal_handler.cancel()
            self.signal_handler = None
        self.logger.shutdown()
        self.logger = None
Ejemplo n.º 5
0
class SipLogger(object):
    app = None
    call_id = None
    level = None
    write = None
    logfile = None
    discarded = 0
    pid = None
    logger = None
    signal_handler = None
    itime = None
    offstime = False

    def __init__(self, app, call_id='GLOBAL', logfile='/var/log/sip.log'):
        self.itime = time()
        self.app = '/%s' % app
        self.call_id = call_id
        bend = os.environ.get('SIPLOG_BEND', 'stderr').lower()
        tform = os.environ.get('SIPLOG_TFORM', 'abs').lower()
        if tform == 'rel':
            self.offstime = True
            itime = os.environ.get('SIPLOG_TSTART', self.itime)
            self.itime = float(itime)
        if bend == 'stderr':
            self.write = self.write_stderr
        elif bend == 'none':
            self.write = self.donoting
        else:
            self.write = self.write_logfile
            self.wi_available = Condition()
            self.wi = []
            if bend != 'syslog':
                self.logger = AsyncLogger(app, self)
                self.logfile = os.environ.get('SIPLOG_LOGFILE_FILE', logfile)
                self.signal_handler = LogSignal(self, SIGUSR1, self.reopen)
            else:
                self.logger = AsyncLoggerSyslog(app, self)
                self.app = ''
        self.level = eval('SIPLOG_' + os.environ.get('SIPLOG_LVL', 'INFO'))

    def ftime(self, ltime):
        if self.offstime:
            ltime -= self.itime
        msec = (ltime % 1) * 1000
        if not self.offstime:
            return '%s.%.3d' % (strftime('%d %b %H:%M:%S',
                                         localtime(ltime)), msec)
        hrs = int(ltime / (60 * 60))
        ltime -= (hrs * 60 * 60)
        mins = int(ltime / 60)
        ltime -= (mins * 60)
        secs = int(ltime)
        return '%.2d:%.2d:%.2d.%.3d' % (hrs, mins, secs, msec)

    def donoting(self, *args, **kwargs):
        pass

    def write_stderr(self, *args, **kwargs):
        if kwargs.get('level', SIPLOG_INFO) < self.level:
            return
        sys.__stderr__.write(self.format(args, kwargs))

    def write_logfile(self, *args, **kwargs):
        if kwargs.get('level', SIPLOG_INFO) < self.level:
            return
        discarded = False
        self.wi_available.acquire()
        if len(self.wi) > 1000:
            # Discard some items, as the writer doesn't seems to be able
            # to keep up pace with incoming requests
            self.discarded += len(self.wi) - 1000
            self.wi = self.wi[-1000:]
            discarded = True
        self.wi.append(('write', args, kwargs))
        self.wi_available.notify()
        self.wi_available.release()
        if discarded and self.discarded % 1000 == 0:
            print 'SipLogger: discarded %d requests, I/O too slow' % self.discarded

    def format(self, args, kwargs):
        ltime = kwargs.get('ltime', None)
        if ltime == None:
            ltime = time()
        call_id = kwargs.get('call_id', self.call_id)
        if self.pid != None:
            pid = '[%d]' % self.pid
        else:
            pid = ''
        return '%s/%s%s%s: %s\n' % (self.ftime(ltime), \
          call_id, self.app, pid, \
          reduce(lambda x, y: x + y, [str(x) for x in args]))

    def reopen(self, signum=None):
        self.wi_available.acquire()
        self.wi.append(('reopen', None, None))
        self.wi_available.notify()
        self.wi_available.release()

    def shutdown(self):
        if self.logger == None:
            return
        if self.signal_handler != None:
            self.signal_handler.cancel()
            self.signal_handler = None
        self.logger.shutdown()
        self.logger = None
Ejemplo n.º 6
0
class SipLogger(object):
    app = None
    call_id = None
    level = None
    write = None
    logfile = None
    discarded = 0
    pid = None
    logger = None
    signal_handler = None

    def __init__(self, app, call_id="GLOBAL", logfile="/var/log/sip.log"):
        self.app = "/%s" % app
        self.call_id = call_id
        bend = os.environ.get("SIPLOG_BEND", "stderr").lower()
        if bend == "stderr":
            self.write = self.write_stderr
        elif bend == "none":
            self.write = self.donoting
        else:
            self.write = self.write_logfile
            self.wi_available = Condition()
            self.wi = []
            if bend != "syslog":
                self.logger = AsyncLogger(app, self)
                self.logfile = os.environ.get("SIPLOG_LOGFILE_FILE", logfile)
                self.signal_handler = LogSignal(self, SIGUSR1, self.reopen)
            else:
                self.logger = AsyncLoggerSyslog(app, self)
                self.app = ""
        self.level = eval("SIPLOG_" + os.environ.get("SIPLOG_LVL", "INFO"))

    def donoting(self, *args, **kwargs):
        pass

    def write_stderr(self, *args, **kwargs):
        if kwargs.get("level", SIPLOG_INFO) < self.level:
            return
        sys.__stderr__.write(self.format(args, kwargs))

    def write_logfile(self, *args, **kwargs):
        if kwargs.get("level", SIPLOG_INFO) < self.level:
            return
        discarded = False
        self.wi_available.acquire()
        if len(self.wi) > 1000:
            # Discard some items, as the writer doesn't seems to be able
            # to keep up pace with incoming requests
            self.discarded += len(self.wi) - 1000
            self.wi = self.wi[-1000:]
            discarded = True
        self.wi.append(("write", args, kwargs))
        self.wi_available.notify()
        self.wi_available.release()
        if discarded and self.discarded % 1000 == 0:
            print "SipLogger: discarded %d requests, I/O too slow" % self.discarded

    def format(self, args, kwargs):
        ltime = kwargs.get("ltime", None)
        if ltime == None:
            ltime = time()
        call_id = kwargs.get("call_id", self.call_id)
        if self.pid != None:
            pid = "[%d]" % self.pid
        else:
            pid = ""
        return "%s.%.3d/%s%s%s: %s\n" % (
            strftime("%d %b %H:%M:%S", localtime(ltime)),
            (ltime % 1) * 1000,
            call_id,
            self.app,
            pid,
            reduce(lambda x, y: x + y, [str(x) for x in args]),
        )

    def reopen(self, signum=None):
        self.wi_available.acquire()
        self.wi.append(("reopen", None, None))
        self.wi_available.notify()
        self.wi_available.release()

    def shutdown(self):
        if self.logger == None:
            return
        if self.signal_handler != None:
            self.signal_handler.calcel()
            self.signal_handler = None
        self.logger.shutdown()
        self.logger = None