@insureco/cli 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 (174) hide show
  1. package/README.md +168 -0
  2. package/dist/commands/backup.d.ts +11 -0
  3. package/dist/commands/backup.d.ts.map +1 -0
  4. package/dist/commands/backup.js +112 -0
  5. package/dist/commands/backup.js.map +1 -0
  6. package/dist/commands/config.d.ts +10 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +41 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/deploy.d.ts +16 -0
  11. package/dist/commands/deploy.d.ts.map +1 -0
  12. package/dist/commands/deploy.js +219 -0
  13. package/dist/commands/deploy.js.map +1 -0
  14. package/dist/commands/destroy.d.ts +12 -0
  15. package/dist/commands/destroy.d.ts.map +1 -0
  16. package/dist/commands/destroy.js +62 -0
  17. package/dist/commands/destroy.js.map +1 -0
  18. package/dist/commands/env.d.ts +7 -0
  19. package/dist/commands/env.d.ts.map +1 -0
  20. package/dist/commands/env.js +42 -0
  21. package/dist/commands/env.js.map +1 -0
  22. package/dist/commands/init-ai.d.ts +7 -0
  23. package/dist/commands/init-ai.d.ts.map +1 -0
  24. package/dist/commands/init-ai.js +257 -0
  25. package/dist/commands/init-ai.js.map +1 -0
  26. package/dist/commands/init.d.ts +8 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +228 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/link.d.ts +10 -0
  31. package/dist/commands/link.d.ts.map +1 -0
  32. package/dist/commands/link.js +193 -0
  33. package/dist/commands/link.js.map +1 -0
  34. package/dist/commands/login.d.ts +8 -0
  35. package/dist/commands/login.d.ts.map +1 -0
  36. package/dist/commands/login.js +164 -0
  37. package/dist/commands/login.js.map +1 -0
  38. package/dist/commands/logs.d.ts +16 -0
  39. package/dist/commands/logs.d.ts.map +1 -0
  40. package/dist/commands/logs.js +362 -0
  41. package/dist/commands/logs.js.map +1 -0
  42. package/dist/commands/preflight.d.ts +8 -0
  43. package/dist/commands/preflight.d.ts.map +1 -0
  44. package/dist/commands/preflight.js +188 -0
  45. package/dist/commands/preflight.js.map +1 -0
  46. package/dist/commands/program.d.ts +7 -0
  47. package/dist/commands/program.d.ts.map +1 -0
  48. package/dist/commands/program.js +59 -0
  49. package/dist/commands/program.js.map +1 -0
  50. package/dist/commands/push.d.ts +12 -0
  51. package/dist/commands/push.d.ts.map +1 -0
  52. package/dist/commands/push.js +171 -0
  53. package/dist/commands/push.js.map +1 -0
  54. package/dist/commands/register.d.ts +7 -0
  55. package/dist/commands/register.d.ts.map +1 -0
  56. package/dist/commands/register.js +124 -0
  57. package/dist/commands/register.js.map +1 -0
  58. package/dist/commands/rollback.d.ts +11 -0
  59. package/dist/commands/rollback.d.ts.map +1 -0
  60. package/dist/commands/rollback.js +172 -0
  61. package/dist/commands/rollback.js.map +1 -0
  62. package/dist/commands/sample.d.ts +11 -0
  63. package/dist/commands/sample.d.ts.map +1 -0
  64. package/dist/commands/sample.js +114 -0
  65. package/dist/commands/sample.js.map +1 -0
  66. package/dist/commands/services.d.ts +13 -0
  67. package/dist/commands/services.d.ts.map +1 -0
  68. package/dist/commands/services.js +95 -0
  69. package/dist/commands/services.js.map +1 -0
  70. package/dist/commands/status.d.ts +9 -0
  71. package/dist/commands/status.d.ts.map +1 -0
  72. package/dist/commands/status.js +170 -0
  73. package/dist/commands/status.js.map +1 -0
  74. package/dist/commands/troubleshoot.d.ts +19 -0
  75. package/dist/commands/troubleshoot.d.ts.map +1 -0
  76. package/dist/commands/troubleshoot.js +465 -0
  77. package/dist/commands/troubleshoot.js.map +1 -0
  78. package/dist/commands/versions.d.ts +16 -0
  79. package/dist/commands/versions.d.ts.map +1 -0
  80. package/dist/commands/versions.js +162 -0
  81. package/dist/commands/versions.js.map +1 -0
  82. package/dist/index.d.ts +3 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +294 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/lib/ai/client.d.ts +36 -0
  87. package/dist/lib/ai/client.d.ts.map +1 -0
  88. package/dist/lib/ai/client.js +140 -0
  89. package/dist/lib/ai/client.js.map +1 -0
  90. package/dist/lib/ai/generator.d.ts +17 -0
  91. package/dist/lib/ai/generator.d.ts.map +1 -0
  92. package/dist/lib/ai/generator.js +338 -0
  93. package/dist/lib/ai/generator.js.map +1 -0
  94. package/dist/lib/ai/prompts.d.ts +47 -0
  95. package/dist/lib/ai/prompts.d.ts.map +1 -0
  96. package/dist/lib/ai/prompts.js +247 -0
  97. package/dist/lib/ai/prompts.js.map +1 -0
  98. package/dist/lib/ai/scanner.d.ts +50 -0
  99. package/dist/lib/ai/scanner.d.ts.map +1 -0
  100. package/dist/lib/ai/scanner.js +237 -0
  101. package/dist/lib/ai/scanner.js.map +1 -0
  102. package/dist/lib/api.d.ts +18 -0
  103. package/dist/lib/api.d.ts.map +1 -0
  104. package/dist/lib/api.js +67 -0
  105. package/dist/lib/api.js.map +1 -0
  106. package/dist/lib/builder.d.ts +34 -0
  107. package/dist/lib/builder.d.ts.map +1 -0
  108. package/dist/lib/builder.js +132 -0
  109. package/dist/lib/builder.js.map +1 -0
  110. package/dist/lib/config.d.ts +20 -0
  111. package/dist/lib/config.d.ts.map +1 -0
  112. package/dist/lib/config.js +124 -0
  113. package/dist/lib/config.js.map +1 -0
  114. package/dist/lib/output.d.ts +12 -0
  115. package/dist/lib/output.d.ts.map +1 -0
  116. package/dist/lib/output.js +39 -0
  117. package/dist/lib/output.js.map +1 -0
  118. package/dist/lib/scaffold.d.ts +29 -0
  119. package/dist/lib/scaffold.d.ts.map +1 -0
  120. package/dist/lib/scaffold.js +166 -0
  121. package/dist/lib/scaffold.js.map +1 -0
  122. package/dist/lib/troubleshoot/analyzer.d.ts +14 -0
  123. package/dist/lib/troubleshoot/analyzer.d.ts.map +1 -0
  124. package/dist/lib/troubleshoot/analyzer.js +541 -0
  125. package/dist/lib/troubleshoot/analyzer.js.map +1 -0
  126. package/dist/lib/troubleshoot/auto-fix.d.ts +29 -0
  127. package/dist/lib/troubleshoot/auto-fix.d.ts.map +1 -0
  128. package/dist/lib/troubleshoot/auto-fix.js +373 -0
  129. package/dist/lib/troubleshoot/auto-fix.js.map +1 -0
  130. package/dist/lib/troubleshoot/index.d.ts +5 -0
  131. package/dist/lib/troubleshoot/index.d.ts.map +1 -0
  132. package/dist/lib/troubleshoot/index.js +6 -0
  133. package/dist/lib/troubleshoot/index.js.map +1 -0
  134. package/dist/lib/troubleshoot/log-fetcher.d.ts +43 -0
  135. package/dist/lib/troubleshoot/log-fetcher.d.ts.map +1 -0
  136. package/dist/lib/troubleshoot/log-fetcher.js +431 -0
  137. package/dist/lib/troubleshoot/log-fetcher.js.map +1 -0
  138. package/dist/lib/troubleshoot/redactor.d.ts +35 -0
  139. package/dist/lib/troubleshoot/redactor.d.ts.map +1 -0
  140. package/dist/lib/troubleshoot/redactor.js +208 -0
  141. package/dist/lib/troubleshoot/redactor.js.map +1 -0
  142. package/dist/lib/validators/catalog-validator.d.ts +3 -0
  143. package/dist/lib/validators/catalog-validator.d.ts.map +1 -0
  144. package/dist/lib/validators/catalog-validator.js +205 -0
  145. package/dist/lib/validators/catalog-validator.js.map +1 -0
  146. package/dist/lib/validators/dockerfile-validator.d.ts +4 -0
  147. package/dist/lib/validators/dockerfile-validator.d.ts.map +1 -0
  148. package/dist/lib/validators/dockerfile-validator.js +262 -0
  149. package/dist/lib/validators/dockerfile-validator.js.map +1 -0
  150. package/dist/lib/validators/env-validator.d.ts +3 -0
  151. package/dist/lib/validators/env-validator.d.ts.map +1 -0
  152. package/dist/lib/validators/env-validator.js +268 -0
  153. package/dist/lib/validators/env-validator.js.map +1 -0
  154. package/dist/lib/validators/git-validator.d.ts +3 -0
  155. package/dist/lib/validators/git-validator.d.ts.map +1 -0
  156. package/dist/lib/validators/git-validator.js +236 -0
  157. package/dist/lib/validators/git-validator.js.map +1 -0
  158. package/dist/lib/validators/health-detector.d.ts +4 -0
  159. package/dist/lib/validators/health-detector.d.ts.map +1 -0
  160. package/dist/lib/validators/health-detector.js +159 -0
  161. package/dist/lib/validators/health-detector.js.map +1 -0
  162. package/dist/lib/validators/index.d.ts +7 -0
  163. package/dist/lib/validators/index.d.ts.map +1 -0
  164. package/dist/lib/validators/index.js +7 -0
  165. package/dist/lib/validators/index.js.map +1 -0
  166. package/dist/lib/validators/route-validator.d.ts +3 -0
  167. package/dist/lib/validators/route-validator.d.ts.map +1 -0
  168. package/dist/lib/validators/route-validator.js +238 -0
  169. package/dist/lib/validators/route-validator.js.map +1 -0
  170. package/dist/types/index.d.ts +455 -0
  171. package/dist/types/index.d.ts.map +1 -0
  172. package/dist/types/index.js +37 -0
  173. package/dist/types/index.js.map +1 -0
  174. package/package.json +58 -0
@@ -0,0 +1,431 @@
1
+ import { execSync, spawn } from 'node:child_process';
2
+ import { loadConfig, expandPath } from '../config.js';
3
+ import { KokoClient } from '../api.js';
4
+ import { redactLogs } from './redactor.js';
5
+ const JANUS_SERVICE = 'janus';
6
+ const DEFAULT_TAIL_LINES = 500;
7
+ /**
8
+ * Get kubeconfig path from config
9
+ */
10
+ async function getKubeconfigPath() {
11
+ const config = await loadConfig();
12
+ return expandPath(config.kubeconfig || '~/.kube/config');
13
+ }
14
+ /**
15
+ * Build namespace from service name and environment
16
+ */
17
+ function buildNamespace(serviceName, environment) {
18
+ return `${serviceName}-${environment}`;
19
+ }
20
+ /**
21
+ * Get pods for a service in a namespace
22
+ */
23
+ async function getPods(namespace, serviceName) {
24
+ const kubeconfigPath = await getKubeconfigPath();
25
+ // Try multiple label selectors
26
+ const labelSelectors = [
27
+ `app.kubernetes.io/name=${serviceName}`,
28
+ `app=${serviceName}`,
29
+ `app.kubernetes.io/instance=${serviceName}`,
30
+ ];
31
+ for (const selector of labelSelectors) {
32
+ try {
33
+ const output = execSync(`kubectl get pods -n ${namespace} -l ${selector} -o json --kubeconfig=${kubeconfigPath}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
34
+ const result = JSON.parse(output);
35
+ if (result.items && result.items.length > 0) {
36
+ return result.items.map((pod) => ({
37
+ name: pod.metadata.name,
38
+ namespace: pod.metadata.namespace,
39
+ status: pod.status.phase,
40
+ }));
41
+ }
42
+ }
43
+ catch {
44
+ // Try next selector
45
+ }
46
+ }
47
+ // Fallback: get all pods in namespace
48
+ try {
49
+ const output = execSync(`kubectl get pods -n ${namespace} -o json --kubeconfig=${kubeconfigPath}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
50
+ const result = JSON.parse(output);
51
+ return result.items.map((pod) => ({
52
+ name: pod.metadata.name,
53
+ namespace: pod.metadata.namespace,
54
+ status: pod.status.phase,
55
+ }));
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ }
61
+ /**
62
+ * Get raw logs from a pod
63
+ */
64
+ async function getPodLogs(podName, namespace, tailLines, since) {
65
+ const kubeconfigPath = await getKubeconfigPath();
66
+ const args = [
67
+ 'logs',
68
+ '-n',
69
+ namespace,
70
+ podName,
71
+ `--tail=${tailLines}`,
72
+ `--kubeconfig=${kubeconfigPath}`,
73
+ ];
74
+ if (since) {
75
+ args.push(`--since=${since}`);
76
+ }
77
+ try {
78
+ const output = execSync(`kubectl ${args.join(' ')}`, {
79
+ encoding: 'utf-8',
80
+ stdio: ['pipe', 'pipe', 'pipe'],
81
+ });
82
+ return output;
83
+ }
84
+ catch (error) {
85
+ return `Error fetching logs: ${error instanceof Error ? error.message : 'Unknown error'}`;
86
+ }
87
+ }
88
+ /**
89
+ * Parse log lines into structured entries
90
+ */
91
+ function parseLogLines(rawLogs, serviceName) {
92
+ const lines = rawLogs.split('\n').filter(Boolean);
93
+ const entries = [];
94
+ for (const line of lines) {
95
+ try {
96
+ // Try to parse as JSON first (structured logs)
97
+ const parsed = JSON.parse(line);
98
+ entries.push({
99
+ timestamp: parsed.timestamp || parsed.time || new Date().toISOString(),
100
+ level: normalizeLogLevel(parsed.level || parsed.severity || 'info'),
101
+ message: parsed.msg || parsed.message || line,
102
+ service: serviceName,
103
+ traceId: parsed.traceId || parsed.trace_id,
104
+ spanId: parsed.spanId || parsed.span_id,
105
+ metadata: extractMetadata(parsed),
106
+ });
107
+ }
108
+ catch {
109
+ // Plain text log - try to extract timestamp and level
110
+ const timestampMatch = line.match(/^(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)/);
111
+ const levelMatch = line.match(/\b(DEBUG|INFO|WARN(?:ING)?|ERROR|FATAL|TRACE)\b/i);
112
+ entries.push({
113
+ timestamp: timestampMatch
114
+ ? timestampMatch[1]
115
+ : new Date().toISOString(),
116
+ level: levelMatch
117
+ ? normalizeLogLevel(levelMatch[1])
118
+ : 'info',
119
+ message: line,
120
+ service: serviceName,
121
+ });
122
+ }
123
+ }
124
+ return entries;
125
+ }
126
+ /**
127
+ * Normalize log level to standard values
128
+ */
129
+ function normalizeLogLevel(level) {
130
+ const normalized = level.toLowerCase();
131
+ switch (normalized) {
132
+ case 'debug':
133
+ case 'trace':
134
+ return 'debug';
135
+ case 'info':
136
+ return 'info';
137
+ case 'warn':
138
+ case 'warning':
139
+ return 'warn';
140
+ case 'error':
141
+ case 'err':
142
+ return 'error';
143
+ case 'fatal':
144
+ case 'critical':
145
+ case 'panic':
146
+ return 'fatal';
147
+ default:
148
+ return 'info';
149
+ }
150
+ }
151
+ /**
152
+ * Extract metadata from parsed log entry
153
+ */
154
+ function extractMetadata(parsed) {
155
+ const excludeFields = [
156
+ 'timestamp',
157
+ 'time',
158
+ 'level',
159
+ 'severity',
160
+ 'msg',
161
+ 'message',
162
+ 'traceId',
163
+ 'trace_id',
164
+ 'spanId',
165
+ 'span_id',
166
+ ];
167
+ const metadata = {};
168
+ for (const [key, value] of Object.entries(parsed)) {
169
+ if (!excludeFields.includes(key)) {
170
+ metadata[key] = value;
171
+ }
172
+ }
173
+ return Object.keys(metadata).length > 0 ? metadata : undefined;
174
+ }
175
+ /**
176
+ * Get Kubernetes events for a namespace
177
+ */
178
+ async function getKubernetesEvents(namespace) {
179
+ const kubeconfigPath = await getKubeconfigPath();
180
+ try {
181
+ const output = execSync(`kubectl get events -n ${namespace} -o json --kubeconfig=${kubeconfigPath}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
182
+ const result = JSON.parse(output);
183
+ return result.items.map((event) => ({
184
+ type: event.type,
185
+ reason: event.reason,
186
+ message: event.message,
187
+ firstTimestamp: event.firstTimestamp,
188
+ lastTimestamp: event.lastTimestamp,
189
+ }));
190
+ }
191
+ catch {
192
+ return [];
193
+ }
194
+ }
195
+ /**
196
+ * Get service dependencies from Koko
197
+ */
198
+ async function getServiceDependencies(serviceName) {
199
+ try {
200
+ const client = await KokoClient.create();
201
+ const result = await client.getService(serviceName);
202
+ if (!result.success || !result.data) {
203
+ return [];
204
+ }
205
+ const service = result.data;
206
+ const dependencies = [];
207
+ // Extract dependencies from routes (consumesApis)
208
+ if (service.routes) {
209
+ for (const route of service.routes) {
210
+ // Routes with service auth typically call other services
211
+ if (route.auth === 'service' && route.scopes) {
212
+ for (const scope of route.scopes) {
213
+ // Scopes are typically formatted as "read:service" or "write:service"
214
+ const match = scope.match(/(?:read|write|admin):(\w+)/);
215
+ if (match && match[1] !== serviceName) {
216
+ dependencies.push(match[1]);
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ return [...new Set(dependencies)];
223
+ }
224
+ catch {
225
+ return [];
226
+ }
227
+ }
228
+ /**
229
+ * Fetch Janus gateway logs for request tracing
230
+ */
231
+ async function fetchJanusLogs(traceId, tailLines) {
232
+ const namespace = 'iec-platform';
233
+ const pods = await getPods(namespace, JANUS_SERVICE);
234
+ if (pods.length === 0) {
235
+ return [];
236
+ }
237
+ const allEntries = [];
238
+ for (const pod of pods) {
239
+ const rawLogs = await getPodLogs(pod.name, namespace, tailLines);
240
+ const entries = parseLogLines(rawLogs, JANUS_SERVICE);
241
+ // If we have a trace ID, filter to only matching entries
242
+ if (traceId) {
243
+ const filtered = entries.filter((e) => e.traceId === traceId);
244
+ allEntries.push(...filtered);
245
+ }
246
+ else {
247
+ // Include recent error entries
248
+ const errorEntries = entries.filter((e) => e.level === 'error' || e.level === 'fatal' || e.level === 'warn');
249
+ allEntries.push(...errorEntries.slice(-50)); // Limit to last 50 errors
250
+ }
251
+ }
252
+ return allEntries;
253
+ }
254
+ /**
255
+ * Fetch logs from dependent services (redacted for privacy)
256
+ */
257
+ async function fetchDependencyLogs(dependencies, environment, tailLines) {
258
+ const allEntries = [];
259
+ for (const dep of dependencies) {
260
+ const namespace = buildNamespace(dep, environment);
261
+ const pods = await getPods(namespace, dep);
262
+ for (const pod of pods) {
263
+ const rawLogs = await getPodLogs(pod.name, namespace, Math.min(tailLines, 100));
264
+ const entries = parseLogLines(rawLogs, dep);
265
+ // Only include error summaries from dependent services
266
+ const errorEntries = entries.filter((e) => e.level === 'error' || e.level === 'fatal');
267
+ allEntries.push(...errorEntries.slice(-20)); // Limit per service
268
+ }
269
+ }
270
+ return allEntries;
271
+ }
272
+ /**
273
+ * Main function to fetch logs across services
274
+ */
275
+ export async function fetchLogs(config) {
276
+ const { serviceName, namespace: customNamespace, environment, tailLines = DEFAULT_TAIL_LINES, since, includeJanus = true, includeDependencies = true, } = config;
277
+ const namespace = customNamespace || buildNamespace(serviceName, environment);
278
+ const allEntries = [];
279
+ const services = new Set([serviceName]);
280
+ // Fetch own service logs (full access)
281
+ const pods = await getPods(namespace, serviceName);
282
+ for (const pod of pods) {
283
+ const rawLogs = await getPodLogs(pod.name, namespace, tailLines, since);
284
+ const entries = parseLogLines(rawLogs, serviceName);
285
+ allEntries.push(...entries);
286
+ }
287
+ // Extract trace IDs from own logs for correlation
288
+ const traceIds = allEntries
289
+ .filter((e) => e.traceId)
290
+ .map((e) => e.traceId)
291
+ .filter((id) => id !== undefined);
292
+ const uniqueTraceIds = [...new Set(traceIds)];
293
+ // Fetch Janus logs for request flow
294
+ if (includeJanus) {
295
+ services.add(JANUS_SERVICE);
296
+ const janusEntries = await fetchJanusLogs(uniqueTraceIds[0], // Use first trace ID if available
297
+ Math.min(tailLines, 200));
298
+ allEntries.push(...janusEntries);
299
+ }
300
+ // Fetch dependency logs
301
+ if (includeDependencies) {
302
+ const dependencies = await getServiceDependencies(serviceName);
303
+ for (const dep of dependencies) {
304
+ services.add(dep);
305
+ }
306
+ const depEntries = await fetchDependencyLogs(dependencies, environment, Math.min(tailLines, 100));
307
+ allEntries.push(...depEntries);
308
+ }
309
+ // Sort by timestamp
310
+ allEntries.sort((a, b) => {
311
+ const timeA = new Date(a.timestamp).getTime();
312
+ const timeB = new Date(b.timestamp).getTime();
313
+ return timeA - timeB;
314
+ });
315
+ // Redact sensitive data
316
+ const redactedEntries = redactLogs(allEntries, serviceName, {
317
+ allowedServices: [serviceName],
318
+ });
319
+ // Calculate time range
320
+ const startTime = redactedEntries.length > 0
321
+ ? redactedEntries[0].timestamp
322
+ : new Date().toISOString();
323
+ const endTime = redactedEntries.length > 0
324
+ ? redactedEntries[redactedEntries.length - 1].timestamp
325
+ : new Date().toISOString();
326
+ return {
327
+ entries: redactedEntries,
328
+ startTime,
329
+ endTime,
330
+ services: Array.from(services),
331
+ };
332
+ }
333
+ /**
334
+ * Get pod status information
335
+ */
336
+ export async function getPodStatus(serviceName, environment) {
337
+ const kubeconfigPath = await getKubeconfigPath();
338
+ const namespace = buildNamespace(serviceName, environment);
339
+ try {
340
+ const output = execSync(`kubectl get pods -n ${namespace} -o json --kubeconfig=${kubeconfigPath}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
341
+ const result = JSON.parse(output);
342
+ return result.items.map((pod) => {
343
+ const containerStatus = pod.status.containerStatuses?.[0];
344
+ let reason;
345
+ if (containerStatus?.state?.waiting) {
346
+ reason = containerStatus.state.waiting.reason;
347
+ }
348
+ else if (containerStatus?.state?.terminated) {
349
+ reason = containerStatus.state.terminated.reason;
350
+ }
351
+ return {
352
+ name: pod.metadata.name,
353
+ status: pod.status.phase,
354
+ restarts: containerStatus?.restartCount ?? 0,
355
+ ready: containerStatus?.ready ?? false,
356
+ reason,
357
+ };
358
+ });
359
+ }
360
+ catch {
361
+ return [];
362
+ }
363
+ }
364
+ /**
365
+ * Get recent Kubernetes events for troubleshooting
366
+ */
367
+ export async function getRecentEvents(serviceName, environment) {
368
+ const namespace = buildNamespace(serviceName, environment);
369
+ const events = await getKubernetesEvents(namespace);
370
+ // Filter and format events
371
+ return events
372
+ .filter((e) => e.lastTimestamp) // Only events with timestamps
373
+ .sort((a, b) => {
374
+ const timeA = new Date(a.lastTimestamp).getTime();
375
+ const timeB = new Date(b.lastTimestamp).getTime();
376
+ return timeB - timeA; // Most recent first
377
+ })
378
+ .slice(0, 20) // Limit to last 20 events
379
+ .map((e) => ({
380
+ type: e.type,
381
+ reason: e.reason,
382
+ message: e.message,
383
+ timestamp: e.lastTimestamp,
384
+ }));
385
+ }
386
+ /**
387
+ * Stream logs in real-time (for monitoring during troubleshooting)
388
+ */
389
+ export async function streamLogs(serviceName, environment, onEntry) {
390
+ const kubeconfigPath = await getKubeconfigPath();
391
+ const namespace = buildNamespace(serviceName, environment);
392
+ const pods = await getPods(namespace, serviceName);
393
+ if (pods.length === 0) {
394
+ throw new Error(`No pods found for ${serviceName} in ${namespace}`);
395
+ }
396
+ const processes = [];
397
+ for (const pod of pods) {
398
+ const kubectl = spawn('kubectl', [
399
+ 'logs',
400
+ '-n',
401
+ namespace,
402
+ pod.name,
403
+ '-f',
404
+ '--tail=0',
405
+ `--kubeconfig=${kubeconfigPath}`,
406
+ ], { stdio: ['pipe', 'pipe', 'pipe'] });
407
+ processes.push(kubectl);
408
+ kubectl.stdout.on('data', (data) => {
409
+ const lines = data.toString().split('\n').filter(Boolean);
410
+ for (const line of lines) {
411
+ const entries = parseLogLines(line, serviceName);
412
+ for (const entry of entries) {
413
+ onEntry(entry);
414
+ }
415
+ }
416
+ });
417
+ }
418
+ // Return cleanup function
419
+ return () => {
420
+ for (const p of processes) {
421
+ try {
422
+ p.kill();
423
+ }
424
+ catch {
425
+ // Ignore cleanup errors
426
+ }
427
+ }
428
+ };
429
+ }
430
+ export { buildNamespace, getPods };
431
+ //# sourceMappingURL=log-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-fetcher.js","sourceRoot":"","sources":["../../../src/lib/troubleshoot/log-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { LogEntry, RedactionConfig } from '../../types/index.js';
2
+ declare const REDACTED_MARKER = "[REDACTED]";
3
+ /**
4
+ * Redact sensitive information from a string
5
+ */
6
+ export declare function redactString(input: string, config?: Partial<RedactionConfig>): string;
7
+ /**
8
+ * Redact sensitive data from an object recursively
9
+ */
10
+ export declare function redactObject(obj: Record<string, unknown>, config?: Partial<RedactionConfig>, currentPath?: string): Record<string, unknown>;
11
+ /**
12
+ * Redact a log entry based on service access level
13
+ */
14
+ export declare function redactLogEntry(entry: LogEntry, ownService: string, config?: Partial<RedactionConfig>): LogEntry;
15
+ /**
16
+ * Redact multiple log entries
17
+ */
18
+ export declare function redactLogs(entries: LogEntry[], ownService: string, config?: Partial<RedactionConfig>): LogEntry[];
19
+ /**
20
+ * Create a summary of redactions made
21
+ */
22
+ export declare function summarizeRedactions(original: string, redacted: string): {
23
+ count: number;
24
+ types: string[];
25
+ };
26
+ /**
27
+ * Add redaction markers to indicate where sensitive data was removed
28
+ */
29
+ export declare function markRedactedSections(text: string): string;
30
+ /**
31
+ * Check if a log entry contains potentially sensitive information
32
+ */
33
+ export declare function containsSensitiveData(text: string): boolean;
34
+ export { REDACTED_MARKER };
35
+ //# sourceMappingURL=redactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../../src/lib/troubleshoot/redactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAErE,QAAA,MAAM,eAAe,eAAe,CAAA;AAqCpC;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,MAAM,CAsBR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,EACrC,WAAW,SAAK,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6CzB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,QAAQ,CAgCV;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,QAAQ,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,QAAQ,EAAE,CAEZ;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAwCpC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU3D;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}