mirror of
https://github.com/lordmathis/llamactl.git
synced 2025-11-06 17:14:28 +00:00
Merge pull request #17 from lordmathis/fix/forbidden-logs
fix: Refactor log fetching to use instancesApi
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
|||||||
DialogTitle,
|
DialogTitle,
|
||||||
} from '@/components/ui/dialog'
|
} from '@/components/ui/dialog'
|
||||||
import { Badge } from '@/components/ui/badge'
|
import { Badge } from '@/components/ui/badge'
|
||||||
|
import { instancesApi } from '@/lib/api'
|
||||||
import {
|
import {
|
||||||
RefreshCw,
|
RefreshCw,
|
||||||
Download,
|
Download,
|
||||||
@@ -46,21 +47,15 @@ const LogsDialog: React.FC<LogsDialogProps> = ({
|
|||||||
const refreshIntervalRef = useRef<NodeJS.Timeout | null>(null)
|
const refreshIntervalRef = useRef<NodeJS.Timeout | null>(null)
|
||||||
|
|
||||||
// Fetch logs function
|
// Fetch logs function
|
||||||
const fetchLogs = async (lines?: number) => {
|
const fetchLogs = React.useCallback(
|
||||||
|
async (lines?: number) => {
|
||||||
if (!instanceName) return
|
if (!instanceName) return
|
||||||
|
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
setError(null)
|
setError(null)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const params = lines ? `?lines=${lines}` : ''
|
const logText = await instancesApi.getLogs(instanceName, lines)
|
||||||
const response = await fetch(`/api/v1/instances/${instanceName}/logs${params}`)
|
|
||||||
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error(`Failed to fetch logs: ${response.status}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
const logText = await response.text()
|
|
||||||
setLogs(logText)
|
setLogs(logText)
|
||||||
|
|
||||||
// Auto-scroll to bottom
|
// Auto-scroll to bottom
|
||||||
@@ -74,20 +69,22 @@ const LogsDialog: React.FC<LogsDialogProps> = ({
|
|||||||
} finally {
|
} finally {
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
[instanceName]
|
||||||
|
)
|
||||||
|
|
||||||
// Initial load when dialog opens
|
// Initial load when dialog opens
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (open && instanceName) {
|
if (open && instanceName) {
|
||||||
fetchLogs(lineCount)
|
void fetchLogs(lineCount)
|
||||||
}
|
}
|
||||||
}, [open, instanceName])
|
}, [open, instanceName, fetchLogs, lineCount])
|
||||||
|
|
||||||
// Auto-refresh effect
|
// Auto-refresh effect
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (autoRefresh && isRunning && open) {
|
if (autoRefresh && isRunning && open) {
|
||||||
refreshIntervalRef.current = setInterval(() => {
|
refreshIntervalRef.current = setInterval(() => {
|
||||||
fetchLogs(lineCount)
|
void fetchLogs(lineCount)
|
||||||
}, 2000) // Refresh every 2 seconds
|
}, 2000) // Refresh every 2 seconds
|
||||||
} else {
|
} else {
|
||||||
if (refreshIntervalRef.current) {
|
if (refreshIntervalRef.current) {
|
||||||
@@ -101,7 +98,7 @@ const LogsDialog: React.FC<LogsDialogProps> = ({
|
|||||||
clearInterval(refreshIntervalRef.current)
|
clearInterval(refreshIntervalRef.current)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [autoRefresh, isRunning, open, lineCount])
|
}, [autoRefresh, isRunning, open, lineCount, fetchLogs])
|
||||||
|
|
||||||
// Copy logs to clipboard
|
// Copy logs to clipboard
|
||||||
const copyLogs = async () => {
|
const copyLogs = async () => {
|
||||||
@@ -135,7 +132,7 @@ const LogsDialog: React.FC<LogsDialogProps> = ({
|
|||||||
|
|
||||||
// Apply new line count
|
// Apply new line count
|
||||||
const applyLineCount = () => {
|
const applyLineCount = () => {
|
||||||
fetchLogs(lineCount)
|
void fetchLogs(lineCount)
|
||||||
setShowSettings(false)
|
setShowSettings(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,7 +195,7 @@ const LogsDialog: React.FC<LogsDialogProps> = ({
|
|||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
size="sm"
|
size="sm"
|
||||||
onClick={() => fetchLogs(lineCount)}
|
onClick={() => void fetchLogs(lineCount)}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
>
|
>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
@@ -290,7 +287,7 @@ const LogsDialog: React.FC<LogsDialogProps> = ({
|
|||||||
<div className="flex items-center gap-2 w-full">
|
<div className="flex items-center gap-2 w-full">
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
onClick={copyLogs}
|
onClick={() => void copyLogs()}
|
||||||
disabled={!logs}
|
disabled={!logs}
|
||||||
>
|
>
|
||||||
{copied ? (
|
{copied ? (
|
||||||
|
|||||||
Reference in New Issue
Block a user