elasticsearch-mcp-vsee 0.5.6 → 0.5.7
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 +16 -13
- package/build/errors/handlers.d.ts +1 -0
- package/build/errors/handlers.d.ts.map +1 -1
- package/build/errors/handlers.js +61 -0
- package/build/errors/handlers.js.map +1 -1
- package/build/server.d.ts +0 -2
- package/build/server.d.ts.map +1 -1
- package/build/server.js +49 -90
- package/build/server.js.map +1 -1
- package/build/tools/find-entities-by-metric.d.ts +3 -3
- package/build/tools/find-entities-by-metric.d.ts.map +1 -1
- package/build/tools/find-entities-by-metric.js +8 -25
- package/build/tools/find-entities-by-metric.js.map +1 -1
- package/build/tools/get-index-fields.d.ts.map +1 -1
- package/build/tools/get-index-fields.js +4 -11
- package/build/tools/get-index-fields.js.map +1 -1
- package/build/tools/get-platform-breakdown.d.ts +4 -3
- package/build/tools/get-platform-breakdown.d.ts.map +1 -1
- package/build/tools/get-platform-breakdown.js +54 -34
- package/build/tools/get-platform-breakdown.js.map +1 -1
- package/build/tools/get-rating-distribution.d.ts +3 -3
- package/build/tools/get-rating-distribution.d.ts.map +1 -1
- package/build/tools/get-rating-distribution.js +9 -8
- package/build/tools/get-rating-distribution.js.map +1 -1
- package/build/tools/get-subscription-breakdown.d.ts +0 -2
- package/build/tools/get-subscription-breakdown.d.ts.map +1 -1
- package/build/tools/get-subscription-breakdown.js +10 -43
- package/build/tools/get-subscription-breakdown.js.map +1 -1
- package/build/tools/get-usage-summary.d.ts +2 -2
- package/build/tools/get-usage-summary.d.ts.map +1 -1
- package/build/tools/get-usage-summary.js +7 -15
- package/build/tools/get-usage-summary.js.map +1 -1
- package/build/tools/get-visit-trends.d.ts +3 -3
- package/build/tools/get-visit-trends.d.ts.map +1 -1
- package/build/tools/get-visit-trends.js +53 -42
- package/build/tools/get-visit-trends.js.map +1 -1
- package/build/tools/index.d.ts +0 -4
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +1 -5
- package/build/tools/index.js.map +1 -1
- package/build/tools/top-change.d.ts +9 -7
- package/build/tools/top-change.d.ts.map +1 -1
- package/build/tools/top-change.js +60 -83
- package/build/tools/top-change.js.map +1 -1
- package/build/validation/schemas.d.ts +2 -2
- package/package.json +1 -1
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.GetVisitTrendsTool = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const handlers_js_1 = require("../errors/handlers.js");
|
|
6
|
+
const date_math_js_1 = require("../utils/date-math.js");
|
|
6
7
|
const aggregation_limits_js_1 = require("../utils/aggregation-limits.js");
|
|
7
8
|
const field_constants_js_1 = require("../utils/field-constants.js");
|
|
8
|
-
const date_math_js_1 = require("../utils/date-math.js");
|
|
9
9
|
const GetVisitTrendsArgsSchema = zod_1.z.object({
|
|
10
10
|
interval: zod_1.z.enum(['daily', 'weekly', 'monthly']).describe('Time interval for trends: "daily", "weekly", or "monthly"'),
|
|
11
11
|
startDate: zod_1.z.string().optional().describe('Start date in ISO format (YYYY-MM-DD) or date math (e.g., "now-180d", "now-1y"). Defaults to "now-180d" (6 months)'),
|
|
@@ -13,7 +13,7 @@ const GetVisitTrendsArgsSchema = zod_1.z.object({
|
|
|
13
13
|
groupBy: zod_1.z.enum(['none', 'subscription', 'account', 'group']).optional().default('none').describe('Optional grouping dimension (default: none)'),
|
|
14
14
|
account: zod_1.z.string().optional().describe('Optional account name to filter by'),
|
|
15
15
|
group: zod_1.z.string().optional().describe('Optional group name to filter by'),
|
|
16
|
-
subscription: zod_1.z.
|
|
16
|
+
subscription: zod_1.z.enum(['Enterprise', 'Premium', 'FVC', 'BVC', 'Plus']).optional().describe('Optional subscription tier to filter by'),
|
|
17
17
|
}).strict();
|
|
18
18
|
class GetVisitTrendsTool {
|
|
19
19
|
elasticsearch;
|
|
@@ -26,41 +26,46 @@ class GetVisitTrendsTool {
|
|
|
26
26
|
try {
|
|
27
27
|
const validatedArgs = GetVisitTrendsArgsSchema.parse(args);
|
|
28
28
|
let startDate = validatedArgs.startDate || 'now-180d';
|
|
29
|
-
|
|
29
|
+
let endDate = validatedArgs.endDate || 'now';
|
|
30
30
|
const groupBy = validatedArgs.groupBy || 'none';
|
|
31
|
-
// Safeguard: Aggressively cap time periods to prevent circuit breaker errors
|
|
32
31
|
// Date histogram aggregations must process ALL documents in the time range,
|
|
33
|
-
//
|
|
34
|
-
// Determine maximum allowed days based on interval
|
|
35
|
-
// More aggressive limits for longer intervals since they process more data
|
|
32
|
+
// making them very memory-intensive. Cap time periods based on interval and grouping.
|
|
36
33
|
let maxDays;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
if (groupBy !== 'none') {
|
|
35
|
+
// When grouping, we aggregate all entities × all time buckets - very memory intensive
|
|
36
|
+
switch (validatedArgs.interval) {
|
|
37
|
+
case 'daily':
|
|
38
|
+
maxDays = 30; // Max 30 days when grouped
|
|
39
|
+
break;
|
|
40
|
+
case 'weekly':
|
|
41
|
+
maxDays = 90; // Max 90 days (~12 weeks) when grouped
|
|
42
|
+
break;
|
|
43
|
+
case 'monthly':
|
|
44
|
+
maxDays = 180; // Max 180 days (~6 months) when grouped
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
maxDays = 30;
|
|
48
|
+
}
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
else {
|
|
51
|
+
// Without grouping, can handle longer periods
|
|
52
|
+
switch (validatedArgs.interval) {
|
|
53
|
+
case 'daily':
|
|
54
|
+
maxDays = 90; // Max 90 days for daily
|
|
55
|
+
break;
|
|
56
|
+
case 'weekly':
|
|
57
|
+
maxDays = 180; // Max 180 days (~6 months) for weekly
|
|
58
|
+
break;
|
|
59
|
+
case 'monthly':
|
|
60
|
+
maxDays = 365; // Max 365 days (1 year) for monthly
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
maxDays = 90;
|
|
64
|
+
}
|
|
62
65
|
}
|
|
63
|
-
startDate =
|
|
66
|
+
const { startDate: adjustedStartDate, endDate: adjustedEndDate } = (0, date_math_js_1.capTimePeriod)(startDate, endDate, maxDays, this.logger);
|
|
67
|
+
startDate = adjustedStartDate;
|
|
68
|
+
endDate = adjustedEndDate;
|
|
64
69
|
// Calculate estimated buckets for logging
|
|
65
70
|
const parseDateMathDays = (dateMath) => {
|
|
66
71
|
const match = dateMath.match(/now-(\d+)([dwMy])/i);
|
|
@@ -153,7 +158,6 @@ class GetVisitTrendsTool {
|
|
|
153
158
|
},
|
|
154
159
|
});
|
|
155
160
|
}
|
|
156
|
-
// Determine calendar interval
|
|
157
161
|
let calendarInterval;
|
|
158
162
|
switch (validatedArgs.interval) {
|
|
159
163
|
case 'daily':
|
|
@@ -168,7 +172,6 @@ class GetVisitTrendsTool {
|
|
|
168
172
|
default:
|
|
169
173
|
calendarInterval = 'day';
|
|
170
174
|
}
|
|
171
|
-
// Build aggregations
|
|
172
175
|
const aggs = {
|
|
173
176
|
trends_over_time: {
|
|
174
177
|
date_histogram: {
|
|
@@ -189,7 +192,6 @@ class GetVisitTrendsTool {
|
|
|
189
192
|
},
|
|
190
193
|
},
|
|
191
194
|
};
|
|
192
|
-
// Add grouping if specified
|
|
193
195
|
if (groupBy !== 'none') {
|
|
194
196
|
let groupFieldName;
|
|
195
197
|
switch (groupBy) {
|
|
@@ -235,7 +237,9 @@ class GetVisitTrendsTool {
|
|
|
235
237
|
const query = {
|
|
236
238
|
index,
|
|
237
239
|
size: 0,
|
|
240
|
+
filter_path: 'aggregations',
|
|
238
241
|
body: {
|
|
242
|
+
track_total_hits: false,
|
|
239
243
|
query: {
|
|
240
244
|
bool: {
|
|
241
245
|
filter: filters,
|
|
@@ -249,8 +253,10 @@ class GetVisitTrendsTool {
|
|
|
249
253
|
const responseAggs = response.aggregations;
|
|
250
254
|
let trends = [];
|
|
251
255
|
let totalVisits = 0;
|
|
256
|
+
let numPeriods = 0;
|
|
252
257
|
if (groupBy === 'none') {
|
|
253
258
|
const buckets = responseAggs?.trends_over_time?.buckets || [];
|
|
259
|
+
numPeriods = buckets.length;
|
|
254
260
|
trends = buckets.map((bucket) => {
|
|
255
261
|
const count = bucket.doc_count || 0;
|
|
256
262
|
totalVisits += count;
|
|
@@ -264,12 +270,15 @@ class GetVisitTrendsTool {
|
|
|
264
270
|
});
|
|
265
271
|
}
|
|
266
272
|
else {
|
|
267
|
-
// Determine the key name based on groupBy value
|
|
268
273
|
const valueKey = `${groupBy}_value`;
|
|
269
274
|
const groupBuckets = responseAggs?.by_group?.buckets || [];
|
|
270
275
|
trends = groupBuckets.map((groupBucket) => {
|
|
271
276
|
const groupValue = groupBucket.key;
|
|
272
277
|
const trendBuckets = groupBucket.trends_over_time?.buckets || [];
|
|
278
|
+
// Get number of periods from first group (all groups should have same number of buckets)
|
|
279
|
+
if (numPeriods === 0 && trendBuckets.length > 0) {
|
|
280
|
+
numPeriods = trendBuckets.length;
|
|
281
|
+
}
|
|
273
282
|
const dataPoints = trendBuckets.map((bucket) => {
|
|
274
283
|
const count = bucket.doc_count || 0;
|
|
275
284
|
totalVisits += count;
|
|
@@ -287,10 +296,8 @@ class GetVisitTrendsTool {
|
|
|
287
296
|
};
|
|
288
297
|
});
|
|
289
298
|
}
|
|
290
|
-
const averagePerPeriod =
|
|
291
|
-
? (
|
|
292
|
-
? Math.round((totalVisits / trends.length) * 100) / 100
|
|
293
|
-
: Math.round((totalVisits / trends.length) * 100) / 100)
|
|
299
|
+
const averagePerPeriod = numPeriods > 0
|
|
300
|
+
? Math.round((totalVisits / numPeriods) * 100) / 100
|
|
294
301
|
: 0;
|
|
295
302
|
this.logger.info('Successfully retrieved visit trends', {
|
|
296
303
|
interval: validatedArgs.interval,
|
|
@@ -298,10 +305,10 @@ class GetVisitTrendsTool {
|
|
|
298
305
|
dataPoints: trends.length,
|
|
299
306
|
});
|
|
300
307
|
return {
|
|
301
|
-
interval: validatedArgs.interval,
|
|
302
|
-
period: `${startDate} to ${endDate}`,
|
|
303
308
|
startDate,
|
|
304
309
|
endDate,
|
|
310
|
+
interval: validatedArgs.interval,
|
|
311
|
+
period: `${startDate} to ${endDate}`,
|
|
305
312
|
trends,
|
|
306
313
|
total_visits: totalVisits,
|
|
307
314
|
average_per_period: averagePerPeriod,
|
|
@@ -317,6 +324,10 @@ class GetVisitTrendsTool {
|
|
|
317
324
|
throw error;
|
|
318
325
|
}
|
|
319
326
|
this.logger.error('Failed to get visit trends', {}, error);
|
|
327
|
+
// Check if this is a ResponseError from Elasticsearch client
|
|
328
|
+
if (error && typeof error === 'object' && 'body' in error) {
|
|
329
|
+
throw handlers_js_1.ElasticsearchError.fromResponseError(error, 'get_visit_trends', args);
|
|
330
|
+
}
|
|
320
331
|
throw new handlers_js_1.ElasticsearchError('Failed to get visit trends from Elasticsearch', error, { args });
|
|
321
332
|
}
|
|
322
333
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-visit-trends.js","sourceRoot":"","sources":["../../src/tools/get-visit-trends.ts"],"names":[],"mappings":";;;AAEA,6BAAwB;AACxB,uDAA4E;AAC5E,0EAAoE;AACpE,oEAA8D;
|
|
1
|
+
{"version":3,"file":"get-visit-trends.js","sourceRoot":"","sources":["../../src/tools/get-visit-trends.ts"],"names":[],"mappings":"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"}
|
package/build/tools/index.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
export { GetIndexFieldsTool } from './get-index-fields.js';
|
|
2
2
|
export { TopChangeTool } from './top-change.js';
|
|
3
3
|
export { PeriodSummaryTool } from './get-subscription-breakdown.js';
|
|
4
|
-
export { GetAccountSummaryTool } from './get-account-summary.js';
|
|
5
|
-
export { GetGroupSummaryTool } from './get-group-summary.js';
|
|
6
4
|
export { GetPlatformBreakdownTool } from './get-platform-breakdown.js';
|
|
7
5
|
export { GetRatingDistributionTool } from './get-rating-distribution.js';
|
|
8
6
|
export { GetVisitTrendsTool } from './get-visit-trends.js';
|
|
@@ -11,8 +9,6 @@ export { FindEntitiesByMetricTool } from './find-entities-by-metric.js';
|
|
|
11
9
|
export type { GetIndexFieldsArgs, GetIndexFieldsResult, FieldInfo, } from './get-index-fields.js';
|
|
12
10
|
export type { TopChangeArgs, TopChangeResult, ChangeInfo, } from './top-change.js';
|
|
13
11
|
export type { PeriodSummaryArgs, PeriodSummaryResult, SubscriptionMetrics, } from './get-subscription-breakdown.js';
|
|
14
|
-
export type { GetAccountSummaryArgs, AccountSummaryResult, } from './get-account-summary.js';
|
|
15
|
-
export type { GetGroupSummaryArgs, GroupSummaryResult, AccountBreakdown, } from './get-group-summary.js';
|
|
16
12
|
export type { GetPlatformBreakdownArgs, PlatformBreakdownResult, PlatformMetrics, } from './get-platform-breakdown.js';
|
|
17
13
|
export type { GetRatingDistributionArgs, RatingDistributionResult, RatingBucket, } from './get-rating-distribution.js';
|
|
18
14
|
export type { GetVisitTrendsArgs, VisitTrendsResult, TrendDataPoint, GroupedTrendData, } from './get-visit-trends.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,GACV,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,aAAa,EACb,eAAe,EACf,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAErC,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,YAAY,GACb,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,8BAA8B,CAAC"}
|
package/build/tools/index.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FindEntitiesByMetricTool = exports.GetUsageSummaryTool = exports.GetVisitTrendsTool = exports.GetRatingDistributionTool = exports.GetPlatformBreakdownTool = exports.
|
|
3
|
+
exports.FindEntitiesByMetricTool = exports.GetUsageSummaryTool = exports.GetVisitTrendsTool = exports.GetRatingDistributionTool = exports.GetPlatformBreakdownTool = exports.PeriodSummaryTool = exports.TopChangeTool = exports.GetIndexFieldsTool = void 0;
|
|
4
4
|
var get_index_fields_js_1 = require("./get-index-fields.js");
|
|
5
5
|
Object.defineProperty(exports, "GetIndexFieldsTool", { enumerable: true, get: function () { return get_index_fields_js_1.GetIndexFieldsTool; } });
|
|
6
6
|
var top_change_js_1 = require("./top-change.js");
|
|
7
7
|
Object.defineProperty(exports, "TopChangeTool", { enumerable: true, get: function () { return top_change_js_1.TopChangeTool; } });
|
|
8
8
|
var get_subscription_breakdown_js_1 = require("./get-subscription-breakdown.js");
|
|
9
9
|
Object.defineProperty(exports, "PeriodSummaryTool", { enumerable: true, get: function () { return get_subscription_breakdown_js_1.PeriodSummaryTool; } });
|
|
10
|
-
var get_account_summary_js_1 = require("./get-account-summary.js");
|
|
11
|
-
Object.defineProperty(exports, "GetAccountSummaryTool", { enumerable: true, get: function () { return get_account_summary_js_1.GetAccountSummaryTool; } });
|
|
12
|
-
var get_group_summary_js_1 = require("./get-group-summary.js");
|
|
13
|
-
Object.defineProperty(exports, "GetGroupSummaryTool", { enumerable: true, get: function () { return get_group_summary_js_1.GetGroupSummaryTool; } });
|
|
14
10
|
var get_platform_breakdown_js_1 = require("./get-platform-breakdown.js");
|
|
15
11
|
Object.defineProperty(exports, "GetPlatformBreakdownTool", { enumerable: true, get: function () { return get_platform_breakdown_js_1.GetPlatformBreakdownTool; } });
|
|
16
12
|
var get_rating_distribution_js_1 = require("./get-rating-distribution.js");
|
package/build/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;AAAA,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,iFAAoE;AAA3D,kIAAA,iBAAiB,OAAA;AAC1B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;AAAA,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,iFAAoE;AAA3D,kIAAA,iBAAiB,OAAA;AAC1B,yEAAuE;AAA9D,qIAAA,wBAAwB,OAAA;AACjC,2EAAyE;AAAhE,uIAAA,yBAAyB,OAAA;AAClC,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA;AAC3B,+DAA6D;AAApD,2HAAA,mBAAmB,OAAA;AAC5B,2EAAwE;AAA/D,sIAAA,wBAAwB,OAAA"}
|
|
@@ -3,10 +3,10 @@ import { Logger } from '../logger.js';
|
|
|
3
3
|
export interface TopChangeArgs {
|
|
4
4
|
groupBy: 'account' | 'group';
|
|
5
5
|
direction: 'increase' | 'decrease';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
topN?: number;
|
|
7
|
+
startDate?: string;
|
|
8
|
+
endDate?: string;
|
|
9
|
+
subscription?: 'Enterprise' | 'Premium' | 'FVC' | 'BVC' | 'Plus';
|
|
10
10
|
}
|
|
11
11
|
export interface ChangeInfo {
|
|
12
12
|
item: string;
|
|
@@ -16,12 +16,14 @@ export interface ChangeInfo {
|
|
|
16
16
|
change_percent: number;
|
|
17
17
|
}
|
|
18
18
|
export interface TopChangeResult {
|
|
19
|
+
currentPeriodStart: string;
|
|
20
|
+
currentPeriodEnd: string;
|
|
21
|
+
previousPeriodStart: string;
|
|
22
|
+
previousPeriodEnd: string;
|
|
19
23
|
groupBy: 'account' | 'group';
|
|
24
|
+
direction: 'increase' | 'decrease';
|
|
20
25
|
items: ChangeInfo[];
|
|
21
26
|
total: number;
|
|
22
|
-
direction: 'increase' | 'decrease';
|
|
23
|
-
currentPeriodDays: number;
|
|
24
|
-
previousPeriodDays: number;
|
|
25
27
|
}
|
|
26
28
|
export declare class TopChangeTool {
|
|
27
29
|
private elasticsearch;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"top-change.d.ts","sourceRoot":"","sources":["../../src/tools/top-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"top-change.d.ts","sourceRoot":"","sources":["../../src/tools/top-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAetC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;CAClE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAS;gBAEX,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAKzD,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;CA8PvD"}
|
|
@@ -4,13 +4,14 @@ exports.TopChangeTool = void 0;
|
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const handlers_js_1 = require("../errors/handlers.js");
|
|
6
6
|
const field_constants_js_1 = require("../utils/field-constants.js");
|
|
7
|
+
const date_math_js_1 = require("../utils/date-math.js");
|
|
7
8
|
const TopChangeArgsSchema = zod_1.z.object({
|
|
8
9
|
groupBy: zod_1.z.enum(['account', 'group']).describe('Group by: "account" to find top accounts by visit change, "group" to find top groups by visit change'),
|
|
9
10
|
direction: zod_1.z.enum(['increase', 'decrease']).describe('Direction: "increase" for highest growth, "decrease" for highest decline'),
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
topN: zod_1.z.number().int().min(1).max(50).default(5).describe('Number of top items to return (default: 5, max: 50)'),
|
|
12
|
+
startDate: zod_1.z.string().optional().describe('Start date for current period in ISO format (YYYY-MM-DD) or date math (e.g., "now-30d", "now-1y"). Defaults to "now-30d"'),
|
|
13
|
+
endDate: zod_1.z.string().optional().describe('End date for current period in ISO format (YYYY-MM-DD) or date math (e.g., "now"). Defaults to "now"'),
|
|
14
|
+
subscription: zod_1.z.enum(['Enterprise', 'Premium', 'FVC', 'BVC', 'Plus']).optional().describe('Optional subscription tier to filter by'),
|
|
14
15
|
}).strict();
|
|
15
16
|
class TopChangeTool {
|
|
16
17
|
elasticsearch;
|
|
@@ -22,83 +23,66 @@ class TopChangeTool {
|
|
|
22
23
|
async execute(args) {
|
|
23
24
|
try {
|
|
24
25
|
const validatedArgs = TopChangeArgsSchema.parse(args);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
reason: 'Even 30 days can cause data limit errors with many accounts. Reducing to 14 days for safety.',
|
|
59
|
-
});
|
|
60
|
-
currentPeriodDays = 14;
|
|
61
|
-
previousPeriodDays = 14;
|
|
26
|
+
const topN = validatedArgs.topN || 5;
|
|
27
|
+
let currentPeriodStart = validatedArgs.startDate || 'now-30d';
|
|
28
|
+
let currentPeriodEnd = validatedArgs.endDate || 'now';
|
|
29
|
+
// This tool aggregates ALL accounts/groups before sorting, making it memory-intensive.
|
|
30
|
+
// Cap the current period to prevent data limit errors.
|
|
31
|
+
const { startDate: cappedCurrentStart, endDate: cappedCurrentEnd } = (0, date_math_js_1.capTimePeriod)(currentPeriodStart, currentPeriodEnd, 60, // Max 60 days per period
|
|
32
|
+
this.logger);
|
|
33
|
+
currentPeriodStart = cappedCurrentStart;
|
|
34
|
+
currentPeriodEnd = cappedCurrentEnd;
|
|
35
|
+
// Calculate the duration of the current period
|
|
36
|
+
const startDays = (0, date_math_js_1.parseDateMath)(currentPeriodStart);
|
|
37
|
+
const endDays = (0, date_math_js_1.parseDateMath)(currentPeriodEnd);
|
|
38
|
+
const periodDuration = Math.abs(endDays - startDays);
|
|
39
|
+
// Calculate previous period: same duration, ending where current period starts
|
|
40
|
+
// Previous period end = current period start
|
|
41
|
+
const previousPeriodEnd = currentPeriodStart;
|
|
42
|
+
// Previous period start = current period start minus the duration
|
|
43
|
+
// For date math expressions, we need to calculate the new start date
|
|
44
|
+
let previousPeriodStart;
|
|
45
|
+
if (currentPeriodStart.startsWith('now-')) {
|
|
46
|
+
// Extract the number and unit from the date math expression
|
|
47
|
+
const match = currentPeriodStart.match(/now-(\d+)([dwMy])/);
|
|
48
|
+
if (match) {
|
|
49
|
+
const currentValue = parseInt(match[1], 10);
|
|
50
|
+
const unit = match[2];
|
|
51
|
+
const newValue = currentValue + periodDuration;
|
|
52
|
+
previousPeriodStart = `now-${newValue}${unit}`;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Fallback: use days
|
|
56
|
+
const newValue = startDays + periodDuration;
|
|
57
|
+
previousPeriodStart = `now-${newValue}d`;
|
|
58
|
+
}
|
|
62
59
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
60
|
+
else {
|
|
61
|
+
// For ISO dates, we'd need a date library to properly subtract days
|
|
62
|
+
// For now, use date math as fallback
|
|
63
|
+
const newValue = startDays + periodDuration;
|
|
64
|
+
previousPeriodStart = `now-${newValue}d`;
|
|
68
65
|
}
|
|
69
66
|
this.logger.info('Getting top items by visit change', {
|
|
70
67
|
groupBy: validatedArgs.groupBy,
|
|
71
68
|
direction: validatedArgs.direction,
|
|
72
69
|
topN,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
currentPeriodStart,
|
|
71
|
+
currentPeriodEnd,
|
|
72
|
+
previousPeriodStart,
|
|
73
|
+
previousPeriodEnd,
|
|
74
|
+
periodDuration,
|
|
77
75
|
subscription: validatedArgs.subscription,
|
|
78
|
-
group: validatedArgs.group,
|
|
79
76
|
});
|
|
80
77
|
const client = this.elasticsearch.getClient();
|
|
81
78
|
const index = field_constants_js_1.FIELD_CONSTANTS.index;
|
|
82
79
|
const timeField = field_constants_js_1.FIELD_CONSTANTS.timeField;
|
|
83
80
|
const testVisitField = field_constants_js_1.FIELD_CONSTANTS.testVisitField;
|
|
84
81
|
const subscriptionField = field_constants_js_1.FIELD_CONSTANTS.subscriptionField;
|
|
85
|
-
const groupField = field_constants_js_1.FIELD_CONSTANTS.groupField;
|
|
86
|
-
// Determine the grouping field based on groupBy parameter
|
|
87
82
|
const groupingField = validatedArgs.groupBy === 'account'
|
|
88
83
|
? field_constants_js_1.FIELD_CONSTANTS.accountField
|
|
89
84
|
: field_constants_js_1.FIELD_CONSTANTS.groupField;
|
|
90
|
-
// Build date ranges
|
|
91
|
-
// Current period: last N days (e.g., now-30d to now)
|
|
92
|
-
// Previous period: N days before current (e.g., now-60d to now-30d)
|
|
93
|
-
const prevPeriodDays = previousPeriodDays;
|
|
94
|
-
const totalDays = currentPeriodDays + prevPeriodDays;
|
|
95
|
-
const currentPeriodEnd = 'now';
|
|
96
|
-
const currentPeriodStart = `now-${currentPeriodDays}d/d`;
|
|
97
|
-
const previousPeriodEnd = `now-${currentPeriodDays}d/d`;
|
|
98
|
-
const previousPeriodStart = `now-${totalDays}d/d`;
|
|
99
|
-
// Determine sort order: desc for increase, asc for decrease
|
|
100
85
|
const sortOrder = validatedArgs.direction === 'increase' ? 'desc' : 'asc';
|
|
101
|
-
// Build filters
|
|
102
86
|
const filters = [
|
|
103
87
|
{
|
|
104
88
|
range: {
|
|
@@ -108,7 +92,6 @@ class TopChangeTool {
|
|
|
108
92
|
},
|
|
109
93
|
},
|
|
110
94
|
},
|
|
111
|
-
// Exclude empty group/account names
|
|
112
95
|
{
|
|
113
96
|
exists: {
|
|
114
97
|
field: groupingField,
|
|
@@ -122,20 +105,12 @@ class TopChangeTool {
|
|
|
122
105
|
},
|
|
123
106
|
});
|
|
124
107
|
}
|
|
125
|
-
// Group filter only applies when grouping by account
|
|
126
|
-
if (validatedArgs.group && validatedArgs.groupBy === 'account') {
|
|
127
|
-
filters.push({
|
|
128
|
-
term: {
|
|
129
|
-
[groupField]: validatedArgs.group,
|
|
130
|
-
},
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
// Build Elasticsearch query
|
|
134
108
|
const aggregationName = validatedArgs.groupBy === 'account' ? 'by_account' : 'by_group';
|
|
135
109
|
const query = {
|
|
136
110
|
index,
|
|
137
111
|
size: 0,
|
|
138
112
|
body: {
|
|
113
|
+
track_total_hits: false,
|
|
139
114
|
query: {
|
|
140
115
|
bool: {
|
|
141
116
|
filter: filters,
|
|
@@ -158,9 +133,8 @@ class TopChangeTool {
|
|
|
158
133
|
[aggregationName]: {
|
|
159
134
|
terms: {
|
|
160
135
|
field: groupingField,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
exclude: '', // Exclude empty string values from aggregation
|
|
136
|
+
size: topN * 2,
|
|
137
|
+
exclude: '',
|
|
164
138
|
},
|
|
165
139
|
aggs: {
|
|
166
140
|
current_period: {
|
|
@@ -210,15 +184,12 @@ class TopChangeTool {
|
|
|
210
184
|
},
|
|
211
185
|
};
|
|
212
186
|
this.logger.debug('Executing query', { query: JSON.stringify(query, null, 2) });
|
|
213
|
-
// Execute search
|
|
214
187
|
const response = await client.search(query);
|
|
215
|
-
// Extract results
|
|
216
188
|
const items = [];
|
|
217
189
|
const aggregation = response.aggregations?.[aggregationName];
|
|
218
190
|
const buckets = aggregation?.buckets || [];
|
|
219
191
|
for (const bucket of buckets) {
|
|
220
192
|
const item = bucket.key;
|
|
221
|
-
// Filter out empty strings - they represent documents without a group/account
|
|
222
193
|
if (!item || item.trim() === '') {
|
|
223
194
|
continue;
|
|
224
195
|
}
|
|
@@ -243,12 +214,14 @@ class TopChangeTool {
|
|
|
243
214
|
count: items.length,
|
|
244
215
|
});
|
|
245
216
|
return {
|
|
217
|
+
currentPeriodStart,
|
|
218
|
+
currentPeriodEnd,
|
|
219
|
+
previousPeriodStart,
|
|
220
|
+
previousPeriodEnd,
|
|
246
221
|
groupBy: validatedArgs.groupBy,
|
|
222
|
+
direction: validatedArgs.direction,
|
|
247
223
|
items,
|
|
248
224
|
total: items.length,
|
|
249
|
-
direction: validatedArgs.direction,
|
|
250
|
-
currentPeriodDays,
|
|
251
|
-
previousPeriodDays,
|
|
252
225
|
};
|
|
253
226
|
}
|
|
254
227
|
catch (error) {
|
|
@@ -261,6 +234,10 @@ class TopChangeTool {
|
|
|
261
234
|
throw error;
|
|
262
235
|
}
|
|
263
236
|
this.logger.error('Failed to get top items by change', {}, error);
|
|
237
|
+
// Check if this is a ResponseError from Elasticsearch client
|
|
238
|
+
if (error && typeof error === 'object' && 'body' in error) {
|
|
239
|
+
throw handlers_js_1.ElasticsearchError.fromResponseError(error, 'top_change', args);
|
|
240
|
+
}
|
|
264
241
|
throw new handlers_js_1.ElasticsearchError('Failed to get top items by visit change from Elasticsearch', error, { args });
|
|
265
242
|
}
|
|
266
243
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"top-change.js","sourceRoot":"","sources":["../../src/tools/top-change.ts"],"names":[],"mappings":";;;AAEA,6BAAwB;AACxB,uDAA4E;AAC5E,oEAA8D;
|
|
1
|
+
{"version":3,"file":"top-change.js","sourceRoot":"","sources":["../../src/tools/top-change.ts"],"names":[],"mappings":"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"}
|