| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- const logger = require('@overleaf/logger')
- const Settings = require('@overleaf/settings')
- const { IncomingWebhook } = require('@slack/webhook')
- const moment = require('moment')
- const SplitTestUtils = require('./SplitTestUtils')
- async function sendNotification(splitTest, action, user) {
- const lastVersion = SplitTestUtils.getCurrentVersion(splitTest)
- const url = lastVersion.analyticsEnabled
- ? Settings.splitTest.notification.splitTestSlackWebhookUrl
- : Settings.splitTest.notification.gradualRolloutSlackWebhookUrl
- if (!url) {
- logger.info('Skipping slack notification as webhook URL is not configured')
- return
- }
- const webhook = new IncomingWebhook(url)
- const defaultRolloutPercent =
- 100 -
- lastVersion.variants.reduce(
- (total, variant) => total + variant.rolloutPercent,
- 0
- )
- const variantsConfig = [
- `- default: ${defaultRolloutPercent}%`,
- ...lastVersion.variants.map(
- variant => `- ${variant.name}: ${variant.rolloutPercent}%`
- ),
- ].join('\n')
- const date = splitTest.archived ? splitTest.archivedAt : lastVersion.createdAt
- const comment =
- action !== 'archived' && lastVersion.comment
- ? `with comment: ${lastVersion.comment}`
- : ''
- const payload = {
- name: splitTest.name,
- action,
- phase: lastVersion.phase,
- description: splitTest.description,
- ticketURL: splitTest.ticketUrl,
- variantsConfig,
- active: lastVersion.active.toString(),
- author: user.email,
- date: moment(date).utc().format('Do MMM YYYY, h:mm a') + ' UTC',
- comment,
- versionNumber: `${lastVersion.versionNumber}`,
- url: `${Settings.siteUrl}/admin/split-test/edit/${splitTest.name}`,
- }
- try {
- const { send: sendPayload } = webhook // workaround for the lint_flag_res_send_usage rule false-positive
- await sendPayload.call(webhook, payload)
- } catch (err) {
- logger.error(
- { err },
- 'Failed to notify split test notifications Slack webhook'
- )
- }
- }
- module.exports = {
- sendNotification,
- }
|