Пример #1
0
def w(d, f, name, is_essential, args):
    import traceback
    import time
    from opsbro.log import LoggerFactory
    from opsbro.stop import stopper

    daemon_logger = LoggerFactory.create_logger('daemon')

    tid = 0
    if libc:
        tid = libc.syscall(186)  # get the threadid when you are in it :)
    daemon_logger.debug('THREAD launch (%s) with thread id (%d)' % (name, tid))
    # Set in our entry object
    d['tid'] = tid
    # Change the system name of the thread, if possible
    d['thread'].name = name
    try:
        f(*args)
    except Exception:
        logger_crash = LoggerFactory.create_logger('crash')
        StringIO = libstore.get_StringIO()
        output = StringIO()
        traceback.print_exc(file=output)
        err = "Thread %s is exiting on error. Back trace of this error: %s" % (
            name, output.getvalue())
        daemon_logger.error(err)
        output.close()

        if is_essential:
            # Maybe the thread WAS an essential one (like http thread or something like this), if so
            # catch it and close the whole daemon
            logger_crash.error(err)
            err = 'The thread %s was an essential one, we are stopping the daemon do not be in an invalid state' % name
            logger_crash.error(err)
            daemon_logger.error(err)
            stopper.do_stop(err)
Пример #2
0
import subprocess
import threading
import os

from .linux_system_backend import LinuxBackend
from opsbro.log import LoggerFactory

# Global logger for this part
logger = LoggerFactory.create_logger('system-packages')


class DnfBackend(LinuxBackend):
    RPM_PACKAGE_FILE_PATH = '/var/lib/rpm/Packages'  # seems to be list of installed packages

    def __init__(self):
        self.lock = threading.RLock()

        self._installed_packages_cache = {
        }  # only tested packages will be kepts, and reset if yum/rpm installs
        self._rpm_package_file_age = None

    def _assert_valid_cache(self):
        last_package_change = os.stat(self.RPM_PACKAGE_FILE_PATH).st_mtime

        if self._rpm_package_file_age != last_package_change:
            self._rpm_package_file_age = last_package_change
            self._installed_packages_cache.clear()

    # DNF: know if a package is installed: dnf list installed "XXXX"
    # NOTE: XXXX is a regexp, so will match only installed, not the XXXX* ones
    # NOTE: --installed do not work for fedora 25 and below
Пример #3
0
from __future__ import print_function
import json
from opsbro.misc.websocketserver import WebSocket, SimpleWebSocketServer
from opsbro.log import LoggerFactory

# Global logger for this part
logger = LoggerFactory.create_logger('websocket')


class WebExporter(WebSocket):
    def handleMessage(self):
        if self.data is None:
            self.data = ''

    def handleConnected(self):
        logger.debug(self.address, 'connected')

    def handleClose(self):
        logger.debug(self.address, 'closed')


class WebSocketBackend(object):
    def __init__(self, mod_conf):
        port = mod_conf.get('port', 6769)
        listening_addr = mod_conf.get('address', '0.0.0.0')
        self.server = SimpleWebSocketServer(listening_addr, port, WebExporter)
        self.websocket_configuration = mod_conf

    def run(self):
        self.server.serveforever()
Пример #4
0
import win32service
import win32serviceutil
import locale
import win32event
import sys
import traceback

from opsbro.launcher import Launcher
from opsbro.threadmgr import threader
from opsbro.stop import stopper
from opsbro.log import LoggerFactory

logger_crash = LoggerFactory.create_logger('crash')


def LOG(s):
    with open(r'c:\opsbro.txt', 'a') as f:
        f.write('%s\n' % s)


LOG('IMPORT')


class Service(win32serviceutil.ServiceFramework):
    _svc_name_ = "OpsBro"
    _svc_display_name_ = "OpsBro"
    _svc_description_ = "OpsBro is a monitoring and discovery agent."

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        # create an event to listen for stop requests on