Exemplo n.º 1
0
def app_with_scout(config=None):
    """
    Context manager that configures a Dramatiq app with Scout middleware
    installed.
    """
    # Enable Scout by default in tests.
    if config is None:
        config = {"monitor": True}

    # Disable running the agent.
    config["core_agent_launch"] = False

    broker = StubBroker()
    broker.emit_after("process_boot")
    dramatiq.set_broker(broker)

    @dramatiq.actor(max_retries=0)
    def hello():
        return "Hello World!"

    @dramatiq.actor(max_retries=0)
    def fail():
        raise ValueError("BØØM!")  # non-ASCII

    worker = dramatiq.Worker(broker, worker_timeout=0)

    # Setup according to https://docs.scoutapm.com/#dramatiq
    Config.set(**config)
    broker.add_middleware(ScoutMiddleware(),
                          before=broker.middleware[0].__class__)
    worker.start()

    App = namedtuple("App", ["broker", "worker", "hello", "fail"])
    try:
        yield App(broker=broker, worker=worker, hello=hello, fail=fail)
    finally:
        worker.stop()
        # Reset Scout configuration.
        Config.reset_all()
Exemplo n.º 2
0

class InitDB(dramatiq.Middleware):
    def before_worker_boot(self, broker, worker):
        async def run():
            from . import db

            await db.db.set_bind(db.CONNECTION_STR)

        loop.run_until_complete(run())

    def before_worker_shutdown(self, broker, worker):
        shutdown.set()


MIDDLEWARE = [
    m()
    for m in (AgeLimit, ShutdownNotifications, Callbacks, Pipelines, Retries)
]

if TEST:
    broker = StubBroker(middleware=MIDDLEWARE)
    broker.emit_after("process_boot")
else:
    broker = RedisBroker(
        connection_pool=redis.ConnectionPool.from_url(REDIS_HOST),
        middleware=MIDDLEWARE)

broker.add_middleware(InitDB())
dramatiq.set_broker(broker)
Exemplo n.º 3
0
    # Setup backends
    result_backend = ResultStubBackend()
    rate_limits_backend = RateLimitsStubBackend()
    # Setup brokers
    broker = StubBroker()
else:
    logger.info("Setup redis broker")
    # Setup backends
    result_backend = ResultRedisBackend(url=settings.RESULT_REDIS_URL)
    rate_limits_backend = RateLimitsRedisBackend(
        url=settings.RATE_LIMITS_REDIS_URL)
    # Setup brokers
    broker = RedisBroker(url=settings.BROKER_REDIS_URL)

results = Results(backend=result_backend)
broker.add_middleware(results)

if settings.PROMETHEUS_METRICS_SERVER_ENABLE:
    broker.add_middleware(
        Prometheus(
            http_host=settings.PROMETHEUS_METRICS_LISTEN_HOST,
            http_port=settings.PROMETHEUS_METRICS_LISTEN_PORT,
        ))

dramatiq.set_broker(broker=broker)

DISTRIBUTED_MUTEX_REPORT = ConcurrentRateLimiter(rate_limits_backend,
                                                 "distributed-mutex-report",
                                                 limit=1)

bot = telegram.Bot(token=settings.TELEGRAM_TOKEN)