mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
feat: added debug log type & noTimestamp props for TerminalLine
This commit is contained in:
@@ -94,6 +94,7 @@ export const ShowDeployment = ({ logPath, open, onClose, serverId }: Props) => {
|
|||||||
<TerminalLine
|
<TerminalLine
|
||||||
key={index}
|
key={index}
|
||||||
log={log}
|
log={log}
|
||||||
|
noTimestamp
|
||||||
/>
|
/>
|
||||||
)) || "Loading..."}
|
)) || "Loading..."}
|
||||||
<div ref={endOfLogsRef} />
|
<div ref={endOfLogsRef} />
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ export const ShowDeploymentCompose = ({
|
|||||||
<TerminalLine
|
<TerminalLine
|
||||||
key={index}
|
key={index}
|
||||||
log={log}
|
log={log}
|
||||||
|
noTimestamp
|
||||||
/>
|
/>
|
||||||
)) || "Loading..."}
|
)) || "Loading..."}
|
||||||
<div ref={endOfLogsRef} />
|
<div ref={endOfLogsRef} />
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type TimeFilter = "all" | "1h" | "6h" | "24h" | "168h" | "720h";
|
type TimeFilter = "all" | "1h" | "6h" | "24h" | "168h" | "720h";
|
||||||
type TypeFilter = "all" | "error" | "warning" | "success" | "info";
|
type TypeFilter = "all" | "error" | "warning" | "success" | "info" | "debug";
|
||||||
|
|
||||||
export const DockerLogsId: React.FC<Props> = ({ containerId, serverId }) => {
|
export const DockerLogsId: React.FC<Props> = ({ containerId, serverId }) => {
|
||||||
const { data } = api.docker.getConfig.useQuery(
|
const { data } = api.docker.getConfig.useQuery(
|
||||||
@@ -225,7 +225,10 @@ export const DockerLogsId: React.FC<Props> = ({ containerId, serverId }) => {
|
|||||||
<Badge variant="red">Error</Badge>
|
<Badge variant="red">Error</Badge>
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
<SelectItem value="warning">
|
<SelectItem value="warning">
|
||||||
<Badge variant="yellow">Warning</Badge>
|
<Badge variant="orange">Warning</Badge>
|
||||||
|
</SelectItem>
|
||||||
|
<SelectItem value="warning">
|
||||||
|
<Badge variant="yellow">Debug</Badge>
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
<SelectItem value="success">
|
<SelectItem value="success">
|
||||||
<Badge variant="green">Success</Badge>
|
<Badge variant="green">Success</Badge>
|
||||||
|
|||||||
@@ -12,10 +12,11 @@ import { type LogLine, getLogType } from "./utils";
|
|||||||
|
|
||||||
interface LogLineProps {
|
interface LogLineProps {
|
||||||
log: LogLine;
|
log: LogLine;
|
||||||
|
noTimestamp?: boolean;
|
||||||
searchTerm?: string;
|
searchTerm?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function TerminalLine({ log, searchTerm }: LogLineProps) {
|
export function TerminalLine({ log, noTimestamp, searchTerm }: LogLineProps) {
|
||||||
const { timestamp, message, rawTimestamp } = log;
|
const { timestamp, message, rawTimestamp } = log;
|
||||||
const { type, variant, color } = getLogType(message);
|
const { type, variant, color } = getLogType(message);
|
||||||
|
|
||||||
@@ -72,7 +73,9 @@ export function TerminalLine({ log, searchTerm }: LogLineProps) {
|
|||||||
? "bg-red-500/10 hover:bg-red-500/15"
|
? "bg-red-500/10 hover:bg-red-500/15"
|
||||||
: type === "warning"
|
: type === "warning"
|
||||||
? "bg-yellow-500/10 hover:bg-yellow-500/15"
|
? "bg-yellow-500/10 hover:bg-yellow-500/15"
|
||||||
: "hover:bg-gray-200/50 dark:hover:bg-gray-800/50",
|
: type === "debug"
|
||||||
|
? "bg-orange-500/10 hover:bg-orange-500/15"
|
||||||
|
: "hover:bg-gray-200/50 dark:hover:bg-gray-800/50",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{" "}
|
{" "}
|
||||||
@@ -80,9 +83,13 @@ export function TerminalLine({ log, searchTerm }: LogLineProps) {
|
|||||||
{/* Icon to expand the log item maybe implement a colapsible later */}
|
{/* Icon to expand the log item maybe implement a colapsible later */}
|
||||||
{/* <Square className="size-4 text-muted-foreground opacity-0 group-hover/logitem:opacity-100 transition-opacity" /> */}
|
{/* <Square className="size-4 text-muted-foreground opacity-0 group-hover/logitem:opacity-100 transition-opacity" /> */}
|
||||||
{tooltip(color, rawTimestamp)}
|
{tooltip(color, rawTimestamp)}
|
||||||
<span className="select-none pl-2 text-muted-foreground w-full sm:w-40 flex-shrink-0">
|
{!noTimestamp && (
|
||||||
{formattedTime}
|
<span className="select-none pl-2 text-muted-foreground w-full sm:w-40 flex-shrink-0">
|
||||||
</span>
|
{formattedTime}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
|
||||||
|
|
||||||
<Badge
|
<Badge
|
||||||
variant={variant}
|
variant={variant}
|
||||||
className="w-14 justify-center text-[10px] px-1 py-0"
|
className="w-14 justify-center text-[10px] px-1 py-0"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
export type LogType = "error" | "warning" | "success" | "info";
|
export type LogType = "error" | "warning" | "success" | "info" | "debug";
|
||||||
export type LogVariant = "red" | "yellow" | "green" | "blue";
|
export type LogVariant = "red" | "yellow" | "green" | "blue" | "orange";
|
||||||
|
|
||||||
export interface LogLine {
|
export interface LogLine {
|
||||||
rawTimestamp: string | null;
|
rawTimestamp: string | null;
|
||||||
@@ -21,6 +21,11 @@ const LOG_STYLES: Record<LogType, LogStyle> = {
|
|||||||
},
|
},
|
||||||
warning: {
|
warning: {
|
||||||
type: "warning",
|
type: "warning",
|
||||||
|
variant: "orange",
|
||||||
|
color: "bg-orange-500/40",
|
||||||
|
},
|
||||||
|
debug: {
|
||||||
|
type: "debug",
|
||||||
variant: "yellow",
|
variant: "yellow",
|
||||||
color: "bg-yellow-500/40",
|
color: "bg-yellow-500/40",
|
||||||
},
|
},
|
||||||
@@ -88,7 +93,7 @@ export const getLogType = (message: string): LogStyle => {
|
|||||||
/Error:\s.*(?:in|at)\s+.*:\d+(?::\d+)?/.test(lowerMessage) ||
|
/Error:\s.*(?:in|at)\s+.*:\d+(?::\d+)?/.test(lowerMessage) ||
|
||||||
/\b(?:errno|code):\s*(?:\d+|[A-Z_]+)\b/i.test(lowerMessage) ||
|
/\b(?:errno|code):\s*(?:\d+|[A-Z_]+)\b/i.test(lowerMessage) ||
|
||||||
/\[(?:error|err|fatal)\]/i.test(lowerMessage) ||
|
/\[(?:error|err|fatal)\]/i.test(lowerMessage) ||
|
||||||
/\b(?:&ash|critical|fatal)\b/i.test(lowerMessage) ||
|
/\b(?:crash|critical|fatal)\b/i.test(lowerMessage) ||
|
||||||
/\b(?:fail(?:ed|ure)?|broken|dead)\b/i.test(lowerMessage)
|
/\b(?:fail(?:ed|ure)?|broken|dead)\b/i.test(lowerMessage)
|
||||||
) {
|
) {
|
||||||
return LOG_STYLES.error;
|
return LOG_STYLES.error;
|
||||||
@@ -124,10 +129,10 @@ export const getLogType = (message: string): LogStyle => {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
/(?:^|\s)(?:info|inf):?\s/i.test(lowerMessage) ||
|
/(?:^|\s)(?:info|inf):?\s/i.test(lowerMessage) ||
|
||||||
/\[(info|log|debug|trace|server|db|api)\]/i.test(lowerMessage) ||
|
/\[(info|log|debug|trace|server|db|api|http|request|response)\]/i.test(lowerMessage) ||
|
||||||
/\b(?:version|config|start|import|load)\b:?/i.test(lowerMessage)
|
/\b(?:version|config|import|load)\b:?/i.test(lowerMessage)
|
||||||
) {
|
) {
|
||||||
return LOG_STYLES.info;
|
return LOG_STYLES.debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
return LOG_STYLES.info;
|
return LOG_STYLES.info;
|
||||||
|
|||||||
Reference in New Issue
Block a user