Improve USB policy responsiveness and reliability
- Reduce USB policy polling from 60s to 15s for faster response - Add retry with exponential backoff (2s, 4s, 8s) on report failures - Add APPLYING state for real-time progress bar feedback - Check if policy is already applied locally before re-applying - Fix API schema to accept APPLYING status - Update agent to v0.1.9 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
23e7cf58ae
commit
b60255fe03
6 changed files with 115 additions and 14 deletions
|
|
@ -73,6 +73,13 @@ function getStatusBadge(status: string | undefined | null) {
|
|||
Pendente
|
||||
</Badge>
|
||||
)
|
||||
case "APPLYING":
|
||||
return (
|
||||
<Badge variant="outline" className="gap-1 border-blue-200 bg-blue-50 text-blue-700">
|
||||
<Loader2 className="size-3 animate-spin" />
|
||||
Aplicando
|
||||
</Badge>
|
||||
)
|
||||
case "APPLIED":
|
||||
return (
|
||||
<Badge variant="outline" className="gap-1 border-emerald-200 bg-emerald-50 text-emerald-700">
|
||||
|
|
@ -92,6 +99,36 @@ function getStatusBadge(status: string | undefined | null) {
|
|||
}
|
||||
}
|
||||
|
||||
function getProgressValue(status: string | undefined | null): number {
|
||||
switch (status) {
|
||||
case "PENDING":
|
||||
return 33
|
||||
case "APPLYING":
|
||||
return 66
|
||||
case "APPLIED":
|
||||
return 100
|
||||
case "FAILED":
|
||||
return 100
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
function getProgressColor(status: string | undefined | null): string {
|
||||
switch (status) {
|
||||
case "PENDING":
|
||||
return "bg-amber-500"
|
||||
case "APPLYING":
|
||||
return "bg-blue-500"
|
||||
case "APPLIED":
|
||||
return "bg-emerald-500"
|
||||
case "FAILED":
|
||||
return "bg-red-500"
|
||||
default:
|
||||
return "bg-neutral-300"
|
||||
}
|
||||
}
|
||||
|
||||
interface UsbPolicyControlProps {
|
||||
machineId: string
|
||||
machineName?: string
|
||||
|
|
@ -168,11 +205,27 @@ export function UsbPolicyControl({
|
|||
|
||||
const content = (
|
||||
<div className="space-y-4">
|
||||
{/* Status atual no topo */}
|
||||
{/* Status atual com progress bar real */}
|
||||
{usbPolicy?.status && (
|
||||
<div className="flex items-center justify-between rounded-lg border bg-slate-50 p-3">
|
||||
<span className="text-sm font-medium text-slate-600">Status da política</span>
|
||||
{getStatusBadge(usbPolicy.status)}
|
||||
<div className="space-y-2 rounded-lg border bg-slate-50 p-3">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="text-sm font-medium text-slate-600">Status da política</span>
|
||||
{getStatusBadge(usbPolicy.status)}
|
||||
</div>
|
||||
{/* Progress bar real baseada no estado */}
|
||||
{(usbPolicy.status === "PENDING" || usbPolicy.status === "APPLYING") && (
|
||||
<div className="space-y-1">
|
||||
<div className="h-2 w-full overflow-hidden rounded-full bg-slate-200">
|
||||
<div
|
||||
className={`h-full transition-all duration-500 ease-out ${getProgressColor(usbPolicy.status)}`}
|
||||
style={{ width: `${getProgressValue(usbPolicy.status)}%` }}
|
||||
/>
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{usbPolicy.status === "PENDING" ? "Aguardando agente..." : "Agente aplicando política..."}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue