Example #1
0
    def main(self):
        setproctitle('logd')
        self.init_syslog_server()
        self.init_klog()
        self.init_rpc_server()
        self.init_flush()
        checkin()
        signal.signal(signal.SIGUSR1, signal.SIG_DFL)
        while True:
            sig = signal.sigwait([signal.SIGTERM, signal.SIGUSR1])
            if sig == signal.SIGUSR1:
                with self.cv:
                    logging.info('Flushing logs on signal')
                    self.flush = True
                    self.cv.notify_all()

                continue

            if sig == signal.SIGTERM:
                logging.info('Got SIGTERM, exiting')
                with self.cv:
                    self.exiting = True
                    self.cv.notify_all()

                self.flush_thread.join()
                break
Example #2
0
    def main(self):
        setproctitle('logd')
        self.init_configstore()
        self.init_syslog_server()
        self.init_klog()
        self.init_rpc_server()
        self.init_flush()
        self.load_configuration()
        checkin()
        signal.signal(signal.SIGUSR1, signal.SIG_DFL)
        signal.signal(signal.SIGHUP, signal.SIG_DFL)

        while True:
            sig = signal.sigwait([signal.SIGTERM, signal.SIGUSR1, signal.SIGHUP])
            if sig == signal.SIGUSR1:
                with self.cv:
                    logging.info('Flushing logs on signal')
                    self.flush = True
                    self.cv.notify_all()

                continue

            if sig == signal.SIGHUP:
                logging.info('Reloading configuration on SIGHUP')
                self.load_configuration()
                continue

            if sig == signal.SIGTERM:
                logging.info('Got SIGTERM, exiting')
                with self.cv:
                    self.exiting = True
                    self.cv.notify_all()

                self.flush_thread.join()
                break
Example #3
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c',
                            metavar='CONFIG',
                            default=DEFAULT_CONFIGFILE,
                            help='Middleware config file')
        parser.add_argument('-f',
                            action='store_true',
                            default=False,
                            help='Run in foreground')
        parser.add_argument('mountpoint',
                            metavar='MOUNTPOINT',
                            default='/etc',
                            help='/etc mount point')
        args = parser.parse_args()
        configure_logging('/var/log/etcd.log', 'DEBUG')

        setproctitle('etcd')
        self.root = args.mountpoint
        self.configfile = args.c
        self.parse_config(args.c)
        self.scan_plugins()
        self.init_renderers()
        self.init_datastore()
        self.init_dispatcher()
        self.generate_all()
        self.checkin()
        self.client.wait_forever()
Example #4
0
    def main(self):
        setproctitle('crashd')
        configure_logging('crashd', 'DEBUG')
        logger.info('Started')

        if not os.path.isdir(REPORTS_PATH):
            os.mkdir(REPORTS_PATH)

        self.observer = Observer()
        self.observer.schedule(Handler(self),
                               path=REPORTS_PATH,
                               recursive=False)
        self.observer.start()

        while True:
            if not self.last_send or self.last_send + datetime.timedelta(
                    hours=24) < datetime.datetime.now():
                self.collect_telemetry()
                self.send_telemetry()

            for i in os.listdir(REPORTS_PATH):
                with self.lock:
                    self.send_report(os.path.join(REPORTS_PATH, i))

            time.sleep(RETRY_INTERVAL)
Example #5
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c',
                            metavar='CONFIG',
                            default=DEFAULT_CONFIGFILE,
                            help='Middleware config file')
        args = parser.parse_args()
        configure_logging('fnstatd', 'DEBUG')
        setproctitle('fnstatd')

        # Signal handlers
        gevent.signal(signal.SIGQUIT, self.die)
        gevent.signal(signal.SIGTERM, self.die)
        gevent.signal(signal.SIGINT, self.die)
        gevent.spawn(self.event_worker)

        self.server = InputServer(self)
        self.config = args.c
        self.init_datastore()
        self.init_dispatcher()
        self.init_database()
        self.server.start()
        self.logger.info('Started')
        self.checkin()
        self.client.wait_forever()
Example #6
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c',
                            metavar='CONFIG',
                            default=DEFAULT_CONFIGFILE,
                            help='Middleware config file')
        parser.add_argument('-s',
                            metavar='SOCKET',
                            default=DEFAULT_SOCKET_ADDRESS,
                            help='Socket address to listen on')
        args = parser.parse_args()
        configure_logging('dscached', 'DEBUG')

        setproctitle('dscached')
        self.config = args.c
        self.parse_config(self.config)
        self.init_datastore()
        self.init_dispatcher()
        self.load_config()
        self.init_server(args.s)
        self.scan_plugins()
        self.register_schemas()
        self.wait_for_etcd()
        self.init_directories()
        self.checkin()
        self.client.wait_forever()
Example #7
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        args = parser.parse_args()
        self.config = args.c
        configure_logging('clid', 'DEBUG')

        setproctitle('clid')
        self.init_dispatcher()
        self.init_cli()
        self.client.wait_forever()
Example #8
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-s', metavar='SOCKET', default=DEFAULT_SOCKET_ADDRESS, help='Socket address to listen on')
        args = parser.parse_args()

        configure_logging('/var/log/serviced.log', 'DEBUG', file=True)
        bsd.setproctitle('serviced')
        self.logger.info('Started')
        self.init_server(args.s)
        self.bootstrap()
        self.event_loop()
Example #9
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-s', metavar='SOCKET', default=DEFAULT_SOCKET_ADDRESS, help='Socket address to listen on')
        args = parser.parse_args()

        configure_logging('/var/log/serviced.log', 'DEBUG', file=True)
        bsd.setproctitle('serviced')
        self.logger.info('Started')
        self.init_server(args.s)
        self.bootstrap()
        self.event_loop()
Example #10
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        args = parser.parse_args()
        self.config = args.c
        configure_logging('/var/log/clid.log', 'DEBUG')

        setproctitle('clid')
        self.init_dispatcher()
        self.init_cli()
        self.client.wait_forever()
Example #11
0
 def main(self):
     parser = argparse.ArgumentParser()
     parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
     parser.add_argument('-f', action='store_true', default=False, help='Run in foreground')
     args = parser.parse_args()
     configure_logging('/var/log/schedulerd.log', 'DEBUG')
     setproctitle('schedulerd')
     self.config = args.c
     self.init_datastore()
     self.init_scheduler()
     self.init_dispatcher()
     self.checkin()
     self.client.wait_forever()
Example #12
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        args = parser.parse_args()
        configure_logging('/var/log/alertd.log', 'DEBUG')

        setproctitle('alertd')
        self.config = args.c
        self.parse_config(self.config)
        self.init_datastore()
        self.init_dispatcher()
        self.scan_plugins()
        self.init_reminder()
        self.checkin()
        self.client.wait_forever()
Example #13
0
def main():
    global proc, null, log

    if len(sys.argv) < 2:
        print("Usage: crash-wrapper <path to executable> [args...]",
              file=sys.stderr)
        exit(1)

    setproctitle('crash-wrapper')
    signal.signal(signal.SIGTERM, sigterm)
    name = os.path.basename(sys.argv[1])
    null = open('/dev/null', 'r')
    log = open('/var/tmp/{0}.{1}.log'.format(name, os.getpid()), 'a+')
    proc = subprocess.Popen(sys.argv[1:],
                            stdin=null,
                            stdout=log,
                            stderr=subprocess.STDOUT,
                            close_fds=True)
    proc.wait()

    if proc.returncode > 0 or proc.returncode in (-signal.SIGSEGV,
                                                  -signal.SIGBUS):
        # Prepare error report
        log.seek(0, io.SEEK_SET)
        report = {
            'application': name,
            'type': 'error',
            'timestamp': str(datetime.datetime.now()),
            'exit_code': proc.returncode,
            'message': log.read()
        }

        try:
            with tempfile.NamedTemporaryFile(dir='/var/tmp/crash',
                                             mode='w',
                                             suffix='.json',
                                             prefix='report-',
                                             delete=False) as f:
                json.dump(report, f, indent=4)
        except:
            # at least we tried
            pass

    null.close()
    log.close()
    return proc.returncode
Example #14
0
    def main(self):
        setproctitle('crashd')
        logging.basicConfig(level=logging.INFO, format=LOGGING_FORMAT)
        logger.info('Started')

        if not os.path.isdir(REPORTS_PATH):
            os.mkdir(REPORTS_PATH)

        self.observer = Observer()
        self.observer.schedule(Handler(self), path=REPORTS_PATH, recursive=False)
        self.observer.start()

        while True:
            for i in os.listdir(REPORTS_PATH):
                with self.lock:
                    self.send_report(os.path.join(REPORTS_PATH, i))

            time.sleep(RETRY_INTERVAL)
Example #15
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c',
                            metavar='CONFIG',
                            default=DEFAULT_CONFIGFILE,
                            help='Middleware config file')
        args = parser.parse_args()
        configure_logging('alertd', 'DEBUG')

        setproctitle('alertd')
        self.config = args.c
        self.parse_config(self.config)
        self.init_datastore()
        self.init_dispatcher()
        self.scan_plugins()
        self.init_reminder()
        self.checkin()
        self.client.wait_forever()
Example #16
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-s", metavar="SOCKET", default=DEFAULT_SOCKET_ADDRESS, help="Socket address to listen on")
    parser.add_argument("-c", metavar="CONFIG", default=DEFAULT_CONFIGFILE, help="Configuration file path")
    args = parser.parse_args()
    logging.basicConfig(level=logging.DEBUG)
    context = Context()
    context.start(args.c, args.s)
    context.init_dispatcher()
    setproctitle("debugd")

    if not os.path.isdir(CORES_DIR):
        os.mkdir(CORES_DIR)

    checkin()

    while True:
        time.sleep(60)
Example #17
0
 def main(self):
     parser = argparse.ArgumentParser()
     parser.add_argument('-c',
                         metavar='CONFIG',
                         default=DEFAULT_CONFIGFILE,
                         help='Middleware config file')
     parser.add_argument('-f',
                         action='store_true',
                         default=False,
                         help='Run in foreground')
     args = parser.parse_args()
     configure_logging('schedulerd', 'DEBUG')
     setproctitle('schedulerd')
     self.config = args.c
     self.init_datastore()
     self.init_scheduler()
     self.init_dispatcher()
     self.checkin()
     self.client.wait_forever()
Example #18
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        parser.add_argument('-s', metavar='SOCKET', default=DEFAULT_SOCKET_ADDRESS, help='Socket address to listen on')
        args = parser.parse_args()
        configure_logging('dscached', 'DEBUG')

        setproctitle('dscached')
        self.config = args.c
        self.parse_config(self.config)
        self.init_datastore()
        self.init_dispatcher()
        self.load_config()
        self.init_server(args.s)
        self.scan_plugins()
        self.wait_for_etcd()
        self.init_directories()
        self.checkin()
        self.client.wait_forever()
Example #19
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        parser.add_argument('-f', action='store_true', default=False, help='Run in foreground')
        parser.add_argument('mountpoint', metavar='MOUNTPOINT', default='/etc', help='/etc mount point')
        args = parser.parse_args()
        configure_logging('etcd', 'DEBUG')

        setproctitle('etcd')
        self.root = args.mountpoint
        self.configfile = args.c
        self.parse_config(args.c)
        self.scan_plugins()
        self.init_renderers()
        self.init_datastore()
        self.init_dispatcher()
        self.generate_all()
        self.checkin()
        self.client.wait_forever()
Example #20
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        args = parser.parse_args()
        configure_logging('networkd', 'DEBUG')
        setproctitle('networkd')
        self.config = args.c
        self.init_datastore()
        self.init_dispatcher()
        self.scan_interfaces()
        self.init_routing_socket()
        self.client.resume_service('networkd.configuration')
        self.client.resume_service('networkd.debug')

        for i in self.configure_network():
            self.logger.info('Initial network configuration: {0}, {1}'.format(*i))

        self.checkin()
        self.logger.info('Started')
        self.client.wait_forever()
Example #21
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        args = parser.parse_args()
        configure_logging('networkd', 'DEBUG')
        setproctitle('networkd')
        self.config = args.c
        self.init_datastore()
        self.init_dispatcher()
        self.scan_interfaces()
        self.init_routing_socket()
        self.client.resume_service('networkd.configuration')
        self.client.resume_service('networkd.debug')

        for i in self.configure_network():
            self.logger.info('Initial network configuration: {0}, {1}'.format(*i))

        self.checkin()
        self.logger.info('Started')
        self.client.wait_forever()
Example #22
0
    def main(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', metavar='CONFIG', default=DEFAULT_CONFIGFILE, help='Middleware config file')
        args = parser.parse_args()
        configure_logging('/var/log/fnstatd.log', 'DEBUG')
        setproctitle('fnstatd')

        # Signal handlers
        gevent.signal(signal.SIGQUIT, self.die)
        gevent.signal(signal.SIGTERM, self.die)
        gevent.signal(signal.SIGINT, self.die)

        self.server = InputServer(self)
        self.config = args.c
        self.init_datastore()
        self.init_dispatcher()
        self.init_database()
        self.server.start()
        self.logger.info('Started')
        self.checkin()
        self.client.wait_forever()
Example #23
0
    def main(self):
        setproctitle('crashd')
        configure_logging('crashd', 'DEBUG')
        logger.info('Started')

        if not os.path.isdir(REPORTS_PATH):
            os.mkdir(REPORTS_PATH)

        self.observer = Observer()
        self.observer.schedule(Handler(self), path=REPORTS_PATH, recursive=False)
        self.observer.start()

        while True:
            if not self.last_send or self.last_send + datetime.timedelta(hours=24) < datetime.datetime.now():
                self.collect_telemetry()
                self.send_telemetry()

            for i in os.listdir(REPORTS_PATH):
                with self.lock:
                    self.send_report(os.path.join(REPORTS_PATH, i))

            time.sleep(RETRY_INTERVAL)
Example #24
0
def main():
    global proc, null, log

    if len(sys.argv) < 2:
        print("Usage: crash-wrapper <path to executable> [args...]", file=sys.stderr)
        exit(1)

    setproctitle('crash-wrapper')
    signal.signal(signal.SIGTERM, sigterm)
    name = os.path.basename(sys.argv[1])
    null = open('/dev/null', 'r')
    log = open('/var/tmp/{0}.{1}.log'.format(name, os.getpid()), 'a+')
    proc = subprocess.Popen(sys.argv[1:], stdin=null, stdout=log, stderr=subprocess.STDOUT, close_fds=True)
    proc.wait()

    if proc.returncode > 0 or proc.returncode in (-signal.SIGSEGV, -signal.SIGBUS):
        # Prepare error report
        log.seek(0, io.SEEK_SET)
        report = {
            'application': name,
            'type': 'error',
            'timestamp': str(datetime.datetime.now()),
            'exit_code': proc.returncode,
            'message': log.read()
        }

        try:
            with tempfile.NamedTemporaryFile(dir='/var/tmp/crash', mode='w', suffix='.json', prefix='report-', delete=False) as f:
                json.dump(report, f, indent=4)
        except:
            # at least we tried
            pass

    null.close()
    log.close()
    return proc.returncode
Example #25
0
    def main(self):
        if len(sys.argv) != 2:
            print("Invalid number of arguments", file=sys.stderr)
            sys.exit(errno.EINVAL)

        key = sys.argv[1]
        configure_logging(None, logging.DEBUG)

        self.datastore = get_datastore()
        self.configstore = ConfigStore(self.datastore)
        self.conn = Client()
        self.conn.connect('unix:')
        self.conn.login_service('task.{0}'.format(os.getpid()))
        self.conn.enable_server()
        self.conn.call_sync('management.enable_features',
                            ['streaming_responses'])
        self.conn.rpc.register_service_instance('taskproxy', self.service)
        self.conn.register_event_handler('task.progress',
                                         self.task_progress_handler)
        self.conn.call_sync('task.checkin', key)
        setproctitle('task executor (idle)')

        while True:
            try:
                task = self.task.get()
                logging.root.setLevel(
                    self.conn.call_sync('management.get_logging_level'))
                setproctitle('task executor (tid {0})'.format(task['id']))

                if task['debugger']:
                    sys.path.append('/usr/local/lib/dispatcher/pydev')

                    import pydevd
                    host, port = task['debugger']
                    pydevd.settrace(host,
                                    port=port,
                                    stdoutToServer=True,
                                    stderrToServer=True)

                name, _ = os.path.splitext(os.path.basename(task['filename']))
                module = self.module_cache.get(task['filename'])
                if not module:
                    module = load_module_from_file(name, task['filename'])
                    self.module_cache[task['filename']] = module

                setproctitle('task executor (tid {0})'.format(task['id']))
                fds = list(self.collect_fds(task['args']))

                try:
                    dispatcher = DispatcherWrapper(self.conn)
                    self.instance = getattr(module,
                                            task['class'])(dispatcher,
                                                           self.datastore)
                    self.instance.configstore = self.configstore
                    self.instance.user = task['user']
                    self.instance.environment = task['environment']
                    self.running.set()
                    self.run_task_hooks(self.instance, task, 'before')
                    result = self.instance.run(*task['args'])
                    self.run_task_hooks(self.instance,
                                        task,
                                        'after',
                                        result=result)
                except BaseException as err:
                    print("Task exception: {0}".format(str(err)),
                          file=sys.stderr)
                    traceback.print_exc(file=sys.stderr)

                    if hasattr(self.instance, 'rollback'):
                        self.put_status('ROLLBACK')
                        try:
                            self.instance.rollback(*task['args'])
                        except BaseException as rerr:
                            print("Task exception during rollback: {0}".format(
                                str(rerr)),
                                  file=sys.stderr)
                            traceback.print_exc(file=sys.stderr)

                    # Main task is already failed at this point, so ignore hook errors
                    with contextlib.suppress(RpcException):
                        self.run_task_hooks(self.instance,
                                            task,
                                            'error',
                                            error=serialize_error(err))

                    self.put_status('FAILED', exception=err)
                else:
                    self.put_status('FINISHED', result=result)
                finally:
                    self.close_fds(fds)
                    self.running.clear()

            except RpcException as err:
                print("RPC failed: {0}".format(str(err)), file=sys.stderr)
                print(traceback.format_exc(), flush=True)
                sys.exit(errno.EBADMSG)
            except socket.error as err:
                print("Cannot connect to dispatcher: {0}".format(str(err)),
                      file=sys.stderr)
                sys.exit(errno.ETIMEDOUT)

            if task['debugger']:
                import pydevd
                pydevd.stoptrace()

            setproctitle('task executor (idle)')
Example #26
0
    def main(self):
        if len(sys.argv) != 2:
            print("Invalid number of arguments", file=sys.stderr)
            sys.exit(errno.EINVAL)

        key = sys.argv[1]
        configure_logging(None, logging.DEBUG)

        self.datastore = get_datastore()
        self.configstore = ConfigStore(self.datastore)
        self.conn = Client()
        self.conn.connect('unix:')
        self.conn.login_service('task.{0}'.format(os.getpid()))
        self.conn.enable_server()
        self.conn.call_sync('management.enable_features', ['streaming_responses'])
        self.conn.rpc.register_service_instance('taskproxy', self.service)
        self.conn.register_event_handler('task.progress', self.task_progress_handler)
        self.conn.call_sync('task.checkin', key)
        setproctitle('task executor (idle)')

        while True:
            try:
                task = self.task.get()
                logging.root.setLevel(self.conn.call_sync('management.get_logging_level'))
                setproctitle('task executor (tid {0})'.format(task['id']))

                if task['debugger']:
                    sys.path.append('/usr/local/lib/dispatcher/pydev')

                    import pydevd
                    host, port = task['debugger']
                    pydevd.settrace(host, port=port, stdoutToServer=True, stderrToServer=True)

                name, _ = os.path.splitext(os.path.basename(task['filename']))
                module = self.module_cache.get(task['filename'])
                if not module:
                    module = load_module_from_file(name, task['filename'])
                    self.module_cache[task['filename']] = module

                setproctitle('task executor (tid {0})'.format(task['id']))
                fds = list(self.collect_fds(task['args']))

                try:
                    dispatcher = DispatcherWrapper(self.conn)
                    self.instance = getattr(module, task['class'])(dispatcher, self.datastore)
                    self.instance.configstore = self.configstore
                    self.instance.user = task['user']
                    self.instance.environment = task['environment']
                    self.running.set()
                    self.run_task_hooks(self.instance, task, 'before')
                    result = self.instance.run(*task['args'])
                    self.run_task_hooks(self.instance, task, 'after', result=result)
                except BaseException as err:
                    print("Task exception: {0}".format(str(err)), file=sys.stderr)
                    traceback.print_exc(file=sys.stderr)

                    if hasattr(self.instance, 'rollback'):
                        self.put_status('ROLLBACK')
                        try:
                            self.instance.rollback(*task['args'])
                        except BaseException as rerr:
                            print("Task exception during rollback: {0}".format(str(rerr)), file=sys.stderr)
                            traceback.print_exc(file=sys.stderr)

                    # Main task is already failed at this point, so ignore hook errors
                    with contextlib.suppress(RpcException):
                        self.run_task_hooks(self.instance, task, 'error', error=serialize_error(err))

                    self.put_status('FAILED', exception=err)
                else:
                    self.put_status('FINISHED', result=result)
                finally:
                    self.close_fds(fds)
                    self.running.clear()

            except RpcException as err:
                print("RPC failed: {0}".format(str(err)), file=sys.stderr)
                print(traceback.format_exc(), flush=True)
                sys.exit(errno.EBADMSG)
            except socket.error as err:
                print("Cannot connect to dispatcher: {0}".format(str(err)), file=sys.stderr)
                sys.exit(errno.ETIMEDOUT)

            if task['debugger']:
                import pydevd
                pydevd.stoptrace()

            setproctitle('task executor (idle)')