@guckdev/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/config.d.ts +19 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +178 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/index.d.ts +7 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +7 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/redact.d.ts +3 -0
  10. package/dist/redact.d.ts.map +1 -0
  11. package/dist/redact.js +68 -0
  12. package/dist/redact.js.map +1 -0
  13. package/dist/schema.d.ts +113 -0
  14. package/dist/schema.d.ts.map +1 -0
  15. package/dist/schema.js +2 -0
  16. package/dist/schema.js.map +1 -0
  17. package/dist/store/backends/cloudwatch.d.ts +4 -0
  18. package/dist/store/backends/cloudwatch.d.ts.map +1 -0
  19. package/dist/store/backends/cloudwatch.js +302 -0
  20. package/dist/store/backends/cloudwatch.js.map +1 -0
  21. package/dist/store/backends/k8s.d.ts +4 -0
  22. package/dist/store/backends/k8s.d.ts.map +1 -0
  23. package/dist/store/backends/k8s.js +307 -0
  24. package/dist/store/backends/k8s.js.map +1 -0
  25. package/dist/store/backends/local.d.ts +10 -0
  26. package/dist/store/backends/local.d.ts.map +1 -0
  27. package/dist/store/backends/local.js +31 -0
  28. package/dist/store/backends/local.js.map +1 -0
  29. package/dist/store/backends/types.d.ts +25 -0
  30. package/dist/store/backends/types.d.ts.map +1 -0
  31. package/dist/store/backends/types.js +2 -0
  32. package/dist/store/backends/types.js.map +1 -0
  33. package/dist/store/file-store.d.ts +21 -0
  34. package/dist/store/file-store.d.ts.map +1 -0
  35. package/dist/store/file-store.js +169 -0
  36. package/dist/store/file-store.js.map +1 -0
  37. package/dist/store/filters.d.ts +4 -0
  38. package/dist/store/filters.d.ts.map +1 -0
  39. package/dist/store/filters.js +73 -0
  40. package/dist/store/filters.js.map +1 -0
  41. package/dist/store/read-store.d.ts +35 -0
  42. package/dist/store/read-store.d.ts.map +1 -0
  43. package/dist/store/read-store.js +256 -0
  44. package/dist/store/read-store.js.map +1 -0
  45. package/dist/store/time.d.ts +4 -0
  46. package/dist/store/time.d.ts.map +1 -0
  47. package/dist/store/time.js +47 -0
  48. package/dist/store/time.js.map +1 -0
  49. package/package.json +38 -0
  50. package/src/config.ts +210 -0
  51. package/src/index.ts +6 -0
  52. package/src/redact.ts +83 -0
  53. package/src/schema.ts +130 -0
  54. package/src/store/backends/cloudwatch.ts +373 -0
  55. package/src/store/backends/k8s.ts +400 -0
  56. package/src/store/backends/local.ts +47 -0
  57. package/src/store/backends/types.ts +18 -0
  58. package/src/store/file-store.ts +217 -0
  59. package/src/store/filters.ts +83 -0
  60. package/src/store/read-store.ts +340 -0
  61. package/src/store/time.ts +54 -0
  62. package/tsconfig.json +19 -0
@@ -0,0 +1,302 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { createRequire } from "node:module";
3
+ import { eventMatches, normalizeLevel } from "../filters.js";
4
+ import { normalizeTimestamp, parseTimeInput } from "../time.js";
5
+ const inferLevel = (message) => {
6
+ const text = message?.toLowerCase() ?? "";
7
+ if (text.includes("fatal")) {
8
+ return "fatal";
9
+ }
10
+ if (text.includes("error")) {
11
+ return "error";
12
+ }
13
+ if (text.includes("warn")) {
14
+ return "warn";
15
+ }
16
+ if (text.includes("debug")) {
17
+ return "debug";
18
+ }
19
+ if (text.includes("trace")) {
20
+ return "trace";
21
+ }
22
+ return "info";
23
+ };
24
+ const deriveService = (logGroup) => {
25
+ const trimmed = logGroup.trim();
26
+ const parts = trimmed.split("/");
27
+ const last = parts[parts.length - 1];
28
+ return last && last.length > 0 ? last : trimmed;
29
+ };
30
+ const isGuckLikeObject = (value) => {
31
+ const keys = [
32
+ "id",
33
+ "ts",
34
+ "level",
35
+ "type",
36
+ "service",
37
+ "run_id",
38
+ "session_id",
39
+ "message",
40
+ "data",
41
+ "tags",
42
+ "trace_id",
43
+ "span_id",
44
+ "source",
45
+ ];
46
+ return keys.some((key) => key in value);
47
+ };
48
+ const extractTags = (value) => {
49
+ if (!value || typeof value !== "object") {
50
+ return undefined;
51
+ }
52
+ const record = {};
53
+ for (const [key, entry] of Object.entries(value)) {
54
+ if (typeof entry === "string") {
55
+ record[key] = entry;
56
+ }
57
+ }
58
+ return Object.keys(record).length > 0 ? record : undefined;
59
+ };
60
+ const extractData = (value, fallbackMessage) => {
61
+ if (value.data && typeof value.data === "object" && value.data !== null) {
62
+ return value.data;
63
+ }
64
+ const knownKeys = new Set([
65
+ "id",
66
+ "ts",
67
+ "level",
68
+ "type",
69
+ "service",
70
+ "run_id",
71
+ "session_id",
72
+ "message",
73
+ "data",
74
+ "tags",
75
+ "trace_id",
76
+ "span_id",
77
+ "source",
78
+ ]);
79
+ const extra = {};
80
+ for (const [key, entry] of Object.entries(value)) {
81
+ if (!knownKeys.has(key)) {
82
+ extra[key] = entry;
83
+ }
84
+ }
85
+ if (Object.keys(extra).length === 0) {
86
+ return fallbackMessage ? { raw_message: fallbackMessage } : undefined;
87
+ }
88
+ return extra;
89
+ };
90
+ const normalizeSource = (source, backendId) => {
91
+ const base = source && typeof source === "object" ? source : {};
92
+ return {
93
+ ...base,
94
+ kind: "mcp",
95
+ backend: "cloudwatch",
96
+ backend_id: backendId ?? base.backend_id,
97
+ };
98
+ };
99
+ const toEvent = (config, logEvent) => {
100
+ const rawMessage = logEvent.message ?? "";
101
+ const trimmed = rawMessage.trim();
102
+ const parsedTs = logEvent.timestamp ? new Date(logEvent.timestamp).toISOString() : new Date().toISOString();
103
+ const id = logEvent.eventId ?? randomUUID();
104
+ const service = config.service ?? deriveService(config.logGroup);
105
+ const runId = logEvent.logStreamName ?? logEvent.eventId ?? id;
106
+ const fallback = {
107
+ id,
108
+ ts: parsedTs,
109
+ level: inferLevel(rawMessage),
110
+ type: "log",
111
+ service,
112
+ run_id: runId,
113
+ message: rawMessage,
114
+ data: { logStreamName: logEvent.logStreamName, raw_message: rawMessage },
115
+ source: normalizeSource(undefined, config.id),
116
+ };
117
+ if (!trimmed.startsWith("{")) {
118
+ return fallback;
119
+ }
120
+ try {
121
+ const parsed = JSON.parse(trimmed);
122
+ if (!parsed || typeof parsed !== "object") {
123
+ return fallback;
124
+ }
125
+ const record = parsed;
126
+ if (!isGuckLikeObject(record)) {
127
+ return fallback;
128
+ }
129
+ const level = normalizeLevel(record.level) ?? inferLevel(rawMessage);
130
+ const message = typeof record.message === "string" ? record.message : rawMessage || undefined;
131
+ const source = normalizeSource(record.source, config.id);
132
+ return {
133
+ id: typeof record.id === "string" ? record.id : id,
134
+ ts: typeof record.ts === "string" ? record.ts : parsedTs,
135
+ level,
136
+ type: typeof record.type === "string" ? record.type : "log",
137
+ service: typeof record.service === "string" ? record.service : service,
138
+ run_id: typeof record.run_id === "string" ? record.run_id : runId,
139
+ session_id: typeof record.session_id === "string" ? record.session_id : undefined,
140
+ message,
141
+ data: extractData(record, rawMessage),
142
+ tags: extractTags(record.tags),
143
+ trace_id: typeof record.trace_id === "string" ? record.trace_id : undefined,
144
+ span_id: typeof record.span_id === "string" ? record.span_id : undefined,
145
+ source,
146
+ };
147
+ }
148
+ catch {
149
+ return fallback;
150
+ }
151
+ };
152
+ const requireModule = createRequire(import.meta.url);
153
+ const loadSdk = () => {
154
+ try {
155
+ return requireModule("@aws-sdk/client-cloudwatch-logs");
156
+ }
157
+ catch {
158
+ throw new Error("CloudWatch backend requires @aws-sdk/client-cloudwatch-logs. Install it to enable this backend.");
159
+ }
160
+ };
161
+ const loadCredentialProviders = () => {
162
+ try {
163
+ return requireModule("@aws-sdk/credential-providers");
164
+ }
165
+ catch {
166
+ throw new Error("CloudWatch backend requires @aws-sdk/credential-providers when using profile override.");
167
+ }
168
+ };
169
+ export const createCloudWatchBackend = (config) => {
170
+ let client = null;
171
+ let FilterLogEventsCommand = null;
172
+ const getClient = () => {
173
+ if (client && FilterLogEventsCommand) {
174
+ return { client, FilterLogEventsCommand };
175
+ }
176
+ const sdk = loadSdk();
177
+ FilterLogEventsCommand = sdk.FilterLogEventsCommand;
178
+ const credentials = config.profile
179
+ ? loadCredentialProviders().fromIni({ profile: config.profile })
180
+ : undefined;
181
+ const sdkClient = new sdk.CloudWatchLogsClient({
182
+ region: config.region,
183
+ credentials,
184
+ });
185
+ client = {
186
+ send: (command) => sdkClient.send(command),
187
+ };
188
+ return { client, FilterLogEventsCommand };
189
+ };
190
+ const fetchEvents = async (params) => {
191
+ const { client, FilterLogEventsCommand } = getClient();
192
+ const limit = params.limit ?? 200;
193
+ const sinceMs = params.since ? parseTimeInput(params.since) : undefined;
194
+ const untilMs = params.until ? parseTimeInput(params.until) : undefined;
195
+ const events = [];
196
+ let truncated = false;
197
+ let nextToken = undefined;
198
+ do {
199
+ const remaining = Math.max(limit - events.length, 1);
200
+ const response = await client.send(new FilterLogEventsCommand({
201
+ logGroupName: config.logGroup,
202
+ startTime: sinceMs,
203
+ endTime: untilMs,
204
+ nextToken,
205
+ limit: Math.min(remaining, 10000),
206
+ }));
207
+ const batch = response.events ?? [];
208
+ for (const logEvent of batch) {
209
+ const event = toEvent(config, logEvent);
210
+ if (!eventMatches(event, params, sinceMs, untilMs)) {
211
+ continue;
212
+ }
213
+ events.push(event);
214
+ if (events.length >= limit) {
215
+ truncated = true;
216
+ break;
217
+ }
218
+ }
219
+ const receivedToken = response.nextToken;
220
+ if (receivedToken && receivedToken === nextToken) {
221
+ break;
222
+ }
223
+ nextToken = receivedToken;
224
+ } while (nextToken && !truncated);
225
+ if (nextToken) {
226
+ truncated = true;
227
+ }
228
+ return { events, truncated };
229
+ };
230
+ const stats = async (params) => {
231
+ const searchParams = {
232
+ service: params.service,
233
+ session_id: params.session_id,
234
+ since: params.since,
235
+ until: params.until,
236
+ limit: params.limit ?? 1000,
237
+ };
238
+ const result = await fetchEvents(searchParams);
239
+ const buckets = new Map();
240
+ for (const event of result.events) {
241
+ let key = "unknown";
242
+ if (params.group_by === "type") {
243
+ key = event.type;
244
+ }
245
+ else if (params.group_by === "level") {
246
+ key = event.level;
247
+ }
248
+ else if (params.group_by === "stage") {
249
+ const stage = event.data?.stage;
250
+ key = typeof stage === "string" ? stage : "unknown";
251
+ }
252
+ buckets.set(key, (buckets.get(key) ?? 0) + 1);
253
+ }
254
+ const limit = params.limit ?? 200;
255
+ const sorted = [...buckets.entries()]
256
+ .sort((a, b) => b[1] - a[1])
257
+ .slice(0, limit)
258
+ .map(([key, count]) => ({ key, count }));
259
+ return { buckets: sorted };
260
+ };
261
+ const sessions = async (params) => {
262
+ const searchParams = {
263
+ service: params.service,
264
+ since: params.since,
265
+ limit: params.limit ?? 1000,
266
+ };
267
+ const result = await fetchEvents(searchParams);
268
+ const sessions = new Map();
269
+ for (const event of result.events) {
270
+ if (!event.session_id) {
271
+ continue;
272
+ }
273
+ const existing = sessions.get(event.session_id) ?? {
274
+ session_id: event.session_id,
275
+ last_ts: event.ts,
276
+ event_count: 0,
277
+ error_count: 0,
278
+ };
279
+ existing.event_count += 1;
280
+ if (event.level === "error" || event.level === "fatal") {
281
+ existing.error_count += 1;
282
+ }
283
+ const existingTs = normalizeTimestamp(existing.last_ts) ?? 0;
284
+ const eventTs = normalizeTimestamp(event.ts) ?? 0;
285
+ if (eventTs > existingTs) {
286
+ existing.last_ts = event.ts;
287
+ }
288
+ sessions.set(event.session_id, existing);
289
+ }
290
+ const limit = params.limit ?? 200;
291
+ const sorted = [...sessions.values()]
292
+ .sort((a, b) => (normalizeTimestamp(b.last_ts) ?? 0) - (normalizeTimestamp(a.last_ts) ?? 0))
293
+ .slice(0, limit);
294
+ return { sessions: sorted };
295
+ };
296
+ return {
297
+ search: fetchEvents,
298
+ stats,
299
+ sessions,
300
+ };
301
+ };
302
+ //# sourceMappingURL=cloudwatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudwatch.js","sourceRoot":"","sources":["../../../src/store/backends/cloudwatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { GuckK8sReadBackendConfig } from "../../schema.js";
2
+ import { ReadBackend } from "./types.js";
3
+ export declare const createK8sBackend: (config: GuckK8sReadBackendConfig) => ReadBackend;
4
+ //# sourceMappingURL=k8s.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s.d.ts","sourceRoot":"","sources":["../../../src/store/backends/k8s.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAA6C,MAAM,YAAY,CAAC;AAmPpF,eAAO,MAAM,gBAAgB,WAAY,wBAAwB,KAAG,WAiJnE,CAAC"}
@@ -0,0 +1,307 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { createRequire } from "node:module";
3
+ import { eventMatches, normalizeLevel } from "../filters.js";
4
+ import { normalizeTimestamp, parseTimeInput } from "../time.js";
5
+ const inferLevel = (message) => {
6
+ const text = message?.toLowerCase() ?? "";
7
+ if (text.includes("fatal")) {
8
+ return "fatal";
9
+ }
10
+ if (text.includes("error")) {
11
+ return "error";
12
+ }
13
+ if (text.includes("warn")) {
14
+ return "warn";
15
+ }
16
+ if (text.includes("debug")) {
17
+ return "debug";
18
+ }
19
+ if (text.includes("trace")) {
20
+ return "trace";
21
+ }
22
+ return "info";
23
+ };
24
+ const deriveService = (selector) => {
25
+ const first = selector.split(",")[0]?.trim();
26
+ if (!first) {
27
+ return undefined;
28
+ }
29
+ const parts = first.split("=");
30
+ if (parts.length === 2 && parts[1]) {
31
+ return parts[1].trim();
32
+ }
33
+ return undefined;
34
+ };
35
+ const isGuckLikeObject = (value) => {
36
+ const keys = [
37
+ "id",
38
+ "ts",
39
+ "level",
40
+ "type",
41
+ "service",
42
+ "run_id",
43
+ "session_id",
44
+ "message",
45
+ "data",
46
+ "tags",
47
+ "trace_id",
48
+ "span_id",
49
+ "source",
50
+ ];
51
+ return keys.some((key) => key in value);
52
+ };
53
+ const extractTags = (value) => {
54
+ if (!value || typeof value !== "object") {
55
+ return undefined;
56
+ }
57
+ const record = {};
58
+ for (const [key, entry] of Object.entries(value)) {
59
+ if (typeof entry === "string") {
60
+ record[key] = entry;
61
+ }
62
+ }
63
+ return Object.keys(record).length > 0 ? record : undefined;
64
+ };
65
+ const extractData = (value, fallback) => {
66
+ if (value.data && typeof value.data === "object" && value.data !== null) {
67
+ return value.data;
68
+ }
69
+ const knownKeys = new Set([
70
+ "id",
71
+ "ts",
72
+ "level",
73
+ "type",
74
+ "service",
75
+ "run_id",
76
+ "session_id",
77
+ "message",
78
+ "data",
79
+ "tags",
80
+ "trace_id",
81
+ "span_id",
82
+ "source",
83
+ ]);
84
+ const extra = {};
85
+ for (const [key, entry] of Object.entries(value)) {
86
+ if (!knownKeys.has(key)) {
87
+ extra[key] = entry;
88
+ }
89
+ }
90
+ if (Object.keys(extra).length === 0) {
91
+ return fallback;
92
+ }
93
+ return extra;
94
+ };
95
+ const normalizeSource = (source, backendId) => {
96
+ const base = source && typeof source === "object" ? source : {};
97
+ return {
98
+ ...base,
99
+ kind: "mcp",
100
+ backend: "k8s",
101
+ backend_id: backendId ?? base.backend_id,
102
+ };
103
+ };
104
+ const toEvent = (config, message, ts, pod, container) => {
105
+ const trimmed = message.trim();
106
+ const service = config.service ?? deriveService(config.selector) ?? "k8s";
107
+ const runId = pod;
108
+ const fallbackData = { pod, container, raw_message: message };
109
+ const fallback = {
110
+ id: randomUUID(),
111
+ ts,
112
+ level: inferLevel(message),
113
+ type: "log",
114
+ service,
115
+ run_id: runId,
116
+ message,
117
+ data: fallbackData,
118
+ source: normalizeSource(undefined, config.id),
119
+ };
120
+ if (!trimmed.startsWith("{")) {
121
+ return fallback;
122
+ }
123
+ try {
124
+ const parsed = JSON.parse(trimmed);
125
+ if (!parsed || typeof parsed !== "object") {
126
+ return fallback;
127
+ }
128
+ const record = parsed;
129
+ if (!isGuckLikeObject(record)) {
130
+ return fallback;
131
+ }
132
+ const level = normalizeLevel(record.level) ?? inferLevel(message);
133
+ const eventMessage = typeof record.message === "string" ? record.message : message;
134
+ const source = normalizeSource(record.source, config.id);
135
+ return {
136
+ id: typeof record.id === "string" ? record.id : fallback.id,
137
+ ts: typeof record.ts === "string" ? record.ts : ts,
138
+ level,
139
+ type: typeof record.type === "string" ? record.type : "log",
140
+ service: typeof record.service === "string" ? record.service : service,
141
+ run_id: typeof record.run_id === "string" ? record.run_id : runId,
142
+ session_id: typeof record.session_id === "string" ? record.session_id : undefined,
143
+ message: eventMessage,
144
+ data: extractData(record, fallbackData),
145
+ tags: extractTags(record.tags),
146
+ trace_id: typeof record.trace_id === "string" ? record.trace_id : undefined,
147
+ span_id: typeof record.span_id === "string" ? record.span_id : undefined,
148
+ source,
149
+ };
150
+ }
151
+ catch {
152
+ return fallback;
153
+ }
154
+ };
155
+ const requireModule = createRequire(import.meta.url);
156
+ const loadClient = (context) => {
157
+ let module;
158
+ try {
159
+ module = requireModule("@kubernetes/client-node");
160
+ }
161
+ catch {
162
+ throw new Error("Kubernetes backend requires @kubernetes/client-node. Install it to enable this backend.");
163
+ }
164
+ const { KubeConfig, CoreV1Api } = module;
165
+ const kc = new KubeConfig();
166
+ kc.loadFromDefault();
167
+ if (context) {
168
+ kc.setCurrentContext(context);
169
+ }
170
+ const client = kc.makeApiClient(CoreV1Api);
171
+ return client;
172
+ };
173
+ const parseLogLine = (line) => {
174
+ const trimmed = line.trim();
175
+ if (!trimmed) {
176
+ return { ts: new Date().toISOString(), message: "" };
177
+ }
178
+ const space = trimmed.indexOf(" ");
179
+ if (space > 0) {
180
+ const possibleTs = trimmed.slice(0, space);
181
+ const parsed = Date.parse(possibleTs);
182
+ if (!Number.isNaN(parsed)) {
183
+ return { ts: new Date(parsed).toISOString(), message: trimmed.slice(space + 1) };
184
+ }
185
+ }
186
+ return { ts: new Date().toISOString(), message: trimmed };
187
+ };
188
+ export const createK8sBackend = (config) => {
189
+ let client = null;
190
+ const getClient = () => {
191
+ if (!client) {
192
+ client = loadClient(config.context);
193
+ }
194
+ return client;
195
+ };
196
+ const fetchEvents = async (params) => {
197
+ const client = getClient();
198
+ const sinceMs = params.since ? parseTimeInput(params.since) : undefined;
199
+ const untilMs = params.until ? parseTimeInput(params.until) : undefined;
200
+ const sinceSeconds = sinceMs && sinceMs < Date.now()
201
+ ? Math.max(1, Math.floor((Date.now() - sinceMs) / 1000))
202
+ : undefined;
203
+ const limit = params.limit ?? 200;
204
+ const events = [];
205
+ let truncated = false;
206
+ const pods = await client.listNamespacedPod(config.namespace, undefined, undefined, undefined, undefined, config.selector);
207
+ for (const pod of pods.body.items) {
208
+ const podName = pod.metadata?.name;
209
+ if (!podName) {
210
+ continue;
211
+ }
212
+ const response = await client.readNamespacedPodLog(podName, config.namespace, config.container, false, undefined, undefined, sinceSeconds, undefined, true);
213
+ const lines = response.body.split(/\r?\n/);
214
+ for (const line of lines) {
215
+ if (!line.trim()) {
216
+ continue;
217
+ }
218
+ const { ts, message } = parseLogLine(line);
219
+ const event = toEvent(config, message, ts, podName, config.container);
220
+ if (!eventMatches(event, params, sinceMs, untilMs)) {
221
+ continue;
222
+ }
223
+ events.push(event);
224
+ if (events.length >= limit) {
225
+ truncated = true;
226
+ break;
227
+ }
228
+ }
229
+ if (truncated) {
230
+ break;
231
+ }
232
+ }
233
+ return { events, truncated };
234
+ };
235
+ const stats = async (params) => {
236
+ const searchParams = {
237
+ service: params.service,
238
+ session_id: params.session_id,
239
+ since: params.since,
240
+ until: params.until,
241
+ limit: params.limit ?? 1000,
242
+ };
243
+ const result = await fetchEvents(searchParams);
244
+ const buckets = new Map();
245
+ for (const event of result.events) {
246
+ let key = "unknown";
247
+ if (params.group_by === "type") {
248
+ key = event.type;
249
+ }
250
+ else if (params.group_by === "level") {
251
+ key = event.level;
252
+ }
253
+ else if (params.group_by === "stage") {
254
+ const stage = event.data?.stage;
255
+ key = typeof stage === "string" ? stage : "unknown";
256
+ }
257
+ buckets.set(key, (buckets.get(key) ?? 0) + 1);
258
+ }
259
+ const limit = params.limit ?? 200;
260
+ const sorted = [...buckets.entries()]
261
+ .sort((a, b) => b[1] - a[1])
262
+ .slice(0, limit)
263
+ .map(([key, count]) => ({ key, count }));
264
+ return { buckets: sorted };
265
+ };
266
+ const sessions = async (params) => {
267
+ const searchParams = {
268
+ service: params.service,
269
+ since: params.since,
270
+ limit: params.limit ?? 1000,
271
+ };
272
+ const result = await fetchEvents(searchParams);
273
+ const sessions = new Map();
274
+ for (const event of result.events) {
275
+ if (!event.session_id) {
276
+ continue;
277
+ }
278
+ const existing = sessions.get(event.session_id) ?? {
279
+ session_id: event.session_id,
280
+ last_ts: event.ts,
281
+ event_count: 0,
282
+ error_count: 0,
283
+ };
284
+ existing.event_count += 1;
285
+ if (event.level === "error" || event.level === "fatal") {
286
+ existing.error_count += 1;
287
+ }
288
+ const existingTs = normalizeTimestamp(existing.last_ts) ?? 0;
289
+ const eventTs = normalizeTimestamp(event.ts) ?? 0;
290
+ if (eventTs > existingTs) {
291
+ existing.last_ts = event.ts;
292
+ }
293
+ sessions.set(event.session_id, existing);
294
+ }
295
+ const limit = params.limit ?? 200;
296
+ const sorted = [...sessions.values()]
297
+ .sort((a, b) => (normalizeTimestamp(b.last_ts) ?? 0) - (normalizeTimestamp(a.last_ts) ?? 0))
298
+ .slice(0, limit);
299
+ return { sessions: sorted };
300
+ };
301
+ return {
302
+ search: fetchEvents,
303
+ stats,
304
+ sessions,
305
+ };
306
+ };
307
+ //# sourceMappingURL=k8s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8s.js","sourceRoot":"","sources":["../../../src/store/backends/k8s.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { GuckConfig } from "../../schema.js";
2
+ import { ReadBackend } from "./types.js";
3
+ type LocalBackendOptions = {
4
+ storeDir: string;
5
+ config: GuckConfig;
6
+ backendId?: string;
7
+ };
8
+ export declare const createLocalBackend: (options: LocalBackendOptions) => ReadBackend;
9
+ export {};
10
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/store/backends/local.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAKX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAA6C,MAAM,YAAY,CAAC;AAEpF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAcF,eAAO,MAAM,kBAAkB,YAAa,mBAAmB,KAAG,WAkBjE,CAAC"}