From d41daf716cec6ffc0b30df218360142ace9ba8db Mon Sep 17 00:00:00 2001 From: Ran Magen Date: Thu, 20 Jun 2019 09:48:25 -0700 Subject: [PATCH] Chore: Add guide for how to use eventHook to send updates to Slack (#459) * Add guide for how to use eventHook to send updates to Slack * better slack url * use require instead of import --- docs/getting-started.md | 2 +- docs/guides/feautre-updates-to-slack.md | 76 +++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 docs/guides/feautre-updates-to-slack.md diff --git a/docs/getting-started.md b/docs/getting-started.md index 6eb8c7bddb..c7283490ed 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -59,7 +59,7 @@ Available unleash options include: - `custom` - use this when you implement your own custom authentication logic. - **ui** (object) - Set of UI specific overrides. You may set the following keys: `headerBackground`, `environment`, `slogan`. - **getLogger** (function) - Used to register a [custom log provider](#How do I configure the log output). -- **eventHook** (`function(event, data)`) - If provided, this function will be invoked whenever a feature is mutated. The possible values for `event` are `'feature-created'`, `'feature-updated'`, `'feature-archived'`, `'feature-revived'`. The `data` argument contains information about the mutation. Its fields are `type` (string) - the event type (same as `event`); `createdBy` (string) - the user who performed the mutation; `data` - the contents of the change. The contents in `data` differs based on the event type; For `'feature-archived'` and `'feature-revived'`, the only field will be `name` - the name of the feature. For `'feature-created'` and `'feature-updated'` the data follows a schema defined in the code [here](https://github.com/Unleash/unleash/blob/master/lib/routes/admin-api/feature-schema.js#L38-L59). +- **eventHook** (`function(event, data)`) - If provided, this function will be invoked whenever a feature is mutated. The possible values for `event` are `'feature-created'`, `'feature-updated'`, `'feature-archived'`, `'feature-revived'`. The `data` argument contains information about the mutation. Its fields are `type` (string) - the event type (same as `event`); `createdBy` (string) - the user who performed the mutation; `data` - the contents of the change. The contents in `data` differs based on the event type; For `'feature-archived'` and `'feature-revived'`, the only field will be `name` - the name of the feature. For `'feature-created'` and `'feature-updated'` the data follows a schema defined in the code [here](https://github.com/Unleash/unleash/blob/master/lib/routes/admin-api/feature-schema.js#L38-L59). See an example [here](./guides/feautre-updates-to-slack.md). ### 3. Docker diff --git a/docs/guides/feautre-updates-to-slack.md b/docs/guides/feautre-updates-to-slack.md new file mode 100644 index 0000000000..582304cda6 --- /dev/null +++ b/docs/guides/feautre-updates-to-slack.md @@ -0,0 +1,76 @@ +# Add Slack hook to Unleash + +## Create a custom Slack WebHook url: + +1. Go to [https://slack.com/apps/manage/custom-integrations](https://slack.com/apps/manage/custom-integrations) +1. Click Incoming WebHooks +1. Click “Add Configuration” +1. This is Slack's help page on how to do this: https://api.slack.com/custom-integrations/incoming-webhooks + - Choose a channel, follow the wizard, get the custom URL. + +## Send data to Slack using an event hook function + +Using the `eventHook` option, create a function that will send the data you'd like into Slack when mutation events happen. + +```javascript +const unleash = require('unleash-server'); +const axios = require('axios'); + +function onEventHook(event, eventData) { + const { createdBy: user, data } = eventData; + let text = ''; + + const unleashUrl = 'http://your.unleash.host.com'; + const feature = `<${unleashUrl}/#/features/strategies/${data.name}|${ + data.name + }>`; + + switch (event) { + case 'feature-created': + case 'feature-updated': { + const verb = + event === 'feature-created' ? 'created a new' : 'updated the'; + text = `${user} ${verb} feature ${feature}\ndescription: ${ + data.description + }\nenabled: ${data.enabled}\nstrategies: \`${JSON.stringify( + data.strategies, + )}\``; + break; + } + case 'feature-archived': + case 'feature-revived': { + const verb = event === 'feature-archived' ? 'archived' : 'revived'; + text = `${user} ${verb} the feature ${feature}`; + break; + } + default: { + console.error(`Unknown event ${event}`); + return; + } + } + + axios + .post( + 'https://hooks.slack.com/services/THIS_IS_WHERE_THE_CUSTOM_URL_GOES', + { + username: 'Unleash', + icon_emoji: ':unleash:', // if you added a custom emoji, otherwise you can remove this field. + text: text, + }, + ) + .then(res => { + console.log(`Slack post statusCode: ${res.status}. Text: ${text}`); + }) + .catch(error => { + console.error(error); + }); +} + +const options = { + eventHook: onEventHook, +}; + +unleash.start(options).then(server => { + console.log(`Unleash started on http://localhost:${server.app.get('port')}`); +}); +```