diff --git a/apps/dokploy/components/dashboard/compose/monitoring/show.tsx b/apps/dokploy/components/dashboard/compose/monitoring/show.tsx
index d5cdca14..898af8ec 100644
--- a/apps/dokploy/components/dashboard/compose/monitoring/show.tsx
+++ b/apps/dokploy/components/dashboard/compose/monitoring/show.tsx
@@ -17,10 +17,10 @@ import {
SelectValue,
} from "@/components/ui/select";
import { api } from "@/utils/api";
+import { Loader2 } from "lucide-react";
import { useEffect, useState } from "react";
import { toast } from "sonner";
import { DockerMonitoring } from "../../monitoring/docker/show";
-import { Loader2 } from "lucide-react";
interface Props {
appName: string;
@@ -119,7 +119,6 @@ export const ShowMonitoringCompose = ({
diff --git a/apps/dokploy/components/dashboard/monitoring/docker/docker-memory-chart.tsx b/apps/dokploy/components/dashboard/monitoring/docker/docker-memory-chart.tsx
index 78791ce1..36f1edb8 100644
--- a/apps/dokploy/components/dashboard/monitoring/docker/docker-memory-chart.tsx
+++ b/apps/dokploy/components/dashboard/monitoring/docker/docker-memory-chart.tsx
@@ -23,7 +23,7 @@ export const DockerMemoryChart = ({
return {
time: item.time,
name: `Point ${index + 1}`,
- usage: (item.value.used / 1024).toFixed(2),
+ usage: (item.value.used / 1024 ** 3).toFixed(2),
};
});
return (
diff --git a/apps/dokploy/components/dashboard/monitoring/docker/show.tsx b/apps/dokploy/components/dashboard/monitoring/docker/show.tsx
index c54e7c0c..8ed6d0b1 100644
--- a/apps/dokploy/components/dashboard/monitoring/docker/show.tsx
+++ b/apps/dokploy/components/dashboard/monitoring/docker/show.tsx
@@ -150,6 +150,8 @@ export const DockerMonitoring = ({
});
}, [data]);
+ console.log(currentData);
+
useEffect(() => {
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
const wsUrl = `${protocol}//${window.location.host}/listen-docker-stats-monitoring?appName=${appName}&appType=${appType}`;
@@ -208,9 +210,7 @@ export const DockerMonitoring = ({
Memory
- {`Used: ${(currentData.memory.value.used / 1024).toFixed(
- 2,
- )} GB / Limit: ${(currentData.memory.value.total / 1024).toFixed(2)} GB`}
+ {`Used: ${(currentData.memory.value.used / 1024 ** 3).toFixed(2)} GB / Limit: ${(currentData.memory.value.total / 1024 ** 3).toFixed(2)} GB`}
{appName === "dokploy" && (
@@ -240,9 +240,9 @@ export const DockerMonitoring = ({
Block I/O
- {`Used: ${currentData.block.value.readMb.toFixed(
+ {`Read: ${currentData.block.value.readMb.toFixed(
2,
- )} MB / Limit: ${currentData.block.value.writeMb.toFixed(
+ )} MB / Write: ${currentData.block.value.writeMb.toFixed(
3,
)} MB`}
diff --git a/apps/dokploy/components/dashboard/project/add-application.tsx b/apps/dokploy/components/dashboard/project/add-application.tsx
index 69a256a4..3ab9f9ae 100644
--- a/apps/dokploy/components/dashboard/project/add-application.tsx
+++ b/apps/dokploy/components/dashboard/project/add-application.tsx
@@ -19,15 +19,6 @@ import {
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
-import { Textarea } from "@/components/ui/textarea";
-import { slugify } from "@/lib/slug";
-import { api } from "@/utils/api";
-import { zodResolver } from "@hookform/resolvers/zod";
-import { Folder } from "lucide-react";
-import { useState } from "react";
-import { useForm } from "react-hook-form";
-import { toast } from "sonner";
-import { z } from "zod";
import {
Select,
SelectContent,
@@ -37,6 +28,21 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
+import { Textarea } from "@/components/ui/textarea";
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from "@/components/ui/tooltip";
+import { slugify } from "@/lib/slug";
+import { api } from "@/utils/api";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { Folder, HelpCircle } from "lucide-react";
+import { useState } from "react";
+import { useForm } from "react-hook-form";
+import { toast } from "sonner";
+import { z } from "zod";
const AddTemplateSchema = z.object({
name: z.string().min(1, {
@@ -52,9 +58,7 @@ const AddTemplateSchema = z.object({
"App name supports lowercase letters, numbers, '-' and can only start and end letters, and does not support continuous '-'",
}),
description: z.string().optional(),
- serverId: z.string().min(1, {
- message: "Server is required",
- }),
+ serverId: z.string().optional(),
});
type AddTemplate = z.infer
;
@@ -155,7 +159,27 @@ export const AddApplication = ({ projectId, projectName }: Props) => {
name="serverId"
render={({ field }) => (
- Select a Server
+
+
+
+
+ Select a Server (Optional)
+
+
+
+
+
+ If not server is selected, the application will be
+ deployed on the server where the user is logged in.
+
+
+
+
+