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)
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
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()
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