Canvas: Logs tab
Change-Id: Iddf52dbce6fb2090f095cecb04bafcb50c47e4a7
diff --git a/apps/canvas/back/src/index.ts b/apps/canvas/back/src/index.ts
index 0a35dfe..c934a9b 100644
--- a/apps/canvas/back/src/index.ts
+++ b/apps/canvas/back/src/index.ts
@@ -9,6 +9,7 @@
// Map to store worker addresses by project ID
const workers = new Map<number, string[]>();
+const logs = new Map<number, Map<string, string>>();
const handleProjectCreate: express.Handler = async (req, resp) => {
try {
@@ -347,6 +348,9 @@
return;
}
+ const projectLogs = logs.get(projectId) || new Map();
+ const services = Array.from(projectLogs.keys());
+
resp.status(200);
resp.write(
JSON.stringify({
@@ -366,6 +370,7 @@
domain: "p.v1.dodo.cloud",
},
],
+ services,
}),
);
} catch (error) {
@@ -377,8 +382,40 @@
}
};
+const handleServiceLogs: express.Handler = async (req, resp) => {
+ try {
+ const projectId = Number(req.params["projectId"]);
+ const service = req.params["service"];
+
+ const projectLogs = logs.get(projectId);
+ if (!projectLogs) {
+ resp.status(404);
+ resp.write(JSON.stringify({ error: "No logs found for this project" }));
+ return;
+ }
+
+ const serviceLog = projectLogs.get(service);
+ if (!serviceLog) {
+ resp.status(404);
+ resp.write(JSON.stringify({ error: "No logs found for this service" }));
+ return;
+ }
+
+ resp.status(200);
+ resp.write(JSON.stringify({ logs: serviceLog }));
+ } catch (e) {
+ console.log(e);
+ resp.status(500);
+ resp.write(JSON.stringify({ error: "Failed to get service logs" }));
+ } finally {
+ resp.end();
+ }
+};
+
const WorkerSchema = z.object({
+ service: z.string(),
address: z.string().url(),
+ logs: z.optional(z.string()),
});
const handleRegisterWorker: express.Handler = async (req, resp) => {
@@ -386,7 +423,6 @@
const projectId = Number(req.params["projectId"]);
const result = WorkerSchema.safeParse(req.body);
- console.log(result);
if (!result.success) {
resp.status(400);
resp.write(
@@ -398,7 +434,8 @@
return;
}
- const { address } = result.data;
+ console.log(result);
+ const { service, address, logs: log } = result.data;
// Get existing workers or initialize empty array
const projectWorkers = workers.get(projectId) || [];
@@ -409,12 +446,15 @@
}
workers.set(projectId, projectWorkers);
-
+ if (log) {
+ const svcLogs: Map<string, string> = logs.get(projectId) || new Map();
+ svcLogs.set(service, log);
+ logs.set(projectId, svcLogs);
+ }
resp.status(200);
resp.write(
JSON.stringify({
success: true,
- workers: projectWorkers,
}),
);
} catch (e) {
@@ -475,6 +515,7 @@
app.get("/api/project/:projectId/env", handleEnv);
app.post("/api/project/:projectId/workers", handleRegisterWorker);
app.post("/api/project/:projectId/reload", handleReload);
+ app.get("/api/project/:projectId/logs/:service", handleServiceLogs);
app.use("/", express.static("../front/dist"));
app.listen(env.DODO_PORT_WEB, () => {
console.log("started");