@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.
- package/README.md +168 -0
- package/dist/commands/backup.d.ts +11 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +112 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/config.d.ts +10 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +41 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +16 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +219 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/destroy.d.ts +12 -0
- package/dist/commands/destroy.d.ts.map +1 -0
- package/dist/commands/destroy.js +62 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/env.d.ts +7 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +42 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init-ai.d.ts +7 -0
- package/dist/commands/init-ai.d.ts.map +1 -0
- package/dist/commands/init-ai.js +257 -0
- package/dist/commands/init-ai.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +228 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +10 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +193 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +164 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +16 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +362 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/preflight.d.ts +8 -0
- package/dist/commands/preflight.d.ts.map +1 -0
- package/dist/commands/preflight.js +188 -0
- package/dist/commands/preflight.js.map +1 -0
- package/dist/commands/program.d.ts +7 -0
- package/dist/commands/program.d.ts.map +1 -0
- package/dist/commands/program.js +59 -0
- package/dist/commands/program.js.map +1 -0
- package/dist/commands/push.d.ts +12 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +171 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/register.d.ts +7 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +124 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/rollback.d.ts +11 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +172 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/sample.d.ts +11 -0
- package/dist/commands/sample.d.ts.map +1 -0
- package/dist/commands/sample.js +114 -0
- package/dist/commands/sample.js.map +1 -0
- package/dist/commands/services.d.ts +13 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +95 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +170 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/troubleshoot.d.ts +19 -0
- package/dist/commands/troubleshoot.d.ts.map +1 -0
- package/dist/commands/troubleshoot.js +465 -0
- package/dist/commands/troubleshoot.js.map +1 -0
- package/dist/commands/versions.d.ts +16 -0
- package/dist/commands/versions.d.ts.map +1 -0
- package/dist/commands/versions.js +162 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +294 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/ai/client.d.ts +36 -0
- package/dist/lib/ai/client.d.ts.map +1 -0
- package/dist/lib/ai/client.js +140 -0
- package/dist/lib/ai/client.js.map +1 -0
- package/dist/lib/ai/generator.d.ts +17 -0
- package/dist/lib/ai/generator.d.ts.map +1 -0
- package/dist/lib/ai/generator.js +338 -0
- package/dist/lib/ai/generator.js.map +1 -0
- package/dist/lib/ai/prompts.d.ts +47 -0
- package/dist/lib/ai/prompts.d.ts.map +1 -0
- package/dist/lib/ai/prompts.js +247 -0
- package/dist/lib/ai/prompts.js.map +1 -0
- package/dist/lib/ai/scanner.d.ts +50 -0
- package/dist/lib/ai/scanner.d.ts.map +1 -0
- package/dist/lib/ai/scanner.js +237 -0
- package/dist/lib/ai/scanner.js.map +1 -0
- package/dist/lib/api.d.ts +18 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +67 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/builder.d.ts +34 -0
- package/dist/lib/builder.d.ts.map +1 -0
- package/dist/lib/builder.js +132 -0
- package/dist/lib/builder.js.map +1 -0
- package/dist/lib/config.d.ts +20 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +124 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/output.d.ts +12 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +39 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/scaffold.d.ts +29 -0
- package/dist/lib/scaffold.d.ts.map +1 -0
- package/dist/lib/scaffold.js +166 -0
- package/dist/lib/scaffold.js.map +1 -0
- package/dist/lib/troubleshoot/analyzer.d.ts +14 -0
- package/dist/lib/troubleshoot/analyzer.d.ts.map +1 -0
- package/dist/lib/troubleshoot/analyzer.js +541 -0
- package/dist/lib/troubleshoot/analyzer.js.map +1 -0
- package/dist/lib/troubleshoot/auto-fix.d.ts +29 -0
- package/dist/lib/troubleshoot/auto-fix.d.ts.map +1 -0
- package/dist/lib/troubleshoot/auto-fix.js +373 -0
- package/dist/lib/troubleshoot/auto-fix.js.map +1 -0
- package/dist/lib/troubleshoot/index.d.ts +5 -0
- package/dist/lib/troubleshoot/index.d.ts.map +1 -0
- package/dist/lib/troubleshoot/index.js +6 -0
- package/dist/lib/troubleshoot/index.js.map +1 -0
- package/dist/lib/troubleshoot/log-fetcher.d.ts +43 -0
- package/dist/lib/troubleshoot/log-fetcher.d.ts.map +1 -0
- package/dist/lib/troubleshoot/log-fetcher.js +431 -0
- package/dist/lib/troubleshoot/log-fetcher.js.map +1 -0
- package/dist/lib/troubleshoot/redactor.d.ts +35 -0
- package/dist/lib/troubleshoot/redactor.d.ts.map +1 -0
- package/dist/lib/troubleshoot/redactor.js +208 -0
- package/dist/lib/troubleshoot/redactor.js.map +1 -0
- package/dist/lib/validators/catalog-validator.d.ts +3 -0
- package/dist/lib/validators/catalog-validator.d.ts.map +1 -0
- package/dist/lib/validators/catalog-validator.js +205 -0
- package/dist/lib/validators/catalog-validator.js.map +1 -0
- package/dist/lib/validators/dockerfile-validator.d.ts +4 -0
- package/dist/lib/validators/dockerfile-validator.d.ts.map +1 -0
- package/dist/lib/validators/dockerfile-validator.js +262 -0
- package/dist/lib/validators/dockerfile-validator.js.map +1 -0
- package/dist/lib/validators/env-validator.d.ts +3 -0
- package/dist/lib/validators/env-validator.d.ts.map +1 -0
- package/dist/lib/validators/env-validator.js +268 -0
- package/dist/lib/validators/env-validator.js.map +1 -0
- package/dist/lib/validators/git-validator.d.ts +3 -0
- package/dist/lib/validators/git-validator.d.ts.map +1 -0
- package/dist/lib/validators/git-validator.js +236 -0
- package/dist/lib/validators/git-validator.js.map +1 -0
- package/dist/lib/validators/health-detector.d.ts +4 -0
- package/dist/lib/validators/health-detector.d.ts.map +1 -0
- package/dist/lib/validators/health-detector.js +159 -0
- package/dist/lib/validators/health-detector.js.map +1 -0
- package/dist/lib/validators/index.d.ts +7 -0
- package/dist/lib/validators/index.d.ts.map +1 -0
- package/dist/lib/validators/index.js +7 -0
- package/dist/lib/validators/index.js.map +1 -0
- package/dist/lib/validators/route-validator.d.ts +3 -0
- package/dist/lib/validators/route-validator.d.ts.map +1 -0
- package/dist/lib/validators/route-validator.js +238 -0
- package/dist/lib/validators/route-validator.js.map +1 -0
- package/dist/types/index.d.ts +455 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +37 -0
- package/dist/types/index.js.map +1 -0
- 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"}
|