GithubHelp home page GithubHelp logo

ejhayes / bull-monitor Goto Github PK

View Code? Open in Web Editor NEW
48.0 2.0 19.0 3.31 MB

All in one bull monitoring and reporting utility

Home Page: https://hub.docker.com/r/ejhayes/nodejs-bull-monitor

JavaScript 1.36% Shell 2.02% TypeScript 95.37% Dockerfile 1.25%
arena bull bullmq dashboard job-queue redis-queue bull-board bull-master

bull-monitor's Introduction

bull-monitor

Maintainability Test Coverage Dockerhub All Contributors

This is an all-in-one tool to help you visualize and report on bull! It runs as a docker container that you can spin up with local development or host wherever you see fit. The core goal of this project is to provide realtime integration of your bull queues with existing bull tooling...without needing to run write any custom code. The following is automatically included:

  • Automatic discovery of your bull queues (just point this at your redis instance)
  • Automatic configuration of prometheus metrics for each discovered queue
  • Configurable UI support to visualize bull queues (supported: arena, bull-board, bull-master)
  • Sentry error reporting (just pass SENTRY_DSN environment variable)
  • Elastic ECS logging when NODE_ENV is set to production
  • Bundled oauth2_proxy if you want to restrict access (disabled by default)

You can test it out with docker by running (if you want to access something running on your host machine and not within the docker network you can use the special hostname host.docker.internal):

docker run -d --rm \
  --name bull-monitor \
  -e "NODE_ENV=development" \
  -e "REDIS_HOST=host.docker.internal" \
  -e "REDIS_PORT=6001" \
  -e "PORT=3000" \
  -e "BULL_WATCH_QUEUE_PREFIXES=bull" \
  -e "UI=bull-master" \
  -p 3000:3000 \
  ejhayes/nodejs-bull-monitor:latest

To use with docker compose, add the following to docker-compose.yml:

bull-monitor:
  image: ejhayes/nodejs-bull-monitor:latest
  ports:
    - 3000:3000
  environment:
    REDIS_HOST: <your redis host>
    REDIS_PORT: <your redis port>
    BULL_WATCH_QUEUE_PREFIXES: bull
    PORT: 3000
    UI: bull-master

Then run docker-compose up bull-monitor. Assuming no issues, the following paths are available:

Path Description
/metrics Prometheus metrics
/health Health endpoint (always returns HTTP 200 with OK text)
/docs Swagger UI
/docs-json Swagger JSON definition
/queues Bull UI (currently arena or bull-board)

configuration

The following environment variables are supported:

Environment Variable Required Default Value Description
ALTERNATE_PORT 8081 If oauth2 proxy is enabled bull monitor will run on this port instead
REDIS_HOST x null Redis host (IMPORTANT must be same redis instance that stores bull jobs!)
REDIS_PORT x null Redis port
REDIS_PASSWORD null Redis password
REDIS_DB 0 Redis database index to use (see options.db from docs)
UI bull-board UI to use (supported: arena, bull-board)
BULL_WATCH_QUEUE_PREFIXES bull Bull prefixes to monitor (globs like prefix* are supported)
BULL_COLLECT_QUEUE_METRICS_INTERVAL_MS 60000 How often queue metrics are gathered
COLLECT_NODEJS_METRICS false Collect NodeJS metrics and expose via prometheus
COLLECT_NODEJS_METRICS_INTERVAL_MS 60000 How often to calculate NodeJS metrics (if enabled)
REDIS_CONFIGURE_KEYSPACE_NOTIFICATIONS true Automatically configures redis keyspace notifications (typically not enabled by default). IMPORTANT: This will NOT work without keyspace notifications configured.
LOG_LABEL bull-monitor Log label to use
LOG_LEVEL info Log level to use (supported: debug, error, info, warn)
NODE_ENV production Node environment (use development for colorized logging)
OAUTH2_PROXY_* null See OAuth2 Proxy docs for more details
PORT 3000 Port to use
SENTRY_DSN null Sentry DSN to send errors to (disabled if not provided)
USE_OAUTH2_PROXY 0 Enable oauth2 proxy (anything other than 1 will disable)

getting started

To get started:

npm install
npm run services:start
npm run start:dev

If you want to run the tests:

npm run test
npm run test:e2e

To build the container (will be built/tagged as ejhayes/nodejs-bull-monitor):

npm run ci:build

generating quues/workers

A test script is included so you can try creating and/or processing bull jobs. Examples:

# create a queue and add jobs to it (no processing)
npm run generate:create

# process queue jobs only
npm run generate:process

# create and process jobs
npm run generate

The default behavior of npm run generate is to:

  • Create MyBullQueue queue if it doesn't exist.
  • Add a dummy job every 10 milliseconds.
  • Add a worker that with concurrency 15 that processes up to 200 jobs per 1 second (jobs retried up to 4 times).
  • Configure each job to take up to 200 milliseconds. Jobs can fail randomly.

See ./test.ts for more details.

prometheus metrics

NOTE: metrics are available at the /metrics endpoint

For each queue that is created the following metrics are automatically tracked.

Metric type description
jobs_completed_total gauge Total number of completed jobs
jobs_failed_total gauge Total number of failed jobs
jobs_delayed_total gauge Total number of delayed jobs
jobs_active_total gauge Total number of active jobs
jobs_waiting_total gauge Total number of waiting jobs
jobs_active counter Jobs active
jobs_waiting counter Jobs waiting
jobs_stalled counter Jobs stalled
jobs_failed counter Jobs failed
jobs_completed counter Jobs completed
jobs_delayed counter Jobs delayed
job_duration summary Processing time for completed/failed jobs
job_wait_duration summary Durating spent waiting for job to start
job_attempts summary Number of attempts made before job completed/failed

The following labels are available:

Label Name Description
queue_prefix Queue Prefix
queue_name Queue Name
job_name Job name
status Job status (choiced: completed, failed)
error_type Error type (uses error class name)

Things to note about these metrics:

  • Queue metrics are GLOBAL not worker specific
  • Gauge metrics (*_total) are refreshed every 60 seconds. To change this you'll need to set environment variable BULL_COLLECT_QUEUE_METRICS_INTERVAL_MS to another value.

grafana support

You can visualize your queue metrics in Grafana! There are several pieces that need to be running for this to work:

  • bull-monitor - this utility must be running (and the /metrics endpoint should be accessible)
  • prometheus - you need to be running prometheus and have it configured to scrape bull-monitor
  • grafana - grafana needs to be setup and configured to scrape data from prometheus

If you want to play around with a local setup of this:

# start services
npm run services:start
npm run start:dev

# generate/process dummy data
npm run generate

You can now go to: http://localhost:3001/dashboard/import and load dashboards:

Grafana Dashboard Name Grafana ID Description Screenshot
Queue Overview 14538 High level overview of all monitored bull queues
Queue Specific 14537 Queue specific details

Available UIs

There are 3 options currently available for UIs: bull-board, arena, and bull-master.

bull-board

From: https://github.com/felixmosh/bull-board#readme. This is the default UI. If you want to be explicit just set UI environment variable to bull-board.

bull-master

From: https://github.com/hans-lizihan/bull-master. To use this UI you'll need to set the UI environment variable to bull-master.

bull-arena

From: https://github.com/bee-queue/arena. To use this UI you'll need to set the UI environment variable to arena.

OAuth2 Proxy

You can restrict access to bull monitor using the built in OAuth2 proxy. To enable you'll need the following environment variables at a minimum:

  • USE_OAUTH2_PROXY (must be set to 1)
  • OAUTH2_PROXY_REDIRECT_URL (this is what the oauth provider will be redirecting to)
  • OAUTH2_PROXY_CLIENT_ID
  • OAUTH2_PROXY_SECRET_ID

Many other configuration options are possible. See the OAuth2 Proxy documentation for more information.

Security Considerations

  • This is intended as a back office monitoring solution. You should not make expose this publicly
  • This is currently intended to run as a single process and should not be scaled horizontally (future todo item)

Local Development

You can spin up a full local development environment by running:

# start services
npm run services:start
npm run start:dev

The following services are available (and automatically configured) at these locations:

When you are done you can get rid of everything with:

npm run services:remove

# OR if you want to stop without removing
npm run services:stop

Roadmap

See the roadmap for idas on how to improve this project.

Contributors โœจ

Thanks goes to these wonderful people (emoji key):


Eric Hayes

๐Ÿ“– ๐Ÿš‡ โš ๏ธ ๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind welcome!

bull-monitor's People

Contributors

dependabot[bot] avatar ejhayes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

bull-monitor's Issues

Bull Support

Add support for Bull queues

keys bull:QUEUE_NAME:wait

In bull there will not be an equivalent bull:QUEUE_NAME:meta key so this is our only indicator that this is a regular bull queue

Bull Dashboard not working

image

Bull Dashboard is not working. Here's the log file


[Nest] 1   - 12/06/2021, 1:11:18 PM   [NestFactory] Starting Nest application...

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] AppModule dependencies initialized +45ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] ConfigModule dependencies initialized +0ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] RedisModule dependencies initialized +0ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] HealthModule dependencies initialized +1ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] DiscoveryModule dependencies initialized +0ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] LoggerModule dependencies initialized +3ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] VersionModule dependencies initialized +1ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] EventEmitterModule dependencies initialized +1ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] RedisCoreModule dependencies initialized +1ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] MetricsModule dependencies initialized +0ms

[Nest] 1   - 12/06/2021, 1:11:18 PM   [InstanceLoader] BullModule dependencies initialized +1ms

{"context":"bootstrap","timestampDiff":"","message":"Listening on HTTP port 3005","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullDashboardMiddleware","timestampDiff":"+5ms","message":"Creating middleware","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"RoutesResolver","timestampDiff":"+1ms","message":"HealthController {/health}:","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"RouterExplorer","timestampDiff":"+2ms","message":"Mapped {/health, GET} route","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"RoutesResolver","timestampDiff":"+0ms","message":"MetricsController {/metrics}:","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"RouterExplorer","timestampDiff":"+1ms","message":"Mapped {/metrics, GET} route","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"RoutesResolver","timestampDiff":"+0ms","message":"VersionController {/version}:","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"RouterExplorer","timestampDiff":"+0ms","message":"Mapped {/version, GET} route","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+1ms","message":"Bootstrapping","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+1ms","message":"Waiting for redis to be ready","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"NestApplication","timestampDiff":"+4ms","message":"Nest application successfully started","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+27ms","message":"Redis connection READY! Configuring watchers for bull queues.","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+4ms","message":"Redis config for notify-keyspace-events: 'AK'","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+0ms","message":"Updating notify-keyspace-events to '$AK'","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+3ms","message":"Queues currently monitored: <none>","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+0ms","message":"Loading queues from queuePrefix: 'bull'","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+338ms","message":"Pruning unused queues: <none>","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

{"context":"BullQueuesService","timestampDiff":"+2ms","message":"Subscribed to keyspace events for bull","label":"bull-monitor","@timestamp":"2021-12-06T13:11:19","log":{"level":"debug"}}

feature request: allow connection url

Hey @ejhayes ๐Ÿ‘‹

any chance you could offer the option to pass a redis url instead of the host/port? that would allow to connect optionally via tls using rediss:// or redis://.

Looks like @nestjs/redis is supporting it here. As for implementation one could prioritise an env such as REDIS_URL over REDIS_HOST/REDIS_PORT/REDIS_PASSWORD if set.

wdyt?

BullMQ v4

I like this package, in that it has a Grafana Dashboard and Prometheus Metrics.
However it does not work for me with BullMQ v4.8.0 (the latest version)

Are there any plans to supporting BullMQ v4?

Allow Redis with a password

Our redis instance uses a password, the nestjs-redis module allows to use this. It would be great if you would enable this in the docker image

export default {
    host: process.env.REDIS_HOST,
    port: parseInt(process.env.REDIS_PORT),
    db: parseInt(process.env.REDIS_DB),
    password: process.env.REDIS_PASSWORD,
    keyPrefix: process.env.REDIS_PRIFIX,
}

Missing metrics for completed jobs that are automatically removed

Hey @ejhayes

do you happen to know if I have to keep completed and failed jobs saved in order for bull-monitor to work?

I have one worker with a config like so:

    new Worker('my-queue', myJobProcessor, {
        autorun: false,
        connection: new Redis(`${process.env.REDIS_URI}`, {
            maxRetriesPerRequest: null,
        }),
        removeOnComplete: { count: 50 },
        removeOnFail: { count: 250 },
    });

And bull-monitor, just as expected, is able to create metrics on jobs in that queue.

Now I added another worker, and because the amount of data transmitted inside the job is too big, I'm deleting completed and failed job right away like so:

    new Worker('my-other-queue', myOtherJobProcessor, {
        autorun: false,
        connection: new Redis(`${process.env.REDIS_URI}`, {
            maxRetriesPerRequest: null,
        }),
        removeOnComplete: { count: 0 },
        removeOnFail: { count: 0 },
    });

For the latter bull-monitor is crashing on me with the following:

TypeError: Cannot read properties of undefined (reading 'name')
at QueueEvents.<anonymous> (/src/bull/bullmq-metrics.factory.ts:267:37)
...

which looks like to come down on the queueEvents in the bull-metrics.factory

example bullmq-metrics.factory.ts#L204

    queueEvents.on('stalled', async (event) => {
      const job = await queue.getJob(event.jobId);
      const jobLabels = {
        [LABEL_NAMES.JOB_NAME]: job.name,
        ...labels,
      };
      this.jobs_stalled.inc(jobLabels, 1);
    });

Am I correct to assume that .getJob(event.jobId) returns undefined at this point so the the labels cannot be build for the job when I'm not retaining some of the completed and failed jobs?

oauth2-proxy example

Hello,
Can we have an example of integration with OAUTH2 proxy?
I managed to add new variables related to the proxy.
When accessing app, I now have the oauth-proxy page and it redirects me to the IdP (keycloak for me).
I can see that the authentification is sucessfull as they are messages like:

{<USER>@<DOMAIN> [2023/07/13 15:10:47] [AuthSuccess] Authenticated via OAuth2

But then it redirect me to the URL like https://<URL>/oauth2/callback?state=XXXX&session_state=XXXX and I have a 502 badGateway

ARM build

Hi, I'd like to use bull-monitor Docker on my M1 Mac development machine, but it's only available as an amd64 build. Could you build it for ARM as well?

Issue:

โ ‡ bull-monitor The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested 0.0s

Getting error while running through docker-compose

this is my configuration:

bull-monitor:
    image: ejhayes/nodejs-bull-monitor:latest
    ports:
      - 8300:8300
    environment:
      REDIS_HOST: xxxxxxxxxxxx
      REDIS_PORT: 6379
      PORT: 8300
      BULL_WATCH_QUEUE_PREFIXES: multi
      UI: bull-master

Error:

bull-monitor_1                      | ReplyError
bull-monitor_1                      | ReplyError: ERR unknown command `config`, with args beginning with: `GET`, `notify-keyspace-events`,
bull-monitor_1                      |     at parseError (/app/node_modules/redis-parser/lib/parser.js:179:12)
bull-monitor_1                      |     at parseType (/app/node_modules/redis-parser/lib/parser.js:302:14)

While running docker-compose up i am getting below error.
image

Queues not detected

Hey !
First, thx for creating this tool !

I'm using since few months bull-dashboard but I was searching an alternative with more features. So on the paper your tool is perfect for my case :) So I started by adding it to my stack in my docker-compose file.

bullmonitor:
    image: ejhayes/nodejs-bull-monitor
    restart: always
    ports:
      - 3003:3000
    environment:
      REDIS_HOST: redis-jobs
      REDIS_PORT: 6379

Here was my config for bullboard :

bullboard:
    image: deadly0/bull-board
    restart: always
    ports:
      - 3004:3000
    environment:
      REDIS_HOST: redis-jobs 

When I start my stack, everything looks fine, the dashboard is starting etc.. but it never detect my queues. ( It tested with bull-master UI, same issue ).

image

If I check on my old bullboard at the same time, the queues are here and I can see the jobs etc...

I only found a tricky method ( maybe more witchcraft ) to make it work. I restart my old bullboard while bull-monitor is running and then my queues are detected by bull-monitor. I don't have enough knowledge in bull to explain why but it works ๐Ÿคท

So my question is, how can I fix that ? Did I do something wrong in my configuration ?
Here are the logs of bull-monitor.

Thx in advance :)
Have a good day !

โžœ  api git:(dev) โœ— docker logs c0b
OAuth2 Proxy Disabled
{"@timestamp":"2022-11-07T13:27:50","context":"Daemon","label":"bull-monitor","log":{"level":"info"},"message":"Starting bull-monitor process","timestampDiff":""}
{"@timestamp":"2022-11-07T13:27:52","context":"NestFactory","label":"bull-monitor","log":{"level":"info"},"message":"Starting Nest application...","timestampDiff":""}
{"@timestamp":"2022-11-07T13:27:52","context":"InjectorLogger","label":"bull-monitor","log":{"level":"info"},"message":"Nest encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.","timestampDiff":"+81ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InjectorLogger","label":"bull-monitor","log":{"level":"info"},"message":"Nest encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.","timestampDiff":"+16ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InjectorLogger","label":"bull-monitor","log":{"level":"info"},"message":"Nest encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InjectorLogger","label":"bull-monitor","log":{"level":"info"},"message":"Nest encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.","timestampDiff":"+0ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InjectorLogger","label":"bull-monitor","log":{"level":"info"},"message":"Nest encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InjectorLogger","label":"bull-monitor","log":{"level":"info"},"message":"Nest encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"AppModule dependencies initialized","timestampDiff":"+16ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"ConfigModule dependencies initialized","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"RedisModule dependencies initialized","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"HealthModule dependencies initialized","timestampDiff":"+2ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"DiscoveryModule dependencies initialized","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"LoggerModule dependencies initialized","timestampDiff":"+12ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"VersionModule dependencies initialized","timestampDiff":"+12ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"EventEmitterModule dependencies initialized","timestampDiff":"+2ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"MetricsModule dependencies initialized","timestampDiff":"+5ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"RedisCoreModule dependencies initialized","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:52","context":"InstanceLoader","label":"bull-monitor","log":{"level":"info"},"message":"BullModule dependencies initialized","timestampDiff":"+2ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"bootstrap","label":"bull-monitor","log":{"level":"info"},"message":"Listening on HTTP port 3000","timestampDiff":"+1949ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"RoutesResolver","label":"bull-monitor","log":{"level":"info"},"message":"HealthController {/health}:","timestampDiff":"+6ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"RouterExplorer","label":"bull-monitor","log":{"level":"info"},"message":"Mapped {/health, GET} route","timestampDiff":"+7ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"RoutesResolver","label":"bull-monitor","log":{"level":"info"},"message":"MetricsController {/metrics}:","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"RouterExplorer","label":"bull-monitor","log":{"level":"info"},"message":"Mapped {/metrics, GET} route","timestampDiff":"+2ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"RoutesResolver","label":"bull-monitor","log":{"level":"info"},"message":"VersionController {/version}:","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"RouterExplorer","label":"bull-monitor","log":{"level":"info"},"message":"Mapped {/version, GET} route","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Bootstrapping","timestampDiff":"+5ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"NestApplication","label":"bull-monitor","log":{"level":"info"},"message":"Nest application successfully started","timestampDiff":"+17ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"[subscriber] ready","timestampDiff":"+71ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"[publish] ready","timestampDiff":"+7ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Subscribed to 1 keyspace event(s) for 'bull'","timestampDiff":"+4ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Registering pmessage listener","timestampDiff":"+0ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Redis connection READY! Configuring watchers for bull queues.","timestampDiff":"+2ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Redis config for notify-keyspace-events: ''","timestampDiff":"+3ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Updating notify-keyspace-events to '$AK'","timestampDiff":"+1ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Loading queues from queuePrefix: 'bull'","timestampDiff":"+0ms"}
{"@timestamp":"2022-11-07T13:27:54","context":"BullQueuesService","label":"bull-monitor","log":{"level":"info"},"message":"Pruning unused queues: <none>","timestampDiff":"+5ms"}

Bull Pro Support

Add support for bull pro queues

hgetall bull:SOME_BULLMQ_PRO_QUEUE:meta
1) "opts.maxLenEvents"
2) "10000"
3) "version"
4) "bullmq-pro"

The only discernible difference between this and bullmq queues is that the version key does not exist (returns nil)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.