mirror of
https://github.com/arcan1s/ahriman.git
synced 2026-06-13 17:01:07 +00:00
feat: SSE support (#162)
* event bus implementation * update tests * docs update * review fixes * update configs * fix typo * frontend changes * install missing pacakge * queue processing simplification
This commit is contained in:
@@ -23,6 +23,7 @@ import { keepPreviousData, skipToken, useQuery } from "@tanstack/react-query";
|
||||
import CodeBlock from "components/common/CodeBlock";
|
||||
import { QueryKeys } from "hooks/QueryKeys";
|
||||
import { useAutoScroll } from "hooks/useAutoScroll";
|
||||
import { useBuildLogStream } from "hooks/useBuildLogStream";
|
||||
import { useClient } from "hooks/useClient";
|
||||
import type { LogRecord } from "models/LogRecord";
|
||||
import type { RepositoryId } from "models/RepositoryId";
|
||||
@@ -37,7 +38,6 @@ interface Logs {
|
||||
|
||||
interface BuildLogsTabProps {
|
||||
packageBase: string;
|
||||
refreshInterval: number;
|
||||
repository: RepositoryId;
|
||||
}
|
||||
|
||||
@@ -50,10 +50,10 @@ function convertLogs(records: LogRecord[], filter?: (record: LogRecord) => boole
|
||||
|
||||
export default function BuildLogsTab({
|
||||
packageBase,
|
||||
refreshInterval,
|
||||
repository,
|
||||
}: BuildLogsTabProps): React.JSX.Element {
|
||||
const client = useClient();
|
||||
useBuildLogStream(packageBase, repository);
|
||||
const [selectedVersionKey, setSelectedVersionKey] = useState<string | null>(null);
|
||||
const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
|
||||
|
||||
@@ -61,7 +61,6 @@ export default function BuildLogsTab({
|
||||
enabled: !!packageBase,
|
||||
queryFn: () => client.fetch.fetchPackageLogs(packageBase, repository),
|
||||
queryKey: QueryKeys.logs(packageBase, repository),
|
||||
refetchInterval: refreshInterval > 0 ? refreshInterval : false,
|
||||
});
|
||||
|
||||
// Build version selectors from all logs
|
||||
@@ -117,7 +116,6 @@ export default function BuildLogsTab({
|
||||
)
|
||||
: skipToken,
|
||||
queryKey: QueryKeys.logsVersion(packageBase, repository, activeVersion?.version ?? "", activeVersion?.processId ?? ""),
|
||||
refetchInterval: refreshInterval > 0 ? refreshInterval : false,
|
||||
});
|
||||
|
||||
// Derive displayed logs: prefer fresh polled data when available
|
||||
|
||||
@@ -22,16 +22,11 @@ import PauseCircleIcon from "@mui/icons-material/PauseCircle";
|
||||
import PlayArrowIcon from "@mui/icons-material/PlayArrow";
|
||||
import PlayCircleIcon from "@mui/icons-material/PlayCircle";
|
||||
import { Button, Checkbox, DialogActions, FormControlLabel } from "@mui/material";
|
||||
import AutoRefreshControl from "components/common/AutoRefreshControl";
|
||||
import type { AutoRefreshInterval } from "models/AutoRefreshInterval";
|
||||
import type React from "react";
|
||||
|
||||
interface PackageInfoActionsProps {
|
||||
autoRefreshInterval: number;
|
||||
autoRefreshIntervals: AutoRefreshInterval[];
|
||||
isAuthorized: boolean;
|
||||
isHeld: boolean;
|
||||
onAutoRefreshIntervalChange: (interval: number) => void;
|
||||
onHoldToggle: () => void;
|
||||
onRefreshDatabaseChange: (checked: boolean) => void;
|
||||
onRemove: () => void;
|
||||
@@ -40,11 +35,8 @@ interface PackageInfoActionsProps {
|
||||
}
|
||||
|
||||
export default function PackageInfoActions({
|
||||
autoRefreshInterval,
|
||||
autoRefreshIntervals,
|
||||
isAuthorized,
|
||||
isHeld,
|
||||
onAutoRefreshIntervalChange,
|
||||
onHoldToggle,
|
||||
onRefreshDatabaseChange,
|
||||
onRemove,
|
||||
@@ -69,10 +61,5 @@ export default function PackageInfoActions({
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
<AutoRefreshControl
|
||||
currentInterval={autoRefreshInterval}
|
||||
intervals={autoRefreshIntervals}
|
||||
onIntervalChange={onAutoRefreshIntervalChange}
|
||||
/>
|
||||
</DialogActions>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user