1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-01 00:08:27 +01:00
unleash.unleash/docs/guides/custom-acitvation-strategy.md
2018-11-23 12:34:48 +01:00

3.0 KiB

id title
custom_activation_strategy Custom Activation Strategy

Even though Unleash comes with a few powerful activation strategies there might be scenarios where you would like to extend Unleash with your own custom strategies.

Example: TimeStamp Strategy

In this example we want to define an activation strategy offers a scheduled release of a feature toggle. This means that we want the feature toggle to be activated after a given date and time.

Define custom strategy

First we need to "define" our new strategy. To add a new "Strategy", open the Strategies tab from the sidebar.

timestamp_create_strategy

We name our strategy TimeStamp and add one required parameter of type string, which we call enableAfter.

Use custom strategy

After we have created the strategy definition, we can now decide to use that activation strategy for our feature toggle.

timestamp_use_strategy

In the example we want to use our custom strategy for the feature toggle named demo.TimeStampRollout.

Client implementation

All official client SDK's for Unleash provides abstractions for you to implement support for custom strategies.

Before you have provided support for the custom strategy; the client will return false, because it does not understand the activation strategy.

In Node.js the implementation for the TimeStampStrategy would be:

const moment = require('moment');

class TimeStampStrategy extends Strategy {
  constructor() {
    super('TimeStamp');
  }

  isEnabled(parameters, context) {
    const enableAfterTimeStamp = moment(parameters.enableAfter);
    return moment().isAfter(enableAfterTimeStamp);
  }
}

In the example implementation we make use of the library called moment to parse the timestamp and verify that current time is after the specified enabledAfter parameter.

All parameter injected to the strategy are handled as string objects. This means that the strategies needs to parse it to a more suitable format. In this example we make use of the moment library. This library makes it also very convenient to check if we have passed the date/time specified via the enabledAfter parameter.

We also have to remember to register the custom strategy when initializing the Unleash client. Full working code example:

const moment = require('moment');
const { Strategy, initialize, isEnabled } = require('unleash-client');

class TimeStampStrategy extends Strategy {
  constructor() {
    super('TimeStamp');
  }

  isEnabled(parameters, context) {
    const enableAfterTimeStamp = moment(parameters.enableAfter);
    return moment().isAfter(enableAfterTimeStamp);
  }
}

const instance = initialize({
  url: 'http://unleash.herokuapp.com/api/',
  appName: 'unleash-demo',
  instanceId: '1',
  strategies: [new TimeStampStrategy()],
});

instance.on('ready', () => {
  setInterval(() => {
    console.log(isEnabled('demo.TimeStampRollout'));
  }, 1000);
});