hans-lizihan / bull-master Goto Github PK
View Code? Open in Web Editor NEWNice UI for bull and bullmq
License: MIT License
Nice UI for bull and bullmq
License: MIT License
In the main view, you can see the beautiful state graphs, and below the list of all queues.
It would be great to click on a state on a graph, failed
for example, and it would filter the list of all queues to only the ones with at least one failed job.
It should be possible by iterating all of the queues, and search for at least one failed using the getJobs('failed')
bull method.
First of all, congrats on the neat project 🚀 I was using bull-board
but decided to take a look at yours since it has some nice features :)
One thing I was really looking forward was the ability to add jobs to a given queue (something really simple like a input for the json-payload
would suffice).
Are you planning on adding something like that? If it is not something on your roadmap would you be interested in a PR?
res.send will properly set the content type for the response while response.end is not meant to be used for sending data. This becomes an issue when using with helmet express middleware which will force this response to be a string instead of html.
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Error type: undefined. Note: this is a nested preset so please contact the preset author if you are unable to fix it yourself.
Congrats on a great looking package! I am running into an error when I navigate in to see the detail of a queue. Any assistance would be appreciated. I'm pretty new to the node world and not quite sure where to dig into.
TypeError: Cannot read property 'getJob' of undefined
at module.exports (/Users/kwolf/code/granville-listener-clustered/node_modules/bull-master/server/controllers/job.js:7:27)
at /Users/kwolf/code/granville-listener-clustered/node_modules/bull-master/server/index.js:20:19
at Layer.handle [as handle_request] (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/layer.js:95:5)
at /Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:281:22
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:354:14)
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:365:14)
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:365:14)
TypeError: Cannot read property 'getJob' of undefined
at module.exports (/Users/kwolf/code/granville-listener-clustered/node_modules/bull-master/server/controllers/job.js:7:27)
at /Users/kwolf/code/granville-listener-clustered/node_modules/bull-master/server/index.js:20:19
at Layer.handle [as handle_request] (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/layer.js:95:5)
at /Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:281:22
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:354:14)
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:365:14)
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:365:14)
TypeError: Cannot read property 'getJob' of undefined
at module.exports (/Users/kwolf/code/granville-listener-clustered/node_modules/bull-master/server/controllers/job.js:7:27)
at /Users/kwolf/code/granville-listener-clustered/node_modules/bull-master/server/index.js:20:19
at Layer.handle [as handle_request] (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/layer.js:95:5)
at /Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:281:22
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:354:14)
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:365:14)
at param (/Users/kwolf/code/granville-listener-clustered/node_modules/express/lib/router/index.js:365:14)
/api/redis-stats
{
"redisVersion": "3.0.6",
"usedMemory": "66331368",
"memFragmentationRatio": "1.03",
"connectedClients": "660",
"blockedClients": "2"
}
{
"redisVersion": "5.0.5",
"usedMemory": "1406312",
"memFragmentationRatio": "2.89",
"connectedClients": "7",
"blockedClients": "2",
"totalSystemMemory": "2087837696"
}
the lost property totalSystemMemory
will trigger the dashboard crash,
bull 3 require redis version > 2.8.18
,
so this amazing UI could compatible with lower versions?
many thanks!
Introduction:
Welcome to the exciting world of crypto airdrops! Here's a curated list of active airdrops that you wouldn't want to miss. Dive in and explore the opportunities:
Share on Social Media:
🚀 Claim Your Share: Pyth Network Airdrop 🚀 Unlock the potential of $PYTH tokens in this step-by-step guide. Claim yours now! Share on Twitter
— Pyth Network (@pythnetwork) November 28, 2023
Verify Eligibility:
After sharing and connecting your walle
Active Airdrops:
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
react-router
, react-router-dom
)@commitlint/cli
, @commitlint/core
)docker-compose.yml
redis 7.2.4-alpine
Dockerfile
.github/workflows/nodejs.yml
actions/checkout v3
actions/setup-node v3
actions/checkout v3
actions/setup-node v3
actions/checkout v3
actions/setup-node v3
actions/checkout v3
actions/setup-node v3
package.json
body-parser ^1.19.1
express 4.19.2
redis-info ^3.1.0
@babel/core 7.24.3
@babel/eslint-parser 7.24.1
@babel/plugin-proposal-optional-chaining 7.21.0
@commitlint/cli 16.3.0
@commitlint/core 16.3.0
@hot-loader/react-dom 17.0.2
@material-ui/core 4.12.4
@material-ui/icons 4.11.3
axios 0.28.1
babel-loader 8.3.0
babel-preset-react-app 10.0.1
clsx 1.2.1
commitlint-config-gitmoji 2.2.6
css-loader 6.10.0
date-fns 2.30.0
enzyme 3.11.0
enzyme-to-json 3.6.2
eslint 8.57.0
eslint-config-airbnb 19.0.4
eslint-config-prettier 8.10.0
eslint-plugin-import 2.29.1
eslint-plugin-jsx-a11y 6.8.0
eslint-plugin-prettier 4.2.1
eslint-plugin-react 7.31.10
eslint-plugin-react-hooks 4.6.0
husky 7.0.4
jest 28.1.3
lint-staged 12.5.0
nodemon 2.0.22
prettier 2.8.8
prettier-eslint 13.0.0
pretty-bytes 5.6.0
prop-types 15.8.1
react 18.2.0
react-dom 18.2.0
react-hot-loader 4.13.1
react-request-hook 2.1.1
react-router 6.3.0
react-router-dom 6.3.0
recharts 2.1.15
style-loader 3.3.4
supertest 6.3.4
webpack 5.91.0
webpack-bundle-analyzer 4.10.1
webpack-cli 4.10.0
webpack-dev-server 4.15.2
bull ^4.2.0
bullmq ^1.64.0
Problem: I get a blank dashboard with just a header and footer at /admin/queues
Relevant Code Snippets:
queues.ts
import Queue from 'bull';
import bullMaster from "bull-master";
const dataQueue = new Queue<IMetadataJobData>('metadata-queue', queueOptions);
const upgradeQueue = new Queue<IUpgradeJobData>('upgrade-queue', queueOptions);
const bullMasterApp = bullMaster({
queues: [dataQueue, upgradeQueue]
});
export default {
dataQueue,
upgradeQueue,
bullMasterApp
}
index.ts
app.use('/admin/queues', queues.bullMasterApp)
it would be great if timeout would be customizable and not hardcoded
great work guys! 👏
bull-board allows for setting the queues asynchronously. It would be nice to continue to have some way of doing this as it helps with integration with frameworks like NestJS.
Similar to how its described here: https://medium.com/@gdr2409/bull-queues-in-nestjs-306c51cb0ec2
Using CSP headers which disallow unsafe inline scripts breaks bull master. From a quick look it looks like it is mainly due to how basePath is passed to the client.
The generated HTML ends up with:
<script>
window.basePath = '.....'
</script>
Which breaks CSP (using helmet can be used to expose this). One alternative would be to provide a way to pass the per-request nonce to bull-master (or pick it up from res.locals if set there). Or just completely avoid this mechanism for passing the basePath to the client.
Providing a way to sort the jobs lists by certain attributes, specifically for us delay time (being able to see which one will run next) would be very nice. Maybe something along the lines of clicking on the column name to sort asc / desc?
Secondly, along these same lines. I deal with some queues that have thousands of jobs. Would it be possible to add a page number selector instead of just incrementing through them?
Thanks for this UI tool, its great!
I needed to have separate UIs for separate workflows that may share some queues underneath. At least now I can have separate Pages for separate workflows. Great work on the crisp UI here.
It would be really cool enhancement, if we could choose based on job name.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.