Пример #1
0
def init_logging_syslog(log_level='notset', facility='local0', bubble=True):
    handler = logbook.SyslogHandler('postgresql-metrics',
                                    facility=facility,
                                    level=figure_out_log_level(log_level),
                                    bubble=bubble)
    handler.push_application()
    get_logger().debug("syslog logging initialized")
Пример #2
0
def test_syslog_handler(logger, activation_strategy, sock_family, socktype, address, app_name):
    delimiter = DELIMITERS[sock_family]
    with closing(socket.socket(sock_family, socktype)) as inc:
        inc.bind(address)

        if socktype == socket.SOCK_STREAM:
            inc.listen(0)

        inc.settimeout(1)

        if UNIX_SOCKET_AVAILABLE and sock_family == socket.AF_UNIX:
            expected = (r'^<12>%stestlogger: Syslog is weird%s$' % (app_name + ':' if app_name else '', delimiter))
        else:
            expected = (r'^<12>1 \d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d+)?Z %s %s %d - - %sSyslog is weird%s$' % (
                socket.gethostname(),
                app_name if app_name else 'testlogger',
                os.getpid(), 'testlogger: ' if app_name else '',
                delimiter))

        handler = logbook.SyslogHandler(app_name, inc.getsockname(), socktype=socktype)

        with activation_strategy(handler):
            logger.warn('Syslog is weird')

        if socktype == socket.SOCK_STREAM:
            with closing(inc.accept()[0]) as inc2:
                rv = inc2.recv(1024)
        else:
            rv = inc.recvfrom(1024)[0]

        rv = rv.decode('utf-8')
        assert re.match(expected, rv), \
            'expected {}, got {}'.format(expected, rv)
Пример #3
0
def setup_log(**args):
    logbook.SyslogHandler().push_application()
    logbook.StreamHandler(sys.stderr, bubble=True).push_application()
    redirect_stdouts_to_logger(args['logger'])  # logs to local syslog
    if os.path.exists('/dev/log'):
        h = logging.handlers.SysLogHandler('/dev/log')
    else:
        h = logging.handlers.SysLogHandler()
    h.setLevel(args['loglevel'])
    formatter = logging.Formatter(logging.BASIC_FORMAT)
    h.setFormatter(formatter)
    args['logger'].addHandler(h)
Пример #4
0
def setup_papertrail(project_name, channel, PAPERTRAIL_HOST, PAPERTRAIL_PORT):
    """
    Setup papertrail account using taskcluster secrets
    """

    # Setup papertrail
    papertrail = logbook.SyslogHandler(
        application_name=f"code-review/{channel}/{project_name}",
        address=(PAPERTRAIL_HOST, int(PAPERTRAIL_PORT)),
        level=logbook.INFO,
        format_string="{record.time} {record.channel}: {record.message}",
        bubble=True,
    )
    papertrail.push_application()
Пример #5
0
def setup_papertrail(project_name, channel, PAPERTRAIL_HOST, PAPERTRAIL_PORT):
    '''
    Setup papertrail account using taskcluster secrets
    '''

    # Setup papertrail
    papertrail = logbook.SyslogHandler(
        application_name='mozilla/release-services/{}/{}'.format(
            channel, project_name),
        address=(PAPERTRAIL_HOST, int(PAPERTRAIL_PORT)),
        format_string='{record.time} {record.channel}: {record.message}',
        bubble=True,
    )
    papertrail.push_application()
Пример #6
0
def run(config_file):
    error_handler = logbook.SyslogHandler('pushjournal', level='INFO')
    error_handler.push_application()
    app_config = config.load(config_file)
    app_notifiers = notifiers.create_notifiers(app_config)
    reader = journal.Reader()
    boot_file = os.path.join(tempfile.gettempdir(), ".pushjournal-boot")

    if app_config.get("notify_boot", False) and not os.path.isfile(boot_file):
        body = ""

        if app_config.get("show_public_ip", False):
            try:
                body += "Public IP: {}\n\n".format(_get_public_ip())
            except Exception:
                logbook.error("Could not get the public IP: {}",
                              traceback.format_exc())
                body += "Failed to get the public IP\n"

        if app_config.get("show_local_ips", False):
            try:
                body += "Local IPs:\n{}\n\n".format("\n".join(
                    "- {}: {}".format(*addr) for addr in _get_local_ips()))
            except Exception:
                logbook.error("Could not get local IPs: {}",
                              traceback.format_exc())
                body += "Failed to get local IPs\n"

        _notify(app_notifiers, "System booted", body, True)

        with open(boot_file, "wb"):
            pass

    for f in app_config['filters']:
        f['match'] = re.compile(f['match'])

    reader.seek_tail()
    while True:
        reader.wait()
        for entry in reader:
            for f in app_config['filters']:
                m = f['match'].search(entry['MESSAGE'])
                if not m:
                    continue

                _notify(app_notifiers, f['title'].format(*m.groups()),
                        f['body'].format(*m.groups()), False)
Пример #7
0
def test_syslog_handler(logger, activation_strategy, unix_sock_path):
    to_test = [
        (socket.AF_INET, ('127.0.0.1', 0)),
    ]
    if hasattr(socket, 'AF_UNIX'):
        to_test.append((socket.AF_UNIX, unix_sock_path))
    for sock_family, address in to_test:
        with closing(socket.socket(sock_family, socket.SOCK_DGRAM)) as inc:
            inc.bind(address)
            inc.settimeout(1)
            for app_name in [None, 'Testing']:
                handler = logbook.SyslogHandler(app_name, inc.getsockname())
                with activation_strategy(handler):
                    logger.warn('Syslog is weird')
                try:
                    rv = inc.recvfrom(1024)[0]
                except socket.error:
                    assert False, 'got timeout on socket'
                assert rv == (u('<12>%stestlogger: Syslog is weird\x00') %
                              ((app_name and (app_name + u(':'))) or u(''))).encode('utf-8')
Пример #8
0
 def test_syslog_handler(self):
     to_test = [
         (socket.AF_INET, ('127.0.0.1', 0)),
     ]
     if hasattr(socket, 'AF_UNIX'):
         to_test.append((socket.AF_UNIX, self.filename))
     for sock_family, address in to_test:
         inc = socket.socket(sock_family, socket.SOCK_DGRAM)
         inc.bind(address)
         inc.settimeout(1)
         for app_name in [None, 'Testing']:
             handler = logbook.SyslogHandler(app_name, inc.getsockname())
             with handler:
                 self.log.warn('Syslog is weird')
             try:
                 rv = inc.recvfrom(1024)[0]
             except socket.error:
                 self.fail('got timeout on socket')
             self.assertEqual(rv, (
                 u'<12>%stestlogger: Syslog is weird\x00' %
                 (app_name and app_name + u':' or u'')).encode('utf-8'))
Пример #9
0
def main(args):
    if not args.debug:
        for handler in [logbook.SyslogHandler(level=logbook.INFO)]:
            handler.format_string = '{record.thread}|{record.channel}: {record.message}'
            handler.push_application()

    with closing(socket.socket()) as s:
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        s.bind(("0.0.0.0", args.port))
        logbook.debug("Listening on port {}", args.port)
        s.listen(socket.SOMAXCONN)
        message_sink = DatabaseMessageSink()
        semaphore = get_semaphore()
        while True:
            try:
                p, a = s.accept()
            except KeyboardInterrupt:
                break
            logbook.debug("Incoming connection from {}", a)
            thread = SMTPServerThread(p, message_sink, semaphore)
            thread.daemon = True
            thread.start()
Пример #10
0
def configure_log_handler(application_name, loglevel, output):
    if isinstance(loglevel, (str, unicode)):
        loglevel = getattr(logbook, loglevel.upper())

    if not isinstance(loglevel, int):
        raise TypeError(
            "configure_log_handler expects loglevel to be either an integer or a string corresponding to an integer attribute of the logbook module."
        )

    if output == 'syslog':
        log_handler = logbook.SyslogHandler(application_name=application_name,
                                            facility='user',
                                            bubble=False,
                                            level=loglevel)
    elif output == '-' or not output:
        log_handler = logbook.StderrHandler(level=loglevel, bubble=False)
    else:
        log_handler = logbook.FileHandler(filename=output,
                                          encoding='utf-8',
                                          level=loglevel,
                                          bubble=False)

    return log_handler
Пример #11
0
def test_syslog_handler(logger, activation_strategy, sock_family, socktype,
                        address):
    delimiter = {socket.AF_UNIX: '\x00', socket.AF_INET: '\n'}[sock_family]
    with closing(socket.socket(sock_family, socktype)) as inc:
        inc.bind(address)
        if socktype == socket.SOCK_STREAM:
            inc.listen(0)
        inc.settimeout(1)
        for app_name in [None, 'Testing']:
            if sock_family == socket.AF_UNIX:
                expected = (r'^<12>%stestlogger: Syslog is weird%s$' %
                            (app_name + ':' if app_name else '', delimiter))
            else:
                expected = (
                    r'^<12>1 \d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d+)?Z %s %s %d '
                    '- - %sSyslog is weird%s$' %
                    (socket.gethostname(),
                     app_name if app_name else 'testlogger', os.getpid(),
                     'testlogger: ' if app_name else '', delimiter))

            handler = logbook.SyslogHandler(app_name,
                                            inc.getsockname(),
                                            socktype=socktype)
            with activation_strategy(handler):
                logger.warn('Syslog is weird')
            try:
                if socktype == socket.SOCK_STREAM:
                    with closing(inc.accept()[0]) as inc2:
                        rv = inc2.recv(1024)
                else:
                    rv = inc.recvfrom(1024)[0]
            except socket.error:
                assert False, 'got timeout on socket'
            rv = rv.decode('utf-8')
            assert re.match(expected, rv), \
                'expected {}, got {}'.format(expected, rv)
Пример #12
0
def create_app(config=None):
    if config is None:
        config = {}

    ROOT_DIR = os.path.abspath(os.path.dirname(__file__))

    app = flask.Flask(__name__,
                      static_folder=os.path.join(ROOT_DIR, "..", "static"))

    _CONF_D_PATH = os.environ.get('CONFIG_DIRECTORY',
                                  os.path.join(ROOT_DIR, "..", "..", "conf.d"))

    configs = [os.path.join(ROOT_DIR, "app.yml")]

    if os.path.isdir(_CONF_D_PATH):
        configs.extend(
            sorted(
                os.path.join(_CONF_D_PATH, x) for x in os.listdir(_CONF_D_PATH)
                if x.endswith(".yml")))

    configs.append(os.path.expanduser('~/.config/backslash/devconfig.yml'))

    for yaml_path in configs:
        if os.path.isfile(yaml_path):
            with open(yaml_path) as yaml_file:
                app.config.update(yaml.load(yaml_file))

    app.config.update(config)

    if 'SQLALCHEMY_DATABASE_URI' not in app.config:
        app.config['SQLALCHEMY_DATABASE_URI'] = os.path.expandvars(
            os.environ.get(
                'SQLALCHEMY_DATABASE_URI',
                'postgresql://localhost/{0}'.format(app.config['app_name'])))

    if os.path.exists("/dev/log"):
        syslog_handler = logbook.SyslogHandler(app.config['app_name'],
                                               "/dev/log")
        syslog_handler.push_application()

    del app.logger.handlers[:]
    redirect_logging()

    if app.config['TESTING']:
        app.config['TRACEBACK_DIR'] = '/tmp/backslash_tracebacks'
    else:
        _disable_logs(['dogpile.lock'])

    app.logger.info("Started")

    Mail(app)

    from . import models
    from .blueprints import rest, views, runtoken
    from .blueprints.api.main import blueprint as api_blueprint

    models.db.init_app(app)

    from . import auth
    Security(app, auth.user_datastore, register_blueprint=False)

    blueprints = [
        auth.auth, views.blueprint, api_blueprint, rest.blueprint,
        runtoken.blueprint
    ]

    from .errors import errors

    for blueprint in blueprints:
        app.register_blueprint(blueprint)

    for code in errors:
        app.errorhandler(code)(errors[code])

    return app
Пример #13
0
# Logging configuration

try:
    import logbook
    import logbook.compat
    from client_logging import util as cl_util 
    logbook.compat.redirect_logging()
    null_handler = logbook.NullHandler()
    if DEBUG:
        log_handler = logbook.StderrHandler(level=logbook.WARNING)
        if CLIENT_EXCEPTION_LOGGING:
            js_log_handler = logbook.StderrHandler(filter=cl_util.js_error_log_filter, level=logbook.INFO)
            js_log_handler.formatter = cl_util.js_error_formatter_stderr
    else:
        log_handler = logbook.SyslogHandler(level=logbook.WARNING)
        if CLIENT_EXCEPTION_LOGGING:
            js_log_handler = logbook.SyslogHandler(filter=cl_util.js_error_log_filter, level=logbook.INFO)
            js_log_handler.formatter = cl_util.js_error_formatter_syslog
    null_handler.push_application()
    log_handler.push_application()
    if CLIENT_EXCEPTION_LOGGING:
        js_log_handler.push_application()
except ImportError:
    pass


CLIENT_EXCEPTION_RATE = env('CLIENT_EXCEPTION_RATE', "20/hour")


logging.getLogger('suds.client').setLevel(logging.ERROR)
Пример #14
0
import logbook
import os
import requests
from RPi.GPIO import cleanup

from lib.scale import BeeHiveScale
from lib.dht import DHTSensorController
import settings

secrets = json.load(
    open(os.path.join(os.path.dirname(__file__), "secrets.json"), "r"))
mail_log_settings = secrets["logging"]

logger = logbook.NestedSetup([
    logbook.NullHandler(),
    logbook.SyslogHandler(level=logbook.INFO),
    logbook.MailHandler(from_addr=mail_log_settings["sender"],
                        recipients=mail_log_settings["recipients"],
                        level=logbook.ERROR,
                        credentials=(mail_log_settings["username"],
                                     mail_log_settings["password"]),
                        server_addr=(mail_log_settings["server"],
                                     mail_log_settings["port"]),
                        secure=mail_log_settings["secure"],
                        bubble=True)
])


def acquire_weights(scale_obj,
                    sleep_time=settings.WEIGHT_MEASURE_WAIT_TIME,
                    measure_count=settings.WEIGHT_MEASURE_COUNT):
Пример #15
0
                host = value
            if option in ("-p", "--port"):
                port = int(value)
            if option in ("-d", "--delay"):
                delay = float(value)
            if option in ("-t", "--tubes"):
                tubes = re.split(r'\s*,\s*', value)

    except Usage, err:
        print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg)
        print >> sys.stderr, "\t for help use --help"
        return 2

    if output == 'syslog':
        log_handler = logbook.SyslogHandler(
            application_name='beanstalk-dumper',
            bubble=False,
            level=loglevel)
    elif output == '-' or not output:
        log_handler = logbook.StderrHandler(
            level=loglevel,
            bubble=False)
    else:
        log_handler = logbook.FileHandler(
            filename=output,
            encoding='utf-8',
            level=loglevel,
            bubble=False)

    with logbook.NullHandler():
        with log_handler.applicationbound():
            log.info("Starting Beanstalk dumper...")
Пример #16
0
def create_app(config=None):
    if config is None:
        config = {}

    # Defaults
    config.update({
        'MAX_MAILBOX_AGE_SECONDS': 7 * 24 * 60 * 60,  # 1 week
    })

    ROOT_DIR = os.path.abspath(os.path.dirname(__file__))

    app = flask.Flask(__name__,
                      static_folder=os.path.join(ROOT_DIR, "..", "static"))

    _CONF_D_PATH = os.environ.get('CONFIG_DIRECTORY',
                                  os.path.join(ROOT_DIR, "..", "..", "conf.d"))

    configs = [os.path.join(ROOT_DIR, "app.yml")]

    if os.path.isdir(_CONF_D_PATH):
        configs.extend(
            sorted(
                os.path.join(_CONF_D_PATH, x) for x in os.listdir(_CONF_D_PATH)
                if x.endswith(".yml")))

    for yaml_path in configs:
        if os.path.isfile(yaml_path):
            with open(yaml_path) as yaml_file:
                app.config.update(yaml.load(yaml_file))

    app.config.update(config)

    if 'SQLALCHEMY_DATABASE_URI' not in app.config:
        app.config['SQLALCHEMY_DATABASE_URI'] = os.path.expandvars(
            os.environ.get(
                'SQLALCHEMY_DATABASE_URI',
                'postgresql://localhost/{0}'.format(app.config['app_name'])))

    if os.path.exists("/dev/log"):
        syslog_handler = logbook.SyslogHandler(app.config['app_name'],
                                               "/dev/log")
        syslog_handler.push_application()

    del app.logger.handlers[:]
    redirect_logging()

    Mail(app)

    from . import models
    from . import errors

    models.db.init_app(app)

    from . import auth
    Security(app, auth.user_datastore, register_blueprint=False)

    from .errors import errors

    from .auth import auth
    from .views import views
    from .setup import setup
    blueprints = [auth, views, setup]

    for blueprint in blueprints:
        app.register_blueprint(blueprint)

    from .api import blueprint as api_blueprint
    app.register_blueprint(api_blueprint, url_prefix="/v2")

    for code in errors:
        app.errorhandler(code)(errors[code])
    return app
Пример #17
0
def create_app(config=None):
    if config is None:
        config = {}

    ROOT_DIR = os.path.abspath(os.path.dirname(__file__))

    app = flask.Flask(__name__,
                      static_folder=os.path.join(ROOT_DIR, "..", "static"))

    _CONF_D_PATH = os.environ.get('CONFIG_DIRECTORY',
                                  os.path.join(ROOT_DIR, "..", "..", "conf.d"))

    configs = [os.path.join(ROOT_DIR, "app.yml")]

    if os.path.isdir(_CONF_D_PATH):
        configs.extend(
            sorted(
                os.path.join(_CONF_D_PATH, x) for x in os.listdir(_CONF_D_PATH)
                if x.endswith(".yml")))

    for yaml_path in configs:
        if os.path.isfile(yaml_path):
            with open(yaml_path) as yaml_file:
                app.config.update(yaml.load(yaml_file))

    app.config.update(config)

    if 'SQLALCHEMY_DATABASE_URI' not in app.config:
        app.config['SQLALCHEMY_DATABASE_URI'] = os.path.expandvars(
            os.environ.get(
                'SQLALCHEMY_DATABASE_URI',
                'postgresql://localhost/{0}'.format(app.config['app_name'])))

    if os.path.exists("/dev/log"):
        syslog_handler = logbook.SyslogHandler(app.config['app_name'],
                                               "/dev/log")
        syslog_handler.push_application()

    del app.logger.handlers[:]
    redirect_logging()

    app.logger.info("Started")

    Mail(app)

    from . import models

    models.db.init_app(app)

    from . import auth
    from .blueprints import investigations, entities, events, roles, users, event_types
    Security(app, auth.user_datastore, register_blueprint=False)
    from .auth import auth
    from .views import views
    from .setup import setup
    app.register_blueprint(auth)
    app.register_blueprint(views)
    app.register_blueprint(setup)
    app.register_blueprint(investigations, url_prefix="/investigations")
    app.register_blueprint(entities, url_prefix="/entities")
    app.register_blueprint(events, url_prefix="/events")
    app.register_blueprint(roles, url_prefix="/roles")
    app.register_blueprint(users, url_prefix="/users")
    app.register_blueprint(event_types, url_prefix="/event-types")
    from .errors import errors
    for code in errors:
        app.errorhandler(code)(errors[code])

    return app