From 29c1e4691ea9ed41b01c20ba8981224ea147ba72 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Tue, 25 Feb 2025 23:04:19 -0600 Subject: [PATCH] feat(docker): add support for standalone container log retrieval --- .../settings/servers/actions/show-traefik-actions.tsx | 6 +++++- .../dashboard/settings/web-server/show-modal-logs.tsx | 9 ++++++++- apps/dokploy/server/api/routers/docker.ts | 7 ++++++- packages/server/src/services/docker.ts | 8 +++++++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx index 17a6ae75..f9b79947 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx @@ -79,7 +79,11 @@ export const ShowTraefikActions = ({ serverId }: Props) => { > {t("settings.server.webServer.reload")} - + e.preventDefault()} className="cursor-pointer" diff --git a/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx b/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx index 12e7b670..f6d17f9b 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/show-modal-logs.tsx @@ -37,13 +37,20 @@ interface Props { appName: string; children?: React.ReactNode; serverId?: string; + type: "standalone" | "swarm"; } -export const ShowModalLogs = ({ appName, children, serverId }: Props) => { +export const ShowModalLogs = ({ + appName, + children, + serverId, + type = "swarm", +}: Props) => { const { data, isLoading } = api.docker.getContainersByAppLabel.useQuery( { appName, serverId, + type, }, { enabled: !!appName, diff --git a/apps/dokploy/server/api/routers/docker.ts b/apps/dokploy/server/api/routers/docker.ts index f6972e16..3de59058 100644 --- a/apps/dokploy/server/api/routers/docker.ts +++ b/apps/dokploy/server/api/routers/docker.ts @@ -65,10 +65,15 @@ export const dockerRouter = createTRPCRouter({ z.object({ appName: z.string().min(1), serverId: z.string().optional(), + type: z.enum(["standalone", "swarm"]), }), ) .query(async ({ input }) => { - return await getContainersByAppLabel(input.appName, input.serverId); + return await getContainersByAppLabel( + input.appName, + input.type, + input.serverId, + ); }), getStackContainersByAppName: protectedProcedure diff --git a/packages/server/src/services/docker.ts b/packages/server/src/services/docker.ts index 597c03fa..fbb51192 100644 --- a/packages/server/src/services/docker.ts +++ b/packages/server/src/services/docker.ts @@ -281,13 +281,19 @@ export const getServiceContainersByAppName = async ( export const getContainersByAppLabel = async ( appName: string, + type: "standalone" | "swarm", serverId?: string, ) => { try { let stdout = ""; let stderr = ""; - const command = `docker ps --filter "label=com.docker.swarm.service.name=${appName}" --format 'CONTAINER ID : {{.ID}} | Name: {{.Names}} | State: {{.State}}'`; + const command = + type === "swarm" + ? `docker ps --filter "label=com.docker.swarm.service.name=${appName}" --format 'CONTAINER ID : {{.ID}} | Name: {{.Names}} | State: {{.State}}'` + : type === "standalone" + ? `docker ps --filter "name=${appName}" --format 'CONTAINER ID : {{.ID}} | Name: {{.Names}} | State: {{.State}}'` + : `docker ps --filter "label=com.docker.compose.project=${appName}" --format 'CONTAINER ID : {{.ID}} | Name: {{.Names}} | State: {{.State}}'`; if (serverId) { const result = await execAsyncRemote(serverId, command); stdout = result.stdout;