mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-13 13:48:59 +02:00
feat: info-log webhooks domain part of url
This commit is contained in:
parent
341703978a
commit
1d0dfaacc1
@ -1,5 +1,5 @@
|
|||||||
import { ValidationError } from 'joi';
|
import { ValidationError } from 'joi';
|
||||||
|
import type { Logger } from '../../lib/logger';
|
||||||
import getLogger from '../../test/fixtures/no-logger';
|
import getLogger from '../../test/fixtures/no-logger';
|
||||||
import TagTypeService from '../features/tag-type/tag-type-service';
|
import TagTypeService from '../features/tag-type/tag-type-service';
|
||||||
import {
|
import {
|
||||||
@ -55,6 +55,7 @@ function getSetup() {
|
|||||||
getLogger,
|
getLogger,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
server: { unleashUrl: 'http://test' },
|
server: { unleashUrl: 'http://test' },
|
||||||
|
flagResolver: {} as IFlagResolver,
|
||||||
},
|
},
|
||||||
tagTypeService,
|
tagTypeService,
|
||||||
eventService,
|
eventService,
|
||||||
@ -67,6 +68,38 @@ function getSetup() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSetupWithLogger(logProvider: () => Logger) {
|
||||||
|
const stores = createStores();
|
||||||
|
const eventService = createFakeEventsService(config);
|
||||||
|
const tagTypeService = new TagTypeService(
|
||||||
|
stores,
|
||||||
|
{ getLogger: logProvider },
|
||||||
|
eventService,
|
||||||
|
);
|
||||||
|
const integrationEventsService = new IntegrationEventsService(stores, {
|
||||||
|
getLogger: logProvider,
|
||||||
|
flagResolver: {} as IFlagResolver,
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
addonService: new AddonService(
|
||||||
|
stores,
|
||||||
|
{
|
||||||
|
getLogger: logProvider,
|
||||||
|
// @ts-ignore
|
||||||
|
server: { unleashUrl: 'http://test' },
|
||||||
|
flagResolver: {} as IFlagResolver,
|
||||||
|
},
|
||||||
|
tagTypeService,
|
||||||
|
eventService,
|
||||||
|
integrationEventsService,
|
||||||
|
),
|
||||||
|
eventService,
|
||||||
|
stores,
|
||||||
|
tagTypeService,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
test('should load addon configurations', async () => {
|
test('should load addon configurations', async () => {
|
||||||
const { addonService } = getSetup();
|
const { addonService } = getSetup();
|
||||||
|
|
||||||
@ -814,3 +847,116 @@ test('Should reject addon config if a required parameter is just the empty strin
|
|||||||
addonService.createAddon(config, TEST_AUDIT_USER),
|
addonService.createAddon(config, TEST_AUDIT_USER),
|
||||||
).rejects.toThrow(ValidationError);
|
).rejects.toThrow(ValidationError);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should log resolved domain', async () => {
|
||||||
|
const loggerMock = {
|
||||||
|
debug: jest.fn(),
|
||||||
|
info: jest.fn(),
|
||||||
|
warn: jest.fn(),
|
||||||
|
error: jest.fn(),
|
||||||
|
fatal: jest.fn(),
|
||||||
|
};
|
||||||
|
const getLogger = jest.fn(() => loggerMock);
|
||||||
|
const { addonService } = getSetupWithLogger(getLogger);
|
||||||
|
|
||||||
|
const config: IAddonDto = {
|
||||||
|
provider: 'webhook',
|
||||||
|
description: '',
|
||||||
|
enabled: true,
|
||||||
|
parameters: {
|
||||||
|
url: 'http://localhost/wh',
|
||||||
|
var: 'some-value',
|
||||||
|
},
|
||||||
|
events: [FEATURE_CREATED],
|
||||||
|
};
|
||||||
|
await addonService.createAddon(config, TEST_AUDIT_USER);
|
||||||
|
expect(getLogger).toHaveBeenCalled();
|
||||||
|
expect(loggerMock.info).toHaveBeenCalledWith(`Webhook created`, {
|
||||||
|
domain: 'localhost',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should log resolved domain with last slash missing', async () => {
|
||||||
|
const loggerMock = {
|
||||||
|
debug: jest.fn(),
|
||||||
|
info: jest.fn(),
|
||||||
|
warn: jest.fn(),
|
||||||
|
error: jest.fn(),
|
||||||
|
fatal: jest.fn(),
|
||||||
|
};
|
||||||
|
const getLogger = jest.fn(() => loggerMock);
|
||||||
|
const { addonService } = getSetupWithLogger(getLogger);
|
||||||
|
|
||||||
|
const config: IAddonDto = {
|
||||||
|
provider: 'webhook',
|
||||||
|
description: '',
|
||||||
|
enabled: true,
|
||||||
|
parameters: {
|
||||||
|
url: 'http://localhost',
|
||||||
|
var: 'some-value',
|
||||||
|
},
|
||||||
|
events: [FEATURE_CREATED],
|
||||||
|
};
|
||||||
|
await addonService.createAddon(config, TEST_AUDIT_USER);
|
||||||
|
expect(getLogger).toHaveBeenCalled();
|
||||||
|
expect(loggerMock.info).toHaveBeenCalledWith(`Webhook created`, {
|
||||||
|
domain: 'localhost',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('will log with port if specified', async () => {
|
||||||
|
const loggerMock = {
|
||||||
|
debug: jest.fn(),
|
||||||
|
info: jest.fn(),
|
||||||
|
warn: jest.fn(),
|
||||||
|
error: jest.fn(),
|
||||||
|
fatal: jest.fn(),
|
||||||
|
};
|
||||||
|
const getLogger = jest.fn(() => loggerMock);
|
||||||
|
const { addonService } = getSetupWithLogger(getLogger);
|
||||||
|
|
||||||
|
const config: IAddonDto = {
|
||||||
|
provider: 'webhook',
|
||||||
|
description: '',
|
||||||
|
enabled: true,
|
||||||
|
parameters: {
|
||||||
|
url: 'http://localhost:8080',
|
||||||
|
var: 'some-value',
|
||||||
|
},
|
||||||
|
events: [FEATURE_CREATED],
|
||||||
|
};
|
||||||
|
await addonService.createAddon(config, TEST_AUDIT_USER);
|
||||||
|
expect(getLogger).toHaveBeenCalled();
|
||||||
|
expect(loggerMock.info).toHaveBeenCalledWith(`Webhook created`, {
|
||||||
|
domain: 'localhost:8080',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not log if protocol missing', async () => {
|
||||||
|
const loggerMock = {
|
||||||
|
debug: jest.fn(),
|
||||||
|
info: jest.fn(),
|
||||||
|
warn: jest.fn(),
|
||||||
|
error: jest.fn(),
|
||||||
|
fatal: jest.fn(),
|
||||||
|
};
|
||||||
|
const getLogger = jest.fn(() => loggerMock);
|
||||||
|
const { addonService } = getSetupWithLogger(getLogger);
|
||||||
|
|
||||||
|
const config: IAddonDto = {
|
||||||
|
provider: 'webhook',
|
||||||
|
description: '',
|
||||||
|
enabled: true,
|
||||||
|
parameters: {
|
||||||
|
url: '://localhost/wh',
|
||||||
|
var: 'some-value',
|
||||||
|
},
|
||||||
|
events: [FEATURE_CREATED],
|
||||||
|
};
|
||||||
|
await addonService.createAddon(config, TEST_AUDIT_USER);
|
||||||
|
expect(getLogger).toHaveBeenCalled();
|
||||||
|
expect(loggerMock.info).toHaveBeenCalledTimes(1);
|
||||||
|
expect(loggerMock.info).not.toHaveBeenCalledWith(`Webhook created`, {
|
||||||
|
domain: 'localhost',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -225,6 +225,22 @@ export default class AddonService {
|
|||||||
`User ${auditUser.username} created addon ${addonConfig.provider}`,
|
`User ${auditUser.username} created addon ${addonConfig.provider}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
addonConfig.provider === 'webhook' &&
|
||||||
|
addonConfig.parameters.url &&
|
||||||
|
addonConfig.parameters.url.indexOf('://') > 0
|
||||||
|
) {
|
||||||
|
const start = addonConfig.parameters.url.indexOf('://') + 3;
|
||||||
|
let end = addonConfig.parameters.url.indexOf('/', start);
|
||||||
|
if (end === -1) {
|
||||||
|
end = addonConfig.parameters.url.length;
|
||||||
|
}
|
||||||
|
const domain = addonConfig.parameters.url.substring(start, end);
|
||||||
|
this.logger.info(`Webhook created`, {
|
||||||
|
domain,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await this.eventService.storeEvent(
|
await this.eventService.storeEvent(
|
||||||
new AddonConfigCreatedEvent({
|
new AddonConfigCreatedEvent({
|
||||||
data: omitKeys(createdAddon, 'parameters'),
|
data: omitKeys(createdAddon, 'parameters'),
|
||||||
@ -259,6 +275,23 @@ export default class AddonService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
const result = await this.addonStore.update(id, addonConfig);
|
const result = await this.addonStore.update(id, addonConfig);
|
||||||
|
|
||||||
|
if (
|
||||||
|
addonConfig.provider === 'webhook' &&
|
||||||
|
addonConfig.parameters.url &&
|
||||||
|
addonConfig.parameters.url.indexOf('://') > 0
|
||||||
|
) {
|
||||||
|
const start = addonConfig.parameters.url.indexOf('://') + 3;
|
||||||
|
let end = addonConfig.parameters.url.indexOf('/', start);
|
||||||
|
if (end === -1) {
|
||||||
|
end = addonConfig.parameters.url.length;
|
||||||
|
}
|
||||||
|
const domain = addonConfig.parameters.url.substring(start, end);
|
||||||
|
this.logger.info(`Webhook updated`, {
|
||||||
|
domain,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await this.eventService.storeEvent(
|
await this.eventService.storeEvent(
|
||||||
new AddonConfigUpdatedEvent({
|
new AddonConfigUpdatedEvent({
|
||||||
preData: omitKeys(existingConfig, 'parameters'),
|
preData: omitKeys(existingConfig, 'parameters'),
|
||||||
|
Loading…
Reference in New Issue
Block a user