@mcp-consultant-tools/log-analytics 28.0.0 → 29.0.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/build/cli/commands/function-commands.d.ts +7 -0
- package/build/cli/commands/function-commands.d.ts.map +1 -0
- package/build/cli/commands/function-commands.js +120 -0
- package/build/cli/commands/function-commands.js.map +1 -0
- package/build/cli/commands/index.d.ts +10 -0
- package/build/cli/commands/index.d.ts.map +1 -0
- package/build/cli/commands/index.js +15 -0
- package/build/cli/commands/index.js.map +1 -0
- package/build/cli/commands/query-commands.d.ts +7 -0
- package/build/cli/commands/query-commands.d.ts.map +1 -0
- package/build/cli/commands/query-commands.js +486 -0
- package/build/cli/commands/query-commands.js.map +1 -0
- package/build/cli/commands/workspace-commands.d.ts +7 -0
- package/build/cli/commands/workspace-commands.d.ts.map +1 -0
- package/build/cli/commands/workspace-commands.js +47 -0
- package/build/cli/commands/workspace-commands.js.map +1 -0
- package/build/cli/output.d.ts +11 -0
- package/build/cli/output.d.ts.map +1 -0
- package/build/cli/output.js +10 -0
- package/build/cli/output.js.map +1 -0
- package/build/cli.d.ts +9 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +27 -0
- package/build/cli.js.map +1 -0
- package/build/context-factory.d.ts +4 -0
- package/build/context-factory.d.ts.map +1 -0
- package/build/context-factory.js +45 -0
- package/build/context-factory.js.map +1 -0
- package/build/index.d.ts +14 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +35 -1121
- package/build/index.js.map +1 -1
- package/build/prompts/index.d.ts +7 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +6 -0
- package/build/prompts/index.js.map +1 -0
- package/build/prompts/templates.d.ts +3 -0
- package/build/prompts/templates.d.ts.map +1 -0
- package/build/prompts/templates.js +195 -0
- package/build/prompts/templates.js.map +1 -0
- package/build/services/index.d.ts +3 -0
- package/build/services/index.d.ts.map +1 -0
- package/build/services/index.js +2 -0
- package/build/services/index.js.map +1 -0
- package/build/services/log-analytics-service.d.ts +117 -0
- package/build/services/log-analytics-service.d.ts.map +1 -0
- package/build/services/log-analytics-service.js +419 -0
- package/build/services/log-analytics-service.js.map +1 -0
- package/build/tool-examples.d.ts +1 -8
- package/build/tool-examples.d.ts.map +1 -1
- package/build/tool-examples.js +1 -12
- package/build/tool-examples.js.map +1 -1
- package/build/tools/function-tools.d.ts +3 -0
- package/build/tools/function-tools.d.ts.map +1 -0
- package/build/tools/function-tools.js +536 -0
- package/build/tools/function-tools.js.map +1 -0
- package/build/tools/index.d.ts +9 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +12 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/query-tools.d.ts +3 -0
- package/build/tools/query-tools.d.ts.map +1 -0
- package/build/tools/query-tools.js +105 -0
- package/build/tools/query-tools.js.map +1 -0
- package/build/tools/workspace-tools.d.ts +3 -0
- package/build/tools/workspace-tools.d.ts.map +1 -0
- package/build/tools/workspace-tools.js +53 -0
- package/build/tools/workspace-tools.js.map +1 -0
- package/build/types.d.ts +9 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { formatTableAsMarkdown, filterColumns, resolveColumnPreset, } from '../utils/loganalytics-formatters.js';
|
|
3
|
+
import { descWithExamples, TIMESPAN_EXAMPLES, COLUMN_PRESET_EXAMPLES, APP_NAME_EXAMPLES, OUTPUT_FORMAT_EXAMPLES, SEVERITY_EXAMPLES, } from '../tool-examples.js';
|
|
4
|
+
export function registerFunctionTools(server, ctx) {
|
|
5
|
+
server.tool("la-get-fn-logs", "Get Azure Function logs from FunctionAppLogs table with optional filtering", {
|
|
6
|
+
resourceId: z.string().describe("Resource ID"),
|
|
7
|
+
functionName: z.string().optional().describe(descWithExamples("Function name to filter by (optional)", APP_NAME_EXAMPLES)),
|
|
8
|
+
timespan: z.string().optional().describe(descWithExamples("Time range (default: PT1H)", TIMESPAN_EXAMPLES)),
|
|
9
|
+
severityLevel: z.number().optional().describe(descWithExamples("Minimum severity level", SEVERITY_EXAMPLES)),
|
|
10
|
+
limit: z.number().optional().describe("Maximum number of results (default: 100)"),
|
|
11
|
+
columnPreset: z.enum(["minimal", "investigation", "full"]).optional()
|
|
12
|
+
.describe(descWithExamples("Column preset for filtering results", COLUMN_PRESET_EXAMPLES)),
|
|
13
|
+
columns: z.array(z.string()).optional()
|
|
14
|
+
.describe("Custom columns to include (overrides columnPreset)"),
|
|
15
|
+
outputFormat: z.enum(["json", "markdown"]).optional()
|
|
16
|
+
.describe(descWithExamples("Output format (default: json)", OUTPUT_FORMAT_EXAMPLES)),
|
|
17
|
+
}, async ({ resourceId, functionName, timespan, severityLevel, limit, columnPreset, columns, outputFormat }) => {
|
|
18
|
+
try {
|
|
19
|
+
const result = await ctx.logAnalytics.getFunctionLogs(resourceId, functionName, timespan || 'PT1H', severityLevel, limit || 100);
|
|
20
|
+
const columnsToInclude = resolveColumnPreset(columnPreset, columns);
|
|
21
|
+
const filteredTables = result.tables.map((t) => filterColumns(t, columnsToInclude));
|
|
22
|
+
const filteredResult = { ...result, tables: filteredTables };
|
|
23
|
+
if (outputFormat === 'markdown' && filteredTables.length > 0) {
|
|
24
|
+
const markdown = filteredTables.map((t) => formatTableAsMarkdown(t)).join('\n\n');
|
|
25
|
+
return { content: [{ type: "text", text: markdown }] };
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
content: [{ type: "text", text: JSON.stringify(filteredResult, null, 2) }],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error("Error getting function logs:", error);
|
|
33
|
+
return {
|
|
34
|
+
content: [{ type: "text", text: `Failed to get function logs: ${error.message}` }],
|
|
35
|
+
isError: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
server.tool("la-get-fn-errors", "Get Azure Function error logs with exception details", {
|
|
40
|
+
resourceId: z.string().describe("Resource ID"),
|
|
41
|
+
functionName: z.string().optional().describe(descWithExamples("Function name to filter by (optional)", APP_NAME_EXAMPLES)),
|
|
42
|
+
timespan: z.string().optional().describe(descWithExamples("Time range (default: PT1H)", TIMESPAN_EXAMPLES)),
|
|
43
|
+
limit: z.number().optional().describe("Maximum number of results (default: 100)"),
|
|
44
|
+
columnPreset: z.enum(["minimal", "investigation", "full"]).optional()
|
|
45
|
+
.describe(descWithExamples("Column preset for filtering results", COLUMN_PRESET_EXAMPLES)),
|
|
46
|
+
columns: z.array(z.string()).optional()
|
|
47
|
+
.describe("Custom columns to include (overrides columnPreset)"),
|
|
48
|
+
outputFormat: z.enum(["json", "markdown"]).optional()
|
|
49
|
+
.describe(descWithExamples("Output format (default: json)", OUTPUT_FORMAT_EXAMPLES)),
|
|
50
|
+
}, async ({ resourceId, functionName, timespan, limit, columnPreset, columns, outputFormat }) => {
|
|
51
|
+
try {
|
|
52
|
+
const result = await ctx.logAnalytics.getFunctionErrors(resourceId, functionName, timespan || 'PT1H', limit || 100);
|
|
53
|
+
const columnsToInclude = resolveColumnPreset(columnPreset, columns);
|
|
54
|
+
const filteredTables = result.tables.map((t) => filterColumns(t, columnsToInclude));
|
|
55
|
+
const filteredResult = { ...result, tables: filteredTables };
|
|
56
|
+
if (outputFormat === 'markdown' && filteredTables.length > 0) {
|
|
57
|
+
const markdown = filteredTables.map((t) => formatTableAsMarkdown(t)).join('\n\n');
|
|
58
|
+
return { content: [{ type: "text", text: markdown }] };
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: "text", text: JSON.stringify(filteredResult, null, 2) }],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error("Error getting function errors:", error);
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: "text", text: `Failed to get function errors: ${error.message}` }],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
server.tool("la-get-fn-stats", "Get execution statistics for Azure Functions (count, success rate, errors). Returns aggregated data - no column filtering needed.", {
|
|
73
|
+
resourceId: z.string().describe("Resource ID"),
|
|
74
|
+
functionName: z.string().optional().describe(descWithExamples("Function name (optional, returns stats for all functions if not specified)", APP_NAME_EXAMPLES)),
|
|
75
|
+
timespan: z.string().optional().describe(descWithExamples("Time range (default: PT1H)", TIMESPAN_EXAMPLES)),
|
|
76
|
+
outputFormat: z.enum(["json", "markdown"]).optional()
|
|
77
|
+
.describe(descWithExamples("Output format (default: json)", OUTPUT_FORMAT_EXAMPLES)),
|
|
78
|
+
}, async ({ resourceId, functionName, timespan, outputFormat }) => {
|
|
79
|
+
try {
|
|
80
|
+
const result = await ctx.logAnalytics.getFunctionStats(resourceId, functionName, timespan || 'PT1H');
|
|
81
|
+
if (outputFormat === 'markdown' && result.tables && result.tables.length > 0) {
|
|
82
|
+
const markdown = result.tables.map((t) => formatTableAsMarkdown(t)).join('\n\n');
|
|
83
|
+
return { content: [{ type: "text", text: markdown }] };
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error("Error getting function stats:", error);
|
|
91
|
+
return {
|
|
92
|
+
content: [{ type: "text", text: `Failed to get function stats: ${error.message}` }],
|
|
93
|
+
isError: true,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
server.tool("la-get-fn-invocations", "Get Azure Function invocation history from requests/traces tables", {
|
|
98
|
+
resourceId: z.string().describe("Resource ID"),
|
|
99
|
+
functionName: z.string().optional().describe(descWithExamples("Function name to filter by (optional)", APP_NAME_EXAMPLES)),
|
|
100
|
+
timespan: z.string().optional().describe(descWithExamples("Time range (default: PT1H)", TIMESPAN_EXAMPLES)),
|
|
101
|
+
limit: z.number().optional().describe("Maximum number of results (default: 100)"),
|
|
102
|
+
columnPreset: z.enum(["minimal", "investigation", "full"]).optional()
|
|
103
|
+
.describe(descWithExamples("Column preset for filtering results", COLUMN_PRESET_EXAMPLES)),
|
|
104
|
+
columns: z.array(z.string()).optional()
|
|
105
|
+
.describe("Custom columns to include (overrides columnPreset)"),
|
|
106
|
+
outputFormat: z.enum(["json", "markdown"]).optional()
|
|
107
|
+
.describe(descWithExamples("Output format (default: json)", OUTPUT_FORMAT_EXAMPLES)),
|
|
108
|
+
}, async ({ resourceId, functionName, timespan, limit, columnPreset, columns, outputFormat }) => {
|
|
109
|
+
try {
|
|
110
|
+
const result = await ctx.logAnalytics.getFunctionInvocations(resourceId, functionName, timespan || 'PT1H', limit || 100);
|
|
111
|
+
const columnsToInclude = resolveColumnPreset(columnPreset, columns);
|
|
112
|
+
const filteredTables = result.tables.map((t) => filterColumns(t, columnsToInclude));
|
|
113
|
+
const filteredResult = { ...result, tables: filteredTables };
|
|
114
|
+
if (outputFormat === 'markdown' && filteredTables.length > 0) {
|
|
115
|
+
const markdown = filteredTables.map((t) => formatTableAsMarkdown(t)).join('\n\n');
|
|
116
|
+
return { content: [{ type: "text", text: markdown }] };
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
content: [{ type: "text", text: JSON.stringify(filteredResult, null, 2) }],
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error("Error getting function invocations:", error);
|
|
124
|
+
return {
|
|
125
|
+
content: [{ type: "text", text: `Failed to get function invocations: ${error.message}` }],
|
|
126
|
+
isError: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
server.tool("la-get-error-summary", "Get aggregated error summary by type - ideal for starting investigations. Returns counts, first/last seen, and sample messages.", {
|
|
131
|
+
resourceId: z.string().describe("Resource ID"),
|
|
132
|
+
timespan: z.string().optional().describe(descWithExamples("Time range (default: PT1H)", TIMESPAN_EXAMPLES)),
|
|
133
|
+
tableName: z.enum(["AppExceptions", "AppTraces", "FunctionAppLogs"]).optional()
|
|
134
|
+
.describe("Table to analyze (default: AppExceptions)"),
|
|
135
|
+
minCount: z.number().optional().describe("Minimum error count to include (default: 1)"),
|
|
136
|
+
deduplicateRetries: z.boolean().optional()
|
|
137
|
+
.describe("Group by OperationId to deduplicate retry attempts (default: true). Shows UniqueErrors count and total RetryCount."),
|
|
138
|
+
outputFormat: z.enum(["json", "markdown"]).optional()
|
|
139
|
+
.describe(descWithExamples("Output format (default: markdown for readability)", OUTPUT_FORMAT_EXAMPLES)),
|
|
140
|
+
}, async ({ resourceId, timespan, tableName, minCount, deduplicateRetries, outputFormat }) => {
|
|
141
|
+
try {
|
|
142
|
+
const table = tableName || 'AppExceptions';
|
|
143
|
+
const timespanValue = timespan || 'PT1H';
|
|
144
|
+
const minCountValue = minCount || 1;
|
|
145
|
+
const dedupe = deduplicateRetries !== false;
|
|
146
|
+
let query;
|
|
147
|
+
if (table === 'AppExceptions') {
|
|
148
|
+
if (dedupe) {
|
|
149
|
+
query = `
|
|
150
|
+
AppExceptions
|
|
151
|
+
| summarize
|
|
152
|
+
RetryCount = count(),
|
|
153
|
+
FirstSeen = min(TimeGenerated),
|
|
154
|
+
LastSeen = max(TimeGenerated),
|
|
155
|
+
SampleMessage = take_any(OuterMessage)
|
|
156
|
+
by OperationId, ExceptionType, AppRoleName
|
|
157
|
+
| summarize
|
|
158
|
+
UniqueErrors = count(),
|
|
159
|
+
TotalRetries = sum(RetryCount),
|
|
160
|
+
FirstSeen = min(FirstSeen),
|
|
161
|
+
LastSeen = max(LastSeen),
|
|
162
|
+
SampleMessage = take_any(SampleMessage)
|
|
163
|
+
by ExceptionType, AppRoleName
|
|
164
|
+
| where UniqueErrors >= ${minCountValue}
|
|
165
|
+
| order by UniqueErrors desc
|
|
166
|
+
`;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
query = `
|
|
170
|
+
AppExceptions
|
|
171
|
+
| summarize
|
|
172
|
+
Count = count(),
|
|
173
|
+
FirstSeen = min(TimeGenerated),
|
|
174
|
+
LastSeen = max(TimeGenerated),
|
|
175
|
+
SampleMessage = take_any(OuterMessage)
|
|
176
|
+
by ExceptionType, AppRoleName
|
|
177
|
+
| where Count >= ${minCountValue}
|
|
178
|
+
| order by Count desc
|
|
179
|
+
`;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (table === 'AppTraces') {
|
|
183
|
+
if (dedupe) {
|
|
184
|
+
query = `
|
|
185
|
+
AppTraces
|
|
186
|
+
| where SeverityLevel >= 3
|
|
187
|
+
| summarize
|
|
188
|
+
RetryCount = count(),
|
|
189
|
+
FirstSeen = min(TimeGenerated),
|
|
190
|
+
LastSeen = max(TimeGenerated),
|
|
191
|
+
SampleMessage = take_any(Message)
|
|
192
|
+
by OperationId, AppRoleName, SeverityLevel
|
|
193
|
+
| summarize
|
|
194
|
+
UniqueErrors = count(),
|
|
195
|
+
TotalRetries = sum(RetryCount),
|
|
196
|
+
FirstSeen = min(FirstSeen),
|
|
197
|
+
LastSeen = max(LastSeen),
|
|
198
|
+
SampleMessage = take_any(SampleMessage)
|
|
199
|
+
by AppRoleName, SeverityLevel
|
|
200
|
+
| where UniqueErrors >= ${minCountValue}
|
|
201
|
+
| order by UniqueErrors desc
|
|
202
|
+
`;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
query = `
|
|
206
|
+
AppTraces
|
|
207
|
+
| where SeverityLevel >= 3
|
|
208
|
+
| summarize
|
|
209
|
+
Count = count(),
|
|
210
|
+
FirstSeen = min(TimeGenerated),
|
|
211
|
+
LastSeen = max(TimeGenerated),
|
|
212
|
+
SampleMessage = take_any(Message)
|
|
213
|
+
by AppRoleName, SeverityLevel
|
|
214
|
+
| where Count >= ${minCountValue}
|
|
215
|
+
| order by Count desc
|
|
216
|
+
`;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
if (dedupe) {
|
|
221
|
+
query = `
|
|
222
|
+
FunctionAppLogs
|
|
223
|
+
| where ExceptionDetails != ''
|
|
224
|
+
| summarize
|
|
225
|
+
RetryCount = count(),
|
|
226
|
+
FirstSeen = min(TimeGenerated),
|
|
227
|
+
LastSeen = max(TimeGenerated),
|
|
228
|
+
SampleMessage = take_any(Message)
|
|
229
|
+
by InvocationId, FunctionName
|
|
230
|
+
| summarize
|
|
231
|
+
UniqueErrors = count(),
|
|
232
|
+
TotalRetries = sum(RetryCount),
|
|
233
|
+
FirstSeen = min(FirstSeen),
|
|
234
|
+
LastSeen = max(LastSeen),
|
|
235
|
+
SampleMessage = take_any(SampleMessage)
|
|
236
|
+
by FunctionName
|
|
237
|
+
| where UniqueErrors >= ${minCountValue}
|
|
238
|
+
| order by UniqueErrors desc
|
|
239
|
+
`;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
query = `
|
|
243
|
+
FunctionAppLogs
|
|
244
|
+
| where ExceptionDetails != ''
|
|
245
|
+
| summarize
|
|
246
|
+
Count = count(),
|
|
247
|
+
FirstSeen = min(TimeGenerated),
|
|
248
|
+
LastSeen = max(TimeGenerated),
|
|
249
|
+
SampleMessage = take_any(Message)
|
|
250
|
+
by FunctionName
|
|
251
|
+
| where Count >= ${minCountValue}
|
|
252
|
+
| order by Count desc
|
|
253
|
+
`;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const result = await ctx.logAnalytics.executeQuery(resourceId, query, timespanValue);
|
|
257
|
+
const format = outputFormat || 'markdown';
|
|
258
|
+
if (format === 'markdown' && result.tables && result.tables.length > 0) {
|
|
259
|
+
const dedupeNote = dedupe ? ' (deduplicated by OperationId)' : '';
|
|
260
|
+
const markdown = `## Error Summary (${table})${dedupeNote}\n\n**Time range:** ${timespanValue}\n\n` +
|
|
261
|
+
result.tables.map((t) => formatTableAsMarkdown(t)).join('\n\n');
|
|
262
|
+
return { content: [{ type: "text", text: markdown }] };
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
console.error("Error getting error summary:", error);
|
|
270
|
+
return {
|
|
271
|
+
content: [{ type: "text", text: `Failed to get error summary: ${error.message}` }],
|
|
272
|
+
isError: true,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
server.tool("la-investigate-app", "Combined investigation tool: searches AppTraces + AppExceptions, returns summary + recent error details. Best starting point for app investigations.", {
|
|
277
|
+
resourceId: z.string().describe("Resource ID"),
|
|
278
|
+
appNamePattern: z.string().optional().describe(descWithExamples("Filter by app name (searches AppRoleName). Partial match supported.", APP_NAME_EXAMPLES)),
|
|
279
|
+
timespan: z.string().optional().describe(descWithExamples("Time range (default: PT1H)", TIMESPAN_EXAMPLES)),
|
|
280
|
+
includeDetails: z.boolean().optional().describe("Include recent error details (default: true)"),
|
|
281
|
+
detailsLimit: z.number().optional().describe("Max recent errors to include (default: 20)"),
|
|
282
|
+
deduplicateRetries: z.boolean().optional()
|
|
283
|
+
.describe("Group by OperationId to deduplicate retry attempts (default: true)"),
|
|
284
|
+
}, async ({ resourceId, appNamePattern, timespan, includeDetails, detailsLimit, deduplicateRetries }) => {
|
|
285
|
+
try {
|
|
286
|
+
const timespanValue = timespan || 'PT1H';
|
|
287
|
+
const showDetails = includeDetails !== false;
|
|
288
|
+
const limit = detailsLimit || 20;
|
|
289
|
+
const dedupe = deduplicateRetries !== false;
|
|
290
|
+
const appFilter = appNamePattern
|
|
291
|
+
? `| where AppRoleName contains "${appNamePattern}"`
|
|
292
|
+
: '';
|
|
293
|
+
const exceptionSummaryQuery = dedupe ? `
|
|
294
|
+
AppExceptions
|
|
295
|
+
${appFilter}
|
|
296
|
+
| summarize
|
|
297
|
+
RetryCount = count(),
|
|
298
|
+
FirstSeen = min(TimeGenerated),
|
|
299
|
+
LastSeen = max(TimeGenerated)
|
|
300
|
+
by OperationId, ExceptionType, AppRoleName
|
|
301
|
+
| summarize
|
|
302
|
+
UniqueErrors = count(),
|
|
303
|
+
TotalRetries = sum(RetryCount),
|
|
304
|
+
FirstSeen = min(FirstSeen),
|
|
305
|
+
LastSeen = max(LastSeen)
|
|
306
|
+
by ExceptionType, AppRoleName
|
|
307
|
+
| order by UniqueErrors desc
|
|
308
|
+
| take 20
|
|
309
|
+
` : `
|
|
310
|
+
AppExceptions
|
|
311
|
+
${appFilter}
|
|
312
|
+
| summarize
|
|
313
|
+
Count = count(),
|
|
314
|
+
FirstSeen = min(TimeGenerated),
|
|
315
|
+
LastSeen = max(TimeGenerated)
|
|
316
|
+
by ExceptionType, AppRoleName
|
|
317
|
+
| order by Count desc
|
|
318
|
+
| take 20
|
|
319
|
+
`;
|
|
320
|
+
const traceSeverityQuery = dedupe ? `
|
|
321
|
+
AppTraces
|
|
322
|
+
${appFilter}
|
|
323
|
+
| summarize RetryCount = count() by OperationId, SeverityLevel, AppRoleName
|
|
324
|
+
| summarize UniqueTraces = count(), TotalCount = sum(RetryCount) by SeverityLevel, AppRoleName
|
|
325
|
+
| order by SeverityLevel desc
|
|
326
|
+
` : `
|
|
327
|
+
AppTraces
|
|
328
|
+
${appFilter}
|
|
329
|
+
| summarize Count = count() by SeverityLevel, AppRoleName
|
|
330
|
+
| order by SeverityLevel desc
|
|
331
|
+
`;
|
|
332
|
+
const recentErrorsQuery = showDetails ? (dedupe ? `
|
|
333
|
+
AppExceptions
|
|
334
|
+
${appFilter}
|
|
335
|
+
| summarize
|
|
336
|
+
TimeGenerated = max(TimeGenerated),
|
|
337
|
+
RetryCount = count(),
|
|
338
|
+
OuterMessage = take_any(OuterMessage)
|
|
339
|
+
by OperationId, AppRoleName, ExceptionType
|
|
340
|
+
| project TimeGenerated, AppRoleName, ExceptionType, OuterMessage, RetryCount
|
|
341
|
+
| order by TimeGenerated desc
|
|
342
|
+
| take ${limit}
|
|
343
|
+
` : `
|
|
344
|
+
AppExceptions
|
|
345
|
+
${appFilter}
|
|
346
|
+
| project TimeGenerated, AppRoleName, ExceptionType, OuterMessage
|
|
347
|
+
| order by TimeGenerated desc
|
|
348
|
+
| take ${limit}
|
|
349
|
+
`) : null;
|
|
350
|
+
const [exceptionSummary, traceSeverity, recentErrors] = await Promise.all([
|
|
351
|
+
ctx.logAnalytics.executeQuery(resourceId, exceptionSummaryQuery, timespanValue),
|
|
352
|
+
ctx.logAnalytics.executeQuery(resourceId, traceSeverityQuery, timespanValue),
|
|
353
|
+
recentErrorsQuery ? ctx.logAnalytics.executeQuery(resourceId, recentErrorsQuery, timespanValue) : null,
|
|
354
|
+
]);
|
|
355
|
+
let markdown = `# App Investigation Report\n\n`;
|
|
356
|
+
markdown += `**Filter:** ${appNamePattern || '(all apps)'}\n`;
|
|
357
|
+
markdown += `**Time range:** ${timespanValue}\n`;
|
|
358
|
+
markdown += dedupe ? `**Deduplication:** enabled (grouped by OperationId)\n\n` : '\n';
|
|
359
|
+
markdown += `## Exception Summary\n\n`;
|
|
360
|
+
if (exceptionSummary.tables && exceptionSummary.tables.length > 0 && exceptionSummary.tables[0].rows.length > 0) {
|
|
361
|
+
markdown += formatTableAsMarkdown(exceptionSummary.tables[0]);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
markdown += '*No exceptions found*';
|
|
365
|
+
}
|
|
366
|
+
markdown += '\n\n';
|
|
367
|
+
markdown += `## Trace Severity Distribution\n\n`;
|
|
368
|
+
if (traceSeverity.tables && traceSeverity.tables.length > 0 && traceSeverity.tables[0].rows.length > 0) {
|
|
369
|
+
markdown += formatTableAsMarkdown(traceSeverity.tables[0]);
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
markdown += '*No traces found*';
|
|
373
|
+
}
|
|
374
|
+
markdown += '\n\n';
|
|
375
|
+
if (showDetails && recentErrors) {
|
|
376
|
+
markdown += `## Recent Errors (${limit} max)\n\n`;
|
|
377
|
+
if (recentErrors.tables && recentErrors.tables.length > 0 && recentErrors.tables[0].rows.length > 0) {
|
|
378
|
+
markdown += formatTableAsMarkdown(recentErrors.tables[0]);
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
markdown += '*No recent errors*';
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return { content: [{ type: "text", text: markdown }] };
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
console.error("Error investigating app:", error);
|
|
388
|
+
return {
|
|
389
|
+
content: [{ type: "text", text: `Failed to investigate app: ${error.message}` }],
|
|
390
|
+
isError: true,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
server.tool("la-investigate-sync", "Investigate SmartConnectorCloud (SCC) sync failures. Only useful for clients using SmartConnectorCloud. Auto-derives sync app name from workspace ID (log-{env}-{client}-... → func-{env}-{client}-sc-sync-...). Best tool for SCC sync debugging.", {
|
|
395
|
+
resourceId: z.string().describe("Resource ID (e.g., 'log-dev-rtpi-uks-01'). Environment and client are auto-extracted."),
|
|
396
|
+
timespan: z.string().optional().describe(descWithExamples("Time range (default: PT8H - typical work day)", TIMESPAN_EXAMPLES)),
|
|
397
|
+
includeDetails: z.boolean().optional().describe("Include recent error details (default: true)"),
|
|
398
|
+
detailsLimit: z.number().optional().describe("Max recent errors to include (default: 10)"),
|
|
399
|
+
}, async ({ resourceId, timespan, includeDetails, detailsLimit }) => {
|
|
400
|
+
try {
|
|
401
|
+
const timespanValue = timespan || 'PT8H';
|
|
402
|
+
const showDetails = includeDetails !== false;
|
|
403
|
+
const limit = detailsLimit || 10;
|
|
404
|
+
const match = resourceId.match(/^log-([^-]+)-([^-]+)/);
|
|
405
|
+
if (!match) {
|
|
406
|
+
return {
|
|
407
|
+
content: [{
|
|
408
|
+
type: "text",
|
|
409
|
+
text: `Could not parse environment/client from resourceId '${resourceId}'. Expected format: log-{environment}-{client}-...`,
|
|
410
|
+
}],
|
|
411
|
+
isError: true,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
const environment = match[1];
|
|
415
|
+
const client = match[2];
|
|
416
|
+
const syncAppPattern = `func-${environment}-${client}-sc-sync`;
|
|
417
|
+
const errorsByFunctionQuery = `
|
|
418
|
+
AppExceptions
|
|
419
|
+
| where AppRoleName contains "${syncAppPattern}"
|
|
420
|
+
| extend FunctionName = tostring(Properties.AzureFunctions_FunctionName)
|
|
421
|
+
| summarize
|
|
422
|
+
RetryCount = count(),
|
|
423
|
+
FirstSeen = min(TimeGenerated),
|
|
424
|
+
LastSeen = max(TimeGenerated),
|
|
425
|
+
SampleMessage = take_any(OuterMessage)
|
|
426
|
+
by OperationId, FunctionName, ExceptionType
|
|
427
|
+
| summarize
|
|
428
|
+
UniqueErrors = count(),
|
|
429
|
+
TotalRetries = sum(RetryCount),
|
|
430
|
+
FirstSeen = min(FirstSeen),
|
|
431
|
+
LastSeen = max(LastSeen),
|
|
432
|
+
SampleMessage = take_any(SampleMessage)
|
|
433
|
+
by FunctionName, ExceptionType
|
|
434
|
+
| order by UniqueErrors desc
|
|
435
|
+
`;
|
|
436
|
+
const errorCategoryQuery = `
|
|
437
|
+
AppExceptions
|
|
438
|
+
| where AppRoleName contains "${syncAppPattern}"
|
|
439
|
+
| extend ErrorCategory = case(
|
|
440
|
+
ExceptionType contains "FaultException" or ExceptionType contains "OrganizationService", "Dataverse",
|
|
441
|
+
ExceptionType contains "ServiceBus", "ServiceBus",
|
|
442
|
+
ExceptionType contains "Sql", "Database",
|
|
443
|
+
ExceptionType contains "Timeout", "Timeout",
|
|
444
|
+
ExceptionType contains "Socket" or ExceptionType contains "Http", "Network",
|
|
445
|
+
"Other"
|
|
446
|
+
)
|
|
447
|
+
| summarize
|
|
448
|
+
RetryCount = count(),
|
|
449
|
+
UniqueOps = dcount(OperationId)
|
|
450
|
+
by ErrorCategory
|
|
451
|
+
| order by UniqueOps desc
|
|
452
|
+
`;
|
|
453
|
+
const recentErrorsQuery = showDetails ? `
|
|
454
|
+
AppExceptions
|
|
455
|
+
| where AppRoleName contains "${syncAppPattern}"
|
|
456
|
+
| extend FunctionName = tostring(Properties.AzureFunctions_FunctionName)
|
|
457
|
+
| summarize
|
|
458
|
+
TimeGenerated = max(TimeGenerated),
|
|
459
|
+
RetryCount = count(),
|
|
460
|
+
OuterMessage = take_any(OuterMessage)
|
|
461
|
+
by OperationId, FunctionName, ExceptionType
|
|
462
|
+
| project TimeGenerated, FunctionName, ExceptionType, OuterMessage, RetryCount
|
|
463
|
+
| order by TimeGenerated desc
|
|
464
|
+
| take ${limit}
|
|
465
|
+
` : null;
|
|
466
|
+
const errorTracesQuery = `
|
|
467
|
+
AppTraces
|
|
468
|
+
| where AppRoleName contains "${syncAppPattern}"
|
|
469
|
+
| where SeverityLevel >= 3
|
|
470
|
+
| summarize
|
|
471
|
+
RetryCount = count()
|
|
472
|
+
by OperationId, Message
|
|
473
|
+
| summarize
|
|
474
|
+
UniqueErrors = count(),
|
|
475
|
+
TotalCount = sum(RetryCount)
|
|
476
|
+
by Message
|
|
477
|
+
| order by UniqueErrors desc
|
|
478
|
+
| take 10
|
|
479
|
+
`;
|
|
480
|
+
const [errorsByFunction, errorCategory, recentErrors, errorTraces] = await Promise.all([
|
|
481
|
+
ctx.logAnalytics.executeQuery(resourceId, errorsByFunctionQuery, timespanValue),
|
|
482
|
+
ctx.logAnalytics.executeQuery(resourceId, errorCategoryQuery, timespanValue),
|
|
483
|
+
recentErrorsQuery ? ctx.logAnalytics.executeQuery(resourceId, recentErrorsQuery, timespanValue) : null,
|
|
484
|
+
ctx.logAnalytics.executeQuery(resourceId, errorTracesQuery, timespanValue),
|
|
485
|
+
]);
|
|
486
|
+
let markdown = `# SmartConnector Sync Investigation\n\n`;
|
|
487
|
+
markdown += `**Environment:** ${environment}\n`;
|
|
488
|
+
markdown += `**Client:** ${client}\n`;
|
|
489
|
+
markdown += `**Sync App:** ${syncAppPattern}-*\n`;
|
|
490
|
+
markdown += `**Time range:** ${timespanValue}\n`;
|
|
491
|
+
markdown += `**Deduplication:** enabled (grouped by OperationId)\n\n`;
|
|
492
|
+
markdown += `## Error Categories\n\n`;
|
|
493
|
+
if (errorCategory.tables?.[0]?.rows?.length > 0) {
|
|
494
|
+
markdown += formatTableAsMarkdown(errorCategory.tables[0]);
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
markdown += '*No errors found* ✅';
|
|
498
|
+
}
|
|
499
|
+
markdown += '\n\n';
|
|
500
|
+
markdown += `## Errors by Sync Operation\n\n`;
|
|
501
|
+
if (errorsByFunction.tables?.[0]?.rows?.length > 0) {
|
|
502
|
+
markdown += formatTableAsMarkdown(errorsByFunction.tables[0]);
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
markdown += '*No errors found* ✅';
|
|
506
|
+
}
|
|
507
|
+
markdown += '\n\n';
|
|
508
|
+
markdown += `## Error Traces (Severity 3+)\n\n`;
|
|
509
|
+
if (errorTraces.tables?.[0]?.rows?.length > 0) {
|
|
510
|
+
markdown += formatTableAsMarkdown(errorTraces.tables[0]);
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
markdown += '*No error traces found*';
|
|
514
|
+
}
|
|
515
|
+
markdown += '\n\n';
|
|
516
|
+
if (showDetails && recentErrors) {
|
|
517
|
+
markdown += `## Recent Errors (${limit} max)\n\n`;
|
|
518
|
+
if (recentErrors.tables?.[0]?.rows?.length > 0) {
|
|
519
|
+
markdown += formatTableAsMarkdown(recentErrors.tables[0]);
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
markdown += '*No recent errors*';
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
return { content: [{ type: "text", text: markdown }] };
|
|
526
|
+
}
|
|
527
|
+
catch (error) {
|
|
528
|
+
console.error("Error investigating sync:", error);
|
|
529
|
+
return {
|
|
530
|
+
content: [{ type: "text", text: `Failed to investigate sync: ${error.message}` }],
|
|
531
|
+
isError: true,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
//# sourceMappingURL=function-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-tools.js","sourceRoot":"","sources":["../../src/tools/function-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools barrel export + combined registration
|
|
3
|
+
*/
|
|
4
|
+
import type { ServiceContext } from '../types.js';
|
|
5
|
+
export declare function registerAllTools(server: any, ctx: ServiceContext): void;
|
|
6
|
+
export { registerQueryTools } from './query-tools.js';
|
|
7
|
+
export { registerWorkspaceTools } from './workspace-tools.js';
|
|
8
|
+
export { registerFunctionTools } from './function-tools.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAIvE;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { registerQueryTools } from './query-tools.js';
|
|
2
|
+
import { registerWorkspaceTools } from './workspace-tools.js';
|
|
3
|
+
import { registerFunctionTools } from './function-tools.js';
|
|
4
|
+
export function registerAllTools(server, ctx) {
|
|
5
|
+
registerWorkspaceTools(server, ctx);
|
|
6
|
+
registerQueryTools(server, ctx);
|
|
7
|
+
registerFunctionTools(server, ctx);
|
|
8
|
+
}
|
|
9
|
+
export { registerQueryTools } from './query-tools.js';
|
|
10
|
+
export { registerWorkspaceTools } from './workspace-tools.js';
|
|
11
|
+
export { registerFunctionTools } from './function-tools.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,MAAW,EAAE,GAAmB;IAC/D,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-tools.d.ts","sourceRoot":"","sources":["../../src/tools/query-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAelD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAoIzE"}
|