Skip to content

Commit 0e441bd

Browse files
committed
feat(logs): move Addon logs to API v4
1 parent bb3598e commit 0e441bd

File tree

2 files changed

+80
-4
lines changed

2 files changed

+80
-4
lines changed

src/commands/logs.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { styleText } from '../lib/style-text.js';
22
import { Logger } from '../logger.js';
33
import * as Application from '../models/application.js';
4-
import { resolveAddonId } from '../models/ids-resolver.js';
4+
import { resolveOwnerId, resolveRealId } from '../models/ids-resolver.js';
55
import * as Log from '../models/log-v4.js';
6-
import * as LogV2 from '../models/log.js';
76
import { Deferred } from '../models/utils.js';
87

98
export async function appLogs(params) {
@@ -24,13 +23,18 @@ export async function appLogs(params) {
2423

2524
// TODO: drop when addons are migrated to the v4 API
2625
if (addonIdOrRealId != null) {
27-
const addonId = await resolveAddonId(addonIdOrRealId);
26+
const addonId = await resolveRealId(addonIdOrRealId);
27+
const ownerId = await resolveOwnerId(addonId);
2828
if (isForHuman) {
2929
Logger.println(styleText('blue', 'Waiting for addon logs…'));
3030
} else {
3131
throw new Error(`"${format}" format is not yet available for add-on logs`);
3232
}
33-
return LogV2.displayLogs({ appAddonId: addonId, since, until, filter, deploymentId });
33+
34+
const deferred = new Deferred();
35+
await Log.displayAddonLogs({ ownerId, addonId, since, until, filter, deploymentId, format, deferred });
36+
return deferred.promise;
37+
//return LogV2.displayLogs({ appAddonId: addonId, since, until, filter, deploymentId });
3438
}
3539

3640
const { ownerId, appId } = await Application.resolveId(appIdOrName, alias);

src/models/log-v4.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ApplicationLogStream } from '@clevercloud/client/esm/streams/application-logs.js';
2+
import { ResourceLogStream } from '@clevercloud/client/esm/streams/resource-logs.js';
23
import { styleText } from '../lib/style-text.js';
34
import { Logger } from '../logger.js';
45
import { conf } from './configuration.js';
@@ -91,6 +92,77 @@ export async function displayLogs(params) {
9192
return logStream;
9293
}
9394

95+
export async function displayAddonLogs(params) {
96+
const deferred = params.deferred || new Deferred();
97+
const { apiHost, tokens } = await getHostAndTokens();
98+
const { ownerId, addonId, filter, since, until, deploymentId, format } = params;
99+
100+
if (format === 'json' && until == null) {
101+
throw new Error('"json" format is only applicable with a limiting parameter such as `--until`');
102+
}
103+
104+
const logStream = new ResourceLogStream({
105+
apiHost,
106+
tokens,
107+
ownerId,
108+
addonId,
109+
connectionTimeout: 10_000,
110+
retryConfiguration,
111+
since,
112+
until,
113+
deploymentId,
114+
filter,
115+
service: 'all',
116+
throttleElements: THROTTLE_ELEMENTS,
117+
throttlePerInMilliseconds: THROTTLE_PER_IN_MILLISECONDS,
118+
});
119+
120+
// Properly close the stream
121+
process.once('SIGINT', (signal) => logStream.close(signal));
122+
const jsonArray = new JsonArray();
123+
124+
logStream
125+
.on('open', () => {
126+
Logger.debug(styleText('blue', `Logs stream (open) ${JSON.stringify({ addonId, filter, deploymentId })}`));
127+
if (format === 'json') {
128+
jsonArray.open();
129+
}
130+
})
131+
.on('error', (event) => {
132+
Logger.debug(styleText('red', `Logs stream (error) ${event.error.message}`));
133+
})
134+
.onLog((log) => {
135+
switch (format) {
136+
case 'json':
137+
jsonArray.push(log);
138+
return;
139+
case 'json-stream':
140+
Logger.printJson(log);
141+
return;
142+
case 'human':
143+
default:
144+
if (log.message === RESET_COLOR) {
145+
return;
146+
}
147+
Logger.println(formatLogLine(log));
148+
}
149+
});
150+
151+
// start() is blocking until end of stream
152+
logStream
153+
.start()
154+
.then(() => {
155+
if (format === 'json') {
156+
jsonArray.close();
157+
}
158+
return deferred.resolve();
159+
})
160+
.catch(processError)
161+
.catch((error) => deferred.reject(error));
162+
163+
return logStream;
164+
}
165+
94166
export async function watchDeploymentAndDisplayLogs(options) {
95167
const { ownerId, appId, deploymentId, commitId, knownDeployments, quiet, redeployDate, exitStrategy } = options;
96168

0 commit comments

Comments
 (0)