11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
|
# File 'lib/solid_apm/mcp/impactful_transactions_resource.rb', line 11
def content
transactions_with_impact = calculate_impactful_transactions
result = {
metadata: {
total_transactions_analyzed: SolidApm::Transaction.where(timestamp: 24.hours.ago..).count,
analysis_period: "last 24 hours",
ordered_by: "More impactful first: based on P95 latency, transaction frequency, span complexity."
},
transactions: transactions_with_impact.map do |transaction_data|
{
id: transaction_data[:transaction].id,
uuid: transaction_data[:transaction].uuid,
name: transaction_data[:transaction].name,
type: transaction_data[:transaction].type,
metrics: {
p95_latency_ms: transaction_data[:p95_latency],
avg_duration_ms: transaction_data[:avg_duration],
max_duration_ms: transaction_data[:max_duration],
transactions_per_minute: transaction_data[:tpm],
max_transactions_per_minute: transaction_data[:max_tpm],
avg_spans_per_transaction: transaction_data[:avg_spans],
max_spans_per_transaction: transaction_data[:max_spans],
total_occurrences: transaction_data[:total_count],
},
sample_transaction: {
uuid: transaction_data[:sample_transaction]&.uuid,
duration_ms: transaction_data[:sample_transaction]&.duration,
span_count: transaction_data[:sample_span_count],
timestamp: transaction_data[:sample_transaction]&.timestamp
}
}
end
}
JSON.generate(result)
rescue StandardError => e
JSON.generate({ error: e.message, backtrace: e.backtrace.first(5) })
end
|