Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion fastapi_radar/dashboard/dist/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>FastAPI Radar - Debugging Dashboard</title>
<script type="module" crossorigin src="/__radar/assets/index-BQIU9U77.js"></script>
<script type="module" crossorigin src="/__radar/assets/index-TW7wrctN.js"></script>
<link rel="stylesheet" crossorigin href="/__radar/assets/index-D51YrvFG.css">
</head>
<body>
Expand Down
4 changes: 3 additions & 1 deletion fastapi_radar/dashboard/src/components/Layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import { Menu, Moon, Sun, ChevronLeft, RefreshCw, Trash2 } from "lucide-react";
import { useTheme } from "@/hooks/useTheme";
import { useQuery } from "@tanstack/react-query";
import { apiClient } from "@/api/client";
import { useT } from "@/i18n";

export function Layout() {
const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
const { theme, toggleTheme } = useTheme();
const [isRefreshing, setIsRefreshing] = useState(false);
const t = useT();

const { refetch: refetchAll } = useQuery({
queryKey: ["stats"],
Expand Down Expand Up @@ -74,7 +76,7 @@ export function Layout() {
className="hidden sm:flex items-center gap-1"
>
<div className="h-2 w-2 bg-green-500 rounded-full animate-pulse" />
Connected
{t("layout.connected")}
</Badge>

{/* Refresh Button */}
Expand Down
31 changes: 17 additions & 14 deletions fastapi_radar/dashboard/src/components/TracesList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import {
AlertTriangle,
CheckCircle,
} from "lucide-react";
import { useT } from "@/i18n";


interface TracesListProps {
className?: string;
Expand Down Expand Up @@ -64,6 +66,7 @@ function getStatusVariant(

export function TracesList({ className }: TracesListProps) {
const { openDetail } = useDetailDrawer();
const t = useT();

const [filters, setFilters] = useState({
search: "",
Expand Down Expand Up @@ -106,14 +109,14 @@ export function TracesList({ className }: TracesListProps) {
<div className="text-center">
<AlertTriangle className="h-12 w-12 text-destructive mx-auto mb-4" />
<h3 className="text-lg font-semibold mb-2">
Failed to load traces
{t("traceslist.failToLoadTraces")}
</h3>
<p className="text-sm text-muted-foreground mb-4">
There was an error loading the trace data.
{t("traceslist.anError")}
</p>
<Button onClick={() => refetch()}>
<RefreshCw className="h-4 w-4 mr-2" />
Try again
{t("traceslist.tryAgain")}
</Button>
</div>
</CardContent>
Expand All @@ -131,7 +134,7 @@ export function TracesList({ className }: TracesListProps) {
<div className="relative">
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
<Input
placeholder="Search by operation name..."
placeholder={t('traceslist.search')}
value={filters.search}
onChange={(e) =>
setFilters({ ...filters, search: e.target.value })
Expand All @@ -148,12 +151,12 @@ export function TracesList({ className }: TracesListProps) {
}
>
<SelectTrigger className="w-[150px]">
<SelectValue placeholder="All statuses" />
<SelectValue placeholder={t("traceslist.all")} />
</SelectTrigger>
<SelectContent>
<SelectItem value="all">All statuses</SelectItem>
<SelectItem value="ok">Success</SelectItem>
<SelectItem value="error">Error</SelectItem>
<SelectItem value="all">{t("traceslist.all")}</SelectItem>
<SelectItem value="ok">{t("traceslist.success")}</SelectItem>
<SelectItem value="error">{t("traceslist.error")}</SelectItem>
</SelectContent>
</Select>

Expand All @@ -167,16 +170,16 @@ export function TracesList({ className }: TracesListProps) {
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="1">Last hour</SelectItem>
<SelectItem value="6">Last 6 hours</SelectItem>
<SelectItem value="24">Last 24 hours</SelectItem>
<SelectItem value="168">Last week</SelectItem>
<SelectItem value="1">{t("traceslist.lastHour")}</SelectItem>
<SelectItem value="6">{t("traceslist.last6Hours")}</SelectItem>
<SelectItem value="24">{t("traceslist.last24Hours")}</SelectItem>
<SelectItem value="168">{t("traceslist.lastWeek")}</SelectItem>
</SelectContent>
</Select>

<Button onClick={() => refetch()} size="sm" variant="outline">
<RefreshCw className="h-4 w-4 mr-2" />
Refresh
{t("traceslist.refresh")}
</Button>
</div>
</CardContent>
Expand All @@ -198,7 +201,7 @@ export function TracesList({ className }: TracesListProps) {
) : traces.length === 0 ? (
<div className="p-6 text-center text-muted-foreground">
<Activity className="h-12 w-12 mx-auto mb-4 opacity-50" />
<p>No traces found matching your criteria.</p>
<p>{t("traceslist.noTraces")}</p>
</div>
) : (
<div className="divide-y">
Expand Down
Loading