import { Download } from "lucide-react" import React from "react"; import { useObservabilityData } from "../hooks/useObservabilityData"; export const CommandAndQueryBar: React.FC = () => { const { logs, traces, metrics, searchQuery, setSearchQuery, showErrorsOnly, setShowErrorsOnly, selectedServices, toggleService, resetFilters, minDurationMs, setMinDurationMs, timeWindow, setTimeWindow, } = useObservabilityData(); const totalFilteredEvents = logs.length + traces.length + metrics.length; const exportNDJSON = () => { const records = [ ...traces.map((t) => JSON.stringify({ type: "traces", ...t })), ...logs.map((l) => JSON.stringify({ type: "logs", ...l })), ...metrics.map((m) => JSON.stringify({ type: "metrics", ...m })), ].join("\n"); const blob = new Blob([records], { type: "application/x-ndjson" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `hyperscope-filtered-telemetry-${new Date().toISOString()}.ndjson`; a.click(); URL.revokeObjectURL(url); }; const hasActiveFilters = Boolean(searchQuery) || showErrorsOnly || selectedServices.size > 0 || minDurationMs > 0 || timeWindow !== "all"; return (
{/* Filter and Telemetry Status Bar */}
Active Context: {totalFilteredEvents} Signals ({timeWindow === "all" ? "All Time" : `Last ${timeWindow}`}) {/* Selected Service Pills */} {Array.from(selectedServices).map((service) => ( service:{service} ))} {/* Errors Only Pill */} {showErrorsOnly && ( Errors Only )} {/* Slow Spans Pill */} {minDurationMs > 0 && ( Latency >{minDurationMs}ms )} {/* Search Query Pill */} {searchQuery && ( query: "{searchQuery}" )} {hasActiveFilters && ( )}
{/* Export and Action buttons */}
); }; export default CommandAndQueryBar;