Spaces:
Paused
Paused
File size: 1,453 Bytes
1c72248 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
'use client';
import { useEffect, useState, useRef } from 'react';
import { apiClient } from '@/utils/api';
interface FileObject {
path: string;
size: number;
}
const clean = (text: string): string => {
// remove \x1B[A\x1B[A
text = text.replace(/\x1B\[A/g, '');
return text;
};
export default function useJobLog(jobID: string, reloadInterval: null | number = null) {
const [log, setLog] = useState<string>('');
const didInitialLoadRef = useRef(false);
const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error' | 'refreshing'>('idle');
const refresh = () => {
let loadStatus: 'loading' | 'refreshing' = 'loading';
if (didInitialLoadRef.current) {
loadStatus = 'refreshing';
}
setStatus(loadStatus);
apiClient
.get(`/api/jobs/${jobID}/log`)
.then(res => res.data)
.then(data => {
if (data.log) {
let cleanLog = clean(data.log);
setLog(cleanLog);
}
setStatus('success');
didInitialLoadRef.current = true;
})
.catch(error => {
console.error('Error fetching log:', error);
setStatus('error');
});
};
useEffect(() => {
refresh();
if (reloadInterval) {
const interval = setInterval(() => {
refresh();
}, reloadInterval);
return () => {
clearInterval(interval);
};
}
}, [jobID]);
return { log, setLog, status, refresh };
}
|