diff --git a/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx new file mode 100644 index 00000000..36719bb0 --- /dev/null +++ b/apps/dokploy/components/dashboard/docker/logs/show-docker-modal-stack-logs.tsx @@ -0,0 +1,58 @@ +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { DropdownMenuItem } from "@/components/ui/dropdown-menu"; +import dynamic from "next/dynamic"; +import type React from "react"; +export const DockerLogsId = dynamic( + () => + import("@/components/dashboard/docker/logs/docker-logs-id").then( + (e) => e.DockerLogsId, + ), + { + ssr: false, + }, +); + +interface Props { + containerId: string; + children?: React.ReactNode; + serverId?: string | null; +} + +export const ShowDockerModalStackLogs = ({ + containerId, + children, + serverId, +}: Props) => { + return ( + + + e.preventDefault()} + > + {children} + + + + + View Logs + View the logs for {containerId} + +
+ +
+
+
+ ); +}; diff --git a/apps/dokploy/components/dashboard/swarm/applications/columns.tsx b/apps/dokploy/components/dashboard/swarm/applications/columns.tsx index 1961cd99..69ccc41d 100644 --- a/apps/dokploy/components/dashboard/swarm/applications/columns.tsx +++ b/apps/dokploy/components/dashboard/swarm/applications/columns.tsx @@ -11,11 +11,7 @@ import { } from "@/components/ui/dropdown-menu"; import { Badge } from "@/components/ui/badge"; -import { ShowNodeConfig } from "../details/show-node-config"; -// import { ShowContainerConfig } from "../config/show-container-config"; -// import { ShowDockerModalLogs } from "../logs/show-docker-modal-logs"; -// import { DockerTerminalModal } from "../terminal/docker-terminal-modal"; -// import type { Container } from "./show-containers"; +import { ShowDockerModalStackLogs } from "../../docker/logs/show-docker-modal-stack-logs"; export interface ApplicationList { ID: string; @@ -28,6 +24,7 @@ export interface ApplicationList { DesiredState: string; Error: string; Node: string; + serverId: string; } export const columns: ColumnDef[] = [ @@ -212,7 +209,37 @@ export const columns: ColumnDef[] = [ ); }, cell: ({ row }) => { - return
{row.getValue("Errors")}
; + return
{row.getValue("Errors")}
; + }, + }, + { + accessorKey: "Logs", + accessorFn: (row) => row.Error, + header: ({ column }) => { + return Logs; + }, + cell: ({ row }) => { + return ( + + + + + + + Actions + + View Logs + + + + + ); }, }, ]; diff --git a/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx b/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx index 132cb008..df764225 100644 --- a/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx +++ b/apps/dokploy/components/dashboard/swarm/applications/show-applications.tsx @@ -89,6 +89,7 @@ export const ShowNodeApplications = ({ serverId }: Props) => { Error: detail.Error, Node: detail.Node, Ports: detail.Ports || app.Ports, + serverId: serverId || "", })); }); diff --git a/packages/server/src/services/docker.ts b/packages/server/src/services/docker.ts index 55764230..79cd8345 100644 --- a/packages/server/src/services/docker.ts +++ b/packages/server/src/services/docker.ts @@ -425,7 +425,8 @@ export const getNodeApplications = async (serverId?: string) => { const appArray = stdout .trim() .split("\n") - .map((line) => JSON.parse(line)); + .map((line) => JSON.parse(line)) + .filter((service) => !service.Name.startsWith('dokploy-')); return appArray; } catch (error) {} @@ -438,7 +439,7 @@ export const getApplicationInfo = async ( try { let stdout = ""; let stderr = ""; - const command = `docker service ps ${appName} --format '{{json .}}'`; + const command = `docker service ps ${appName} --format '{{json .}}' --no-trunc`; if (serverId) { const result = await execAsyncRemote(serverId, command);