From b4a5221caf7380d5f698d43f4f97082f89dd77eb Mon Sep 17 00:00:00 2001 From: Lucas Manchine Date: Wed, 23 Jul 2025 20:38:27 +0000 Subject: [PATCH] feat: Add stop_grace_period to swarm settings --- .../cluster/modify-swarm-settings.tsx | 26 + .../dokploy/drizzle/0104_free_thunderbolt.sql | 1 + apps/dokploy/drizzle/meta/0104_snapshot.json | 6142 +++++++++++++++++ apps/dokploy/drizzle/meta/_journal.json | 7 + packages/server/src/db/schema/application.ts | 2 + packages/server/src/utils/docker/utils.ts | 4 + 6 files changed, 6182 insertions(+) create mode 100644 apps/dokploy/drizzle/0104_free_thunderbolt.sql create mode 100644 apps/dokploy/drizzle/meta/0104_snapshot.json diff --git a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx index b8a272e15..2342d7558 100644 --- a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx @@ -1,6 +1,7 @@ import { AlertBlock } from "@/components/shared/alert-block"; import { CodeEditor } from "@/components/shared/code-editor"; import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; import { Dialog, DialogContent, @@ -176,6 +177,7 @@ const addSwarmSettings = z.object({ modeSwarm: createStringToJSONSchema(ServiceModeSwarmSchema).nullable(), labelsSwarm: createStringToJSONSchema(LabelsSwarmSchema).nullable(), networkSwarm: createStringToJSONSchema(NetworkSwarmSchema).nullable(), + stopGracePeriodSwarm: z.string().nullable(), }); type AddSwarmSettings = z.infer; @@ -238,6 +240,7 @@ export const AddSwarmSettings = ({ applicationId }: Props) => { networkSwarm: data.networkSwarm ? JSON.stringify(data.networkSwarm, null, 2) : null, + stopGracePeriodSwarm: data.stopGracePeriodSwarm ?? null, }); } }, [form, form.reset, data]); @@ -253,6 +256,7 @@ export const AddSwarmSettings = ({ applicationId }: Props) => { modeSwarm: data.modeSwarm, labelsSwarm: data.labelsSwarm, networkSwarm: data.networkSwarm, + stopGracePeriodSwarm: data.stopGracePeriodSwarm ?? null, }) .then(async () => { toast.success("Swarm settings updated"); @@ -752,6 +756,28 @@ export const AddSwarmSettings = ({ applicationId }: Props) => { )} /> + ( + + Stop Grace Period + + Time to wait for the container to stop gracefully. + + + + +
+										
+									
+
+ )} + />