feat(caprover): display application logs for apps with pending updates
This commit is contained in:
@@ -134,5 +134,19 @@ describe("Caprover", () => {
|
||||
expect(events).toBeArrayOfSize(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("getLogs", () => {
|
||||
it("should return the logs of the application when it exists", async () => {
|
||||
const logs = await caprover.getLogs("mysql");
|
||||
expect(logs).toBe("mysql logs");
|
||||
});
|
||||
|
||||
it("should throw an error when the application does not exist", async () => {
|
||||
await expect(
|
||||
caprover.getLogs("unknown")
|
||||
// @ts-ignore toThrowError exists¯\_(ツ)_/¯
|
||||
).rejects.toThrowError(/Failed to fetch logs for application unknown/);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -79,21 +79,23 @@ class Caprover {
|
||||
|
||||
async updateApplication(appName: string, version: string): Promise<void> {
|
||||
console.debug("Caprover: Updating application", appName, "to", version);
|
||||
const response = await this.fetch(`/user/apps/appData/${appName}`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
captainDefinitionContent: JSON.stringify({
|
||||
schemaVersion: 2,
|
||||
imageName: version,
|
||||
try {
|
||||
const response = await this.fetch(`/user/apps/appData/${appName}`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
captainDefinitionContent: JSON.stringify({
|
||||
schemaVersion: 2,
|
||||
imageName: version,
|
||||
}),
|
||||
gitHash: "",
|
||||
}),
|
||||
gitHash: "",
|
||||
}),
|
||||
});
|
||||
|
||||
console.debug("update application response", response);
|
||||
if (response.status !== 100) {
|
||||
});
|
||||
if (response.status !== 100) {
|
||||
throw new Error(response.description);
|
||||
}
|
||||
} catch (error) {
|
||||
throw new Error(
|
||||
`Failed to update application ${appName} to ${version}: ${response.description}.`
|
||||
`Failed to update application ${appName} to ${version}: ${error ?? ""}.`
|
||||
);
|
||||
}
|
||||
|
||||
@@ -105,6 +107,18 @@ class Caprover {
|
||||
);
|
||||
}
|
||||
|
||||
async getLogs(appName: string): Promise<string> {
|
||||
console.debug("Caprover: Fetching logs for", appName);
|
||||
const response = await this.fetch(`/user/apps/appData/${appName}/logs`);
|
||||
if (response.status !== 100) {
|
||||
throw new Error(
|
||||
`Failed to fetch logs for application ${appName}: ${response.description}`
|
||||
);
|
||||
}
|
||||
|
||||
return response.data.logs;
|
||||
}
|
||||
|
||||
private async authenticate() {
|
||||
if (this.authToken) {
|
||||
return;
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
import {
|
||||
http,
|
||||
HttpResponse,
|
||||
HttpResponseResolver,
|
||||
PathParams
|
||||
} from "msw";
|
||||
import { http, HttpResponse, HttpResponseResolver, PathParams } from "msw";
|
||||
import { setupServer } from "msw/node";
|
||||
import appsFixtures from "./apps.fixtures.json";
|
||||
|
||||
@@ -97,6 +92,27 @@ const handlers = [
|
||||
data: {},
|
||||
});
|
||||
}),
|
||||
http.get(
|
||||
`${BASE_URI}/user/apps/appData/:name/logs`,
|
||||
withAuth(({ params }) => {
|
||||
const app = appsFixtures.find((app) => app.appName === params.name);
|
||||
if (!app) {
|
||||
return HttpResponse.json({
|
||||
status: 1000,
|
||||
description: `App (${params.name}) could not be found. Make sure that you have created the app.`,
|
||||
data: {},
|
||||
});
|
||||
}
|
||||
|
||||
return HttpResponse.json({
|
||||
status: 100,
|
||||
description: "App runtime logs are retrieved",
|
||||
data: {
|
||||
logs: `${params.name} logs`,
|
||||
},
|
||||
});
|
||||
})
|
||||
),
|
||||
];
|
||||
|
||||
const server = setupServer(...handlers);
|
||||
|
||||
Reference in New Issue
Block a user