Skip to content
This repository has been archived by the owner on Feb 1, 2023. It is now read-only.
/ ah-resque-ui Public archive

Visualization and Managment tools for Actionhero Tasks & Resque Jobs

License

Notifications You must be signed in to change notification settings

actionhero/ah-resque-ui

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date
Apr 1, 2021
Oct 19, 2020
Apr 6, 2020
Aug 21, 2019
Mar 2, 2020
Apr 6, 2020
Aug 1, 2021
Mar 2, 2020
Jan 1, 2021
Mar 2, 2020
Mar 2, 2020
Aug 22, 2019
Aug 1, 2021
Jun 1, 2021
Jul 4, 2016
Aug 26, 2020
Sep 1, 2021
Aug 1, 2021
Mar 2, 2020
Mar 2, 2020

Repository files navigation

AH-RESQUE-UI

A resque administration website for actionhero

Build Status NPM Version

https://raw.githubusercontent.com/evantahler/ah-resque-ui/master/images/overview.png https://raw.githubusercontent.com/evantahler/ah-resque-ui/master/images/workers.png https://raw.githubusercontent.com/evantahler/ah-resque-ui/master/images/failed.png https://raw.githubusercontent.com/evantahler/ah-resque-ui/master/images/delayed.png

Setup for ActionHero v20+

  1. install
npm install --save ah-resque-ui
  1. Add this plugin to your ./config/plugins.ts
export const DEFAULT = {
  plugins: (config) => {
    return {
      "ah-resque-ui": { path: __dirname + "/../../node_modules/ah-resque-ui" },
    };
  },
};
  1. Create a new config file, ./src/config/ah-resque-ui.ts
export const DEFAULT = {
  "ah-resque-ui": (config) => {
    return {
      // the name of the middleware(s) which will protect all actions in this plugin
      // ie middleware: ['basic-auth', 'role-admin']
      middleware: null,
    };
  },
};
  1. visit http://localhost:8080/resque

Routes

This plugin will inject routes into your application. The routes are equivalent to:

get: [
  { path: '/resque/packageDetails',       action: 'resque:packageDetails'    },
  { path: '/resque/redisInfo',            action: 'resque:redisInfo'         },
  { path: '/resque/resqueDetails',        action: 'resque:resqueDetails'     },
  { path: '/resque/queued',               action: 'resque:queued'            },
  { path: '/resque/loadWorkerQueues',     action: 'resque:loadWorkerQueues'  },
  { path: '/resque/resqueFailedCount',    action: 'resque:resqueFailedCount' },
  { path: '/resque/resqueFailed',         action: 'resque:resqueFailed'      },
  { path: '/resque/delayedjobs',          action: 'resque:delayedjobs'       },
],

post: [
  { path: '/resque/removeFailed',            action: 'resque:removeFailed'            },
  { path: '/resque/retryAndRemoveFailed',    action: 'resque:retryAndRemoveFailed'    },
  { path: '/resque/removeAllFailed',         action: 'resque:removeAllFailed'         },
  { path: '/resque/retryAndRemoveAllFailed', action: 'resque:retryAndRemoveAllFailed' },
  { path: '/resque/forceCleanWorker',        action: 'resque:forceCleanWorker'        },
  { path: '/resque/delQueue',                action: 'resque:delQueue'                },
  { path: '/resque/delDelayed',              action: 'resque:delDelayed'              },
  { path: '/resque/runDelayed',              action: 'resque:runDelayed'              },
]

};

Authentication Via Middleware

This package exposes some potentially dangerous actions which would allow folks to see user data (if you keep such in your task params), and modify your task queues. To protect these actions, you should configure this package to use action middleware which would restrict these actions to only certain clients.

The most basic middleware would be one to enforce a Basic Auth Password:

npm install basic-auth --save

// File: src/initializers/basic-auth-middleware.js
import { Initializer, api, action } from "actionhero";
import auth from "basic-auth";

export class BasicAuthInitializer extends Initializer {
  constructor() {
    super();
    this.name = "basic-auth";
  }

  async initialize() {
    const correctPassword = process.env.BASIC_AUTH_PASSWORD;
    const middleware = {
      name: "basic-auth",
      global: false,
      priority: 1000,
      preProcessor: (data) => {
        if (!correctPassword) {
          throw "basic auth password not set up in BASIC_AUTH_PASSWORD env";
        }
        const { res, req } = connection.rawConnection;
        const credentials = auth(req);
        if (!credentials || credentials.pass !== correctPassword) {
          res.statusCode = 401;
          res.setHeader("WWW-Authenticate", 'Basic realm="Admin Access"');
          res.end("Access denied");
          data.toRender = false;
        }
      },
    };

    action.addMiddleware(middleware);
  }
}

Now you can apply the basic-auth middleware to your actions to protect them.

To inform ah-resque-ui to use a middleware determined elsewhere like this, set api.config.ah-resque-ui.middleware = ['basic-auth'] in the provided configuration file.

Testing & Developing

You will need 2 terminals:

  • Start the actionhero server
    • npm run dev
  • In another shell, run the webpack to regenerate your changes
    • npm run ui:watch

Now visit http://localhost:8080/resque in your browser

Thanks