0.1.5 • Published 4 years ago

@zrpaplicacoes/maintenance_mode v0.1.5

Weekly downloads
67
License
MIT
Repository
gitlab
Last release
4 years ago

Maintenance Mode

Express.js middleware for switching the API to maintenance mode.

Description

Support modes of work:

  • configuration-based (based on environment variables)
  • hot-switch mode (no redeployment, based on HTTP POST/DELETE)

In configuration-based mode, you should provide the mode signaling the application on maintenance mode and restart the application:

var options = {
  mode: true
};
maintenance(app, options);

Endpoint (HOT-SWITCH)

Hot-switch is could more convenient since doesn't require re-start. And could be controlled by HTTP:

# Maintenance Mode ON
HTTP POST https://api/maintenance/on

# Maintenance Mode OFF
HTTP POST https://api/maintenance/off

# Maintenance Mode OFF
HTTP DELETE https://api/maintenance

# Maintenance Mode Status (public)
HTTP GET https://api/maintenance/status

The access key is send in Request Headers with maintenance-private-key

Example:

curl --location --request POST 'https://api/maintenance/on' \
--header 'maintenance-private-key: ABC123'

curl --location --request DELETE 'https://api/maintenance' \
--header 'maintenance-private-key: ABC123'

curl --location --request GET 'https://api/maintenance/status'

Status Response

{
    "mode": false,
    "retryAfter": "30",
    "current": true
}

Usage

Install maintenance_mode from npm,

$ npm install @zrpaplicacoes/maintenance_mode

Update your application,

const app = express();
const maintenance = require('@zrpaplicacoes/maintenance_mode');
const options = {};

app.use(maintenance(app, options));

app.get('/', function (req, res) {
	console.log(req.url);
	res.send(200);
});

Specifying the initial mode,

// starts the app in maintenance mode
const options = { mode: true };

Specifying the adapter Redis (Memory is default),

// starts with another adapter, 
const RedisAdapter = require('@zrpaplicacoes/maintenance_mode/lib/RedisAdapter');
const options = {
  adapter: new RedisAdapter({
    prefix: 'anything_',
    url: 'redis://127.0.0.1:6379/0',
  }),
};

Options

Instead of initial you can customize maintenance_mode with options object,

const options = {
    mode: false,
    endpoint: false,
    url: '/maintenance',
    accessKey: 'CHANGE_ME',
    status: 503,
    message: 'sorry, we are on maintenance',
    checkpoint: '/status',
    retryAfter: 30,
    adapter: new <MemoryAdapter|RedisAdapter>()
};

maintenance(app, options);

Attributes

OptionTypeDefault ValueDescription
modeBooleanfalseInitial maintenance mode on deploy/redeployment
endpointBooleanfalseActive Endpoint to Hot-Switch
urlString'/maintenance'Endpoint to responde if endpoint is actived
accessKeyString'CHANGE_ME'Access key for switch maintenance mode (depend endpoint is actived)
statusInteger503HTTP Status Code
messageString'sorry, we are on maintenance'Message Human-like
checkpointString/statusEndpoint to check if maintenance mode is off
retryAfterInteger30Waiting time to next request in seconds
adapterAdapter30Waiting time to next request in seconds

Adapters

prefix allow separate maintenance_mode to module, environment, ecc.

MemoryAdapter

new MemoryAdapter({
  prefix: ''
});

RedisAdapter

new RedisAdapter({
  prefix: '',
  url: 'redis://redis:6379/0'
});

Licence (MIT)

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.0

4 years ago

0.1.1

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.6

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago