Skip to content

Commit 017aafc

Browse files
committed
fix: feedback Pierre
1 parent 862fe63 commit 017aafc

15 files changed

+208
-199
lines changed

src/clients/cc-api/commands/log-drain/create-log-drain-command.js

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @import { CreateLogDrainCommandInput, CreateLogDrainCommandOutput } from './create-log-drain-command.types.js';
3-
* @import { LogDrainTarget } from './log-drain.types.js';
3+
* @import { LogDrainTarget, LogDrainKind } from './log-drain.types.js';
44
*/
55
import { post } from '../../../../lib/request/request-params-builder.js';
66
import { safeUrl } from '../../../../lib/utils.js';
@@ -11,7 +11,7 @@ import { waitForLogDrainEnabled } from './log-drain-utils.js';
1111
*
1212
* @extends {CcApiCompositeCommand<CreateLogDrainCommandInput, CreateLogDrainCommandOutput>}
1313
* @endpoint [POST] /v4/drains/organisations/:XXX/applications/:XXX/drains
14-
* @endpoint [GET] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX (polling)
14+
* @endpoint [GET] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX
1515
* @group LogDrain
1616
* @version 4
1717
*/
@@ -53,62 +53,45 @@ class CreateLogDrainInnerCommand extends CcApiSimpleCommand {
5353

5454
/**
5555
* @param {LogDrainTarget} drain
56-
* @param {string} kind - The kind of logs to drain ('LOG', 'ACCESSLOG', or 'AUDITLOG')
56+
* @param {LogDrainKind} kind
5757
*/
5858
#getBody(drain, kind) {
5959
/** @type {any} */
6060
const body = {
6161
kind,
6262
recipient: {
63-
type: this.#mapDrainType(drain.type),
63+
type: drain.type,
6464
url: drain.url,
6565
},
6666
};
6767

68-
// HTTP and ElasticSearch: credentials
69-
if (drain.type === 'HTTP' || drain.type === 'ElasticSearch') {
68+
// RAW_HTTP and ELASTICSEARCH: credentials
69+
if (drain.type === 'RAW_HTTP' || drain.type === 'ELASTICSEARCH') {
7070
if (drain.credentials != null) {
7171
body.recipient.username = drain.credentials.username;
7272
body.recipient.password = drain.credentials.password;
7373
}
7474
}
7575

76-
// ElasticSearch: index (renamed from indexPrefix)
77-
if (drain.type === 'ElasticSearch') {
76+
// ELASTICSEARCH: index (renamed from indexPrefix)
77+
if (drain.type === 'ELASTICSEARCH') {
7878
if (drain.indexPrefix != null) {
7979
body.recipient.index = drain.indexPrefix;
8080
}
8181
}
8282

83-
// NewRelic: apiKey
84-
if (drain.type === 'NewRelicHTTP') {
83+
// NEWRELIC: apiKey
84+
if (drain.type === 'NEWRELIC') {
8585
body.recipient.apiKey = drain.apiKey;
8686
}
8787

8888
// Syslog: RFC 5424 structured data parameters
89-
if (drain.type === 'TCPSyslog' || drain.type === 'UDPSyslog') {
89+
if (drain.type === 'SYSLOG_TCP' || drain.type === 'SYSLOG_UDP') {
9090
if (drain.structuredDataParameters != null) {
9191
body.recipient.rfc5424StructuredDataParameters = drain.structuredDataParameters;
9292
}
9393
}
9494

9595
return body;
9696
}
97-
98-
/**
99-
* Map client drain types to API codes
100-
* @param {LogDrainTarget['type']} clientType
101-
* @returns {string}
102-
*/
103-
#mapDrainType(clientType) {
104-
const mapping = {
105-
HTTP: 'RAW_HTTP',
106-
DatadogHTTP: 'DATADOG',
107-
NewRelicHTTP: 'NEWRELIC',
108-
TCPSyslog: 'SYSLOG_TCP',
109-
UDPSyslog: 'SYSLOG_UDP',
110-
ElasticSearch: 'ELASTICSEARCH',
111-
};
112-
return mapping[clientType] || clientType;
113-
}
11497
}

src/clients/cc-api/commands/log-drain/delete-log-drain-command.js

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,24 @@
33
*/
44
import { delete_ } from '../../../../lib/request/request-params-builder.js';
55
import { safeUrl } from '../../../../lib/utils.js';
6-
import { CcApiCompositeCommand, CcApiSimpleCommand } from '../../lib/cc-api-command.js';
7-
import { GetLogDrainCommand } from './get-log-drain-command.js';
6+
import { CcApiSimpleCommand } from '../../lib/cc-api-command.js';
87

98
/**
109
*
11-
* @extends {CcApiCompositeCommand<DeleteLogDrainCommandInput, DeleteLogDrainCommandOutput>}
12-
* @endpoint [GET] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX
10+
* @extends {CcApiSimpleCommand<DeleteLogDrainCommandInput, DeleteLogDrainCommandOutput>}
1311
* @endpoint [DELETE] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX
1412
* @group LogDrain
1513
* @version 4
1614
*/
17-
export class DeleteLogDrainCommand extends CcApiCompositeCommand {
18-
/** @type {CcApiCompositeCommand<DeleteLogDrainCommandInput, DeleteLogDrainCommandOutput>['compose']} */
19-
async compose(params, composer) {
20-
// Fetch the drain before deleting so we can return it
21-
const drain = await composer.send(new GetLogDrainCommand(params));
22-
23-
await composer.send(new DeleteLogDrainInnerCommand(params));
24-
25-
return drain;
26-
}
27-
}
28-
29-
/**
30-
*
31-
* @extends {CcApiSimpleCommand<DeleteLogDrainCommandInput, void>}
32-
* @endpoint [DELETE] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX
33-
* @group LogDrain
34-
* @version 4
35-
*/
36-
class DeleteLogDrainInnerCommand extends CcApiSimpleCommand {
37-
/** @type {CcApiSimpleCommand<DeleteLogDrainCommandInput, void>['toRequestParams']} */
15+
export class DeleteLogDrainCommand extends CcApiSimpleCommand {
16+
/** @type {CcApiSimpleCommand<DeleteLogDrainCommandInput, DeleteLogDrainCommandOutput>['toRequestParams']} */
3817
toRequestParams(params) {
3918
return delete_(
4019
safeUrl`/v4/drains/organisations/${params.ownerId}/applications/${params.applicationId}/drains/${params.drainId}`,
4120
);
4221
}
4322

44-
/** @type {CcApiSimpleCommand<DeleteLogDrainCommandInput, void>['transformCommandOutput']} */
23+
/** @type {CcApiSimpleCommand<DeleteLogDrainCommandInput, DeleteLogDrainCommandOutput>['transformCommandOutput']} */
4524
transformCommandOutput() {
4625
return null;
4726
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { ApplicationId } from '../../types/cc-api.types.js';
2-
import type { LogDrain } from './log-drain.types.js';
32

43
export type DeleteLogDrainCommandInput = ApplicationId & {
54
drainId: string;
65
};
76

8-
export type DeleteLogDrainCommandOutput = LogDrain;
7+
export type DeleteLogDrainCommandOutput = void;

src/clients/cc-api/commands/log-drain/disable-log-drain-command.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { waitForLogDrainDisabled } from './log-drain-utils.js';
1010
*
1111
* @extends {CcApiCompositeCommand<DisableLogDrainCommandInput, DisableLogDrainCommandOutput>}
1212
* @endpoint [PUT] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX/disable
13-
* @endpoint [GET] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX (polling)
13+
* @endpoint [GET] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX
1414
* @group LogDrain
1515
* @version 4
1616
*/

src/clients/cc-api/commands/log-drain/enable-log-drain-command.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { waitForLogDrainEnabled } from './log-drain-utils.js';
1010
*
1111
* @extends {CcApiCompositeCommand<EnableLogDrainCommandInput, EnableLogDrainCommandOutput>}
1212
* @endpoint [PUT] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX/enable
13-
* @endpoint [GET] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX (polling)
13+
* @endpoint [GET] /v4/drains/organisations/:XXX/applications/:XXX/drains/:XXX
1414
* @group LogDrain
1515
* @version 4
1616
*/

src/clients/cc-api/commands/log-drain/list-log-drain-command.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class ListLogDrainCommand extends CcApiSimpleCommand {
2828

2929
/** @type {CcApiSimpleCommand<ListLogDrainCommandInput, ListLogDrainCommandOutput>['transformCommandOutput']} */
3030
transformCommandOutput(response) {
31-
return sortBy(response.map(transformLogDrain), { key: 'createdAt', order: 'desc' });
31+
return sortBy(response.map(transformLogDrain), { key: 'updatedAt', order: 'desc' });
3232
}
3333

3434
/** @type {CcApiSimpleCommand<?, ?>['getEmptyResponsePolicy']} */
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { ApplicationId } from '../../types/cc-api.types.js';
2-
import type { LogDrain } from './log-drain.types.js';
2+
import type { LogDrain, LogDrainExecutionStatus, LogDrainStatus } from './log-drain.types.js';
33

44
export type ListLogDrainCommandInput = ApplicationId & {
5-
status?: string;
6-
executionStatus?: string;
7-
executionStatusNotIn?: string;
5+
status?: Array<LogDrainStatus>;
6+
executionStatus?: Array<LogDrainExecutionStatus>;
7+
executionStatusNotIn?: Array<LogDrainExecutionStatus>;
88
};
99

1010
export type ListLogDrainCommandOutput = Array<LogDrain>;

src/clients/cc-api/commands/log-drain/log-drain-transform.js

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,64 @@
11
/**
2-
* @import { LogDrain, LogDrainTarget } from './log-drain.types.js'
2+
* @import { LogDrain, LogDrainTarget, LogDrainStatus, LogDrainKind, LogDrainExecutionStatus, RawHttpDrainTarget, SyslogTcpDrainTarget, SyslogUdpDrainTarget, ElasticsearchDrainTarget } from './log-drain.types.js'
33
*/
44

55
import { normalizeDate } from '../../../../lib/utils.js';
66

77
/**
8-
* @param {any} payload
8+
* @typedef ApiLogDrainPayload
9+
* @property {string} id
10+
* @property {string} resourceId
11+
* @property {{date: string, status: LogDrainStatus, authorId?: string}} status
12+
* @property {LogDrainKind} [kind]
13+
* @property {ApiRecipientPayload} recipient
14+
* @property {{status: LogDrainExecutionStatus, lastError: string}} execution
15+
* @property {{msgRateOut: number, msgBacklog: number}} backlog
16+
*/
17+
18+
/**
19+
* @typedef ApiRecipientPayload
20+
* @property {'RAW_HTTP' | 'SYSLOG_TCP' | 'SYSLOG_UDP' | 'DATADOG' | 'ELASTICSEARCH' | 'NEWRELIC'} type
21+
* @property {string} url
22+
* @property {string} [username]
23+
* @property {string} [password]
24+
* @property {string} [apiKey]
25+
* @property {string} [index]
26+
* @property {string} [rfc5424StructuredDataParameters]
27+
*/
28+
29+
/**
30+
* Transform API v4 log drain payload to client format
31+
* @param {ApiLogDrainPayload} payload - API v4 drain response
932
* @returns {LogDrain}
1033
*/
1134
export function transformLogDrain(payload) {
1235
return {
1336
id: payload.id,
1437
applicationId: payload.resourceId,
15-
createdAt: normalizeDate(payload.status.date),
16-
lastEdit: normalizeDate(payload.status.date),
17-
state: payload.status.status,
38+
// status.date is the date when the drain's current status was set (changes when status changes)
39+
updatedAt: normalizeDate(payload.status.date),
40+
status: payload.status.status,
1841
updatedBy: payload.status.authorId,
1942
kind: payload.kind,
2043
target: transformLogDrainTarget(payload.recipient),
44+
execution: {
45+
...payload.execution,
46+
},
47+
backlog: payload.backlog,
2148
};
2249
}
2350

2451
/**
25-
* @param {any} payload
52+
* Transform API v4 recipient payload to client drain target format
53+
* @param {ApiRecipientPayload} payload - API v4 recipient object
2654
* @returns {LogDrainTarget}
2755
*/
2856
export function transformLogDrainTarget(payload) {
29-
// payload is the recipient object from the v4 API response
30-
const type = payload.type;
31-
32-
switch (type) {
57+
switch (payload.type) {
3358
case 'RAW_HTTP': {
34-
/** @type {any} */
59+
/** @type {RawHttpDrainTarget} */
3560
const target = {
36-
type: 'HTTP',
61+
type: 'RAW_HTTP',
3762
url: payload.url,
3863
};
3964
if (payload.username) {
@@ -45,9 +70,9 @@ export function transformLogDrainTarget(payload) {
4570
return target;
4671
}
4772
case 'SYSLOG_TCP': {
48-
/** @type {any} */
73+
/** @type {SyslogTcpDrainTarget} */
4974
const target = {
50-
type: 'TCPSyslog',
75+
type: 'SYSLOG_TCP',
5176
url: payload.url,
5277
};
5378
if (payload.rfc5424StructuredDataParameters) {
@@ -56,9 +81,9 @@ export function transformLogDrainTarget(payload) {
5681
return target;
5782
}
5883
case 'SYSLOG_UDP': {
59-
/** @type {any} */
84+
/** @type {SyslogUdpDrainTarget} */
6085
const target = {
61-
type: 'UDPSyslog',
86+
type: 'SYSLOG_UDP',
6287
url: payload.url,
6388
};
6489
if (payload.rfc5424StructuredDataParameters) {
@@ -68,13 +93,13 @@ export function transformLogDrainTarget(payload) {
6893
}
6994
case 'DATADOG':
7095
return {
71-
type: 'DatadogHTTP',
96+
type: 'DATADOG',
7297
url: payload.url,
7398
};
7499
case 'ELASTICSEARCH': {
75-
/** @type {any} */
100+
/** @type {ElasticsearchDrainTarget} */
76101
const target = {
77-
type: 'ElasticSearch',
102+
type: 'ELASTICSEARCH',
78103
url: payload.url,
79104
};
80105
if (payload.username) {
@@ -90,7 +115,7 @@ export function transformLogDrainTarget(payload) {
90115
}
91116
case 'NEWRELIC':
92117
return {
93-
type: 'NewRelicHTTP',
118+
type: 'NEWRELIC',
94119
url: payload.url,
95120
apiKey: payload.apiKey,
96121
};

src/clients/cc-api/commands/log-drain/log-drain-utils.js

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @import { LogDrain } from './log-drain.types.js'
3-
* @import { CcApiType, CcApiCommand } from '../../types/cc-api.types.js'
3+
* @import { CcApiType } from '../../types/cc-api.types.js'
44
* @import { Composer } from '../../../../types/command.types.js'
55
*/
66
import { isTimeoutError, Polling } from '../../../../utils/polling.js';
@@ -33,35 +33,6 @@ export async function waitForLogDrainDisabled(composer, ownerId, applicationId,
3333
return waitForState(composer, ownerId, applicationId, drainId, 'DISABLED', 'disabled');
3434
}
3535

36-
/**
37-
* Wait for a log drain to be deleted (no longer exists)
38-
* @param {Composer<CcApiType>} composer
39-
* @param {string} ownerId
40-
* @param {string} applicationId
41-
* @param {string} drainId
42-
* @returns {Promise<void>}
43-
*/
44-
export async function waitForLogDrainDeletion(composer, ownerId, applicationId, drainId) {
45-
const polling = new Polling(
46-
async () => {
47-
const result = await composer.send(new GetLogDrainCommand({ ownerId, applicationId, drainId }));
48-
return { stop: result == null };
49-
},
50-
POLLING_INTERVAL_MS,
51-
POLLING_TIMEOUT_MS,
52-
);
53-
54-
try {
55-
await polling.start();
56-
} catch (e) {
57-
if (isTimeoutError(e)) {
58-
throw new Error('Log drain deletion has been requested but is not deleted yet');
59-
} else {
60-
throw e;
61-
}
62-
}
63-
}
64-
6536
/**
6637
* Wait for a log drain to reach a specific state
6738
* @param {Composer<CcApiType>} composer
@@ -79,7 +50,7 @@ async function waitForState(composer, ownerId, applicationId, drainId, targetSta
7950
if (result == null) {
8051
return { stop: false };
8152
}
82-
if (result.state === targetState) {
53+
if (result.status === targetState) {
8354
return { stop: true, value: result };
8455
}
8556
return { stop: false };

0 commit comments

Comments
 (0)