Skip to content

Commit d1d370e

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

File tree

2 files changed

+79
-4
lines changed

2 files changed

+79
-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: 71 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,76 @@ 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+
throttleElements: THROTTLE_ELEMENTS,
116+
throttlePerInMilliseconds: THROTTLE_PER_IN_MILLISECONDS,
117+
});
118+
119+
// Properly close the stream
120+
process.once('SIGINT', (signal) => logStream.close(signal));
121+
const jsonArray = new JsonArray();
122+
123+
logStream
124+
.on('open', () => {
125+
Logger.debug(styleText('blue', `Logs stream (open) ${JSON.stringify({ addonId, filter, deploymentId })}`));
126+
if (format === 'json') {
127+
jsonArray.open();
128+
}
129+
})
130+
.on('error', (event) => {
131+
Logger.debug(styleText('red', `Logs stream (error) ${event.error.message}`));
132+
})
133+
.onLog((log) => {
134+
switch (format) {
135+
case 'json':
136+
jsonArray.push(log);
137+
return;
138+
case 'json-stream':
139+
Logger.printJson(log);
140+
return;
141+
case 'human':
142+
default:
143+
if (log.message === RESET_COLOR) {
144+
return;
145+
}
146+
Logger.println(formatLogLine(log));
147+
}
148+
});
149+
150+
// start() is blocking until end of stream
151+
logStream
152+
.start()
153+
.then(() => {
154+
if (format === 'json') {
155+
jsonArray.close();
156+
}
157+
return deferred.resolve();
158+
})
159+
.catch(processError)
160+
.catch((error) => deferred.reject(error));
161+
162+
return logStream;
163+
}
164+
94165
export async function watchDeploymentAndDisplayLogs(options) {
95166
const { ownerId, appId, deploymentId, commitId, knownDeployments, quiet, redeployDate, exitStrategy } = options;
96167

0 commit comments

Comments
 (0)