mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-11-06 02:25:24 +00:00
fix: honor signal refreshSec when caching signal reads
This commit is contained in:
1 parent
4aead47049
commit
2ee31ac9cc
3 files changed
+30
-1
No files matched your search
@@ -622,6 +622,7 @@ router.get("/signals", authenticateJWT, async (req, res) => {
|
||||
userId: authReq.userId,
|
||||
actionId: signal.read,
|
||||
hostIds,
|
||||
freshMs: signal.refreshSec ? signal.refreshSec * 1000 : undefined,
|
||||
origin: originOf(authReq),
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -78,6 +78,8 @@ interface ReadOptions {
|
||||
actionId: string;
|
||||
hostIds?: number[];
|
||||
refresh?: boolean;
|
||||
/** How long a cached answer stays fresh. Defaults to RESOURCE_FRESH_MS. */
|
||||
freshMs?: number;
|
||||
input?: Record<string, unknown>;
|
||||
origin: ActorOrigin;
|
||||
}
|
||||
@@ -155,7 +157,9 @@ export async function readAcrossHosts<T>(
|
||||
|
||||
const key = cacheKey(options.userId, options.actionId, hostId);
|
||||
const cached = cache.get(key);
|
||||
const fresh = cached && Date.now() - cached.fetchedAt < RESOURCE_FRESH_MS;
|
||||
const fresh =
|
||||
cached &&
|
||||
Date.now() - cached.fetchedAt < (options.freshMs ?? RESOURCE_FRESH_MS);
|
||||
|
||||
if (isOffline(hostId)) {
|
||||
reads.push({
|
||||
|
||||
@@ -275,3 +275,27 @@ describe("GET /operations/catalog", () => {
|
||||
expect(response.body.actions).toEqual([{ id: "demo.restart" }]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("GET /operations/signals", () => {
|
||||
it("keeps a signal's answer for its refreshSec", async () => {
|
||||
const { buildCatalog } = await import("../../../operations/catalog.js");
|
||||
const { readAcrossHosts } =
|
||||
await import("../../../operations/resources.js");
|
||||
vi.mocked(buildCatalog).mockResolvedValueOnce({
|
||||
actions: [],
|
||||
events: [],
|
||||
resources: [],
|
||||
signals: [
|
||||
{ id: "a", read: "demo.a", scope: "host", refreshSec: 600 },
|
||||
{ id: "b", read: "demo.b", scope: "host" },
|
||||
],
|
||||
} as never);
|
||||
await request(app).get("/operations/signals").expect(200);
|
||||
expect(vi.mocked(readAcrossHosts)).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ actionId: "demo.a", freshMs: 600_000 }),
|
||||
);
|
||||
expect(vi.mocked(readAcrossHosts)).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ actionId: "demo.b", freshMs: undefined }),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user