Skip to content

Commit

Permalink
Stop recording transaction metrics (#1540)
Browse files Browse the repository at this point in the history
This commit removes the recording and reporting
of transaction metrics

- transaction.duration.sum.us
- transaction.duration.count
- transaction.breakdown.count

Closes #1523
  • Loading branch information
russcam authored Nov 8, 2021
1 parent 7e19e78 commit afbc9e7
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 140 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ internal class BreakdownMetricsProvider : IMetricsProvider
internal const string SpanSelfTimeCount = SpanSelfTime + ".count";
internal const string SpanSelfTimeSumUs = SpanSelfTime + ".sum.us";
internal const int MetricLimit = 1000;
internal const string TransactionDurationCount = "transaction.duration.count";
internal const string TransactionDurationSumUs = "transaction.duration.sum.us";
internal const string TransactionBreakdownCount = "transaction.breakdown.count";

private readonly List<MetricSet> _itemsToSend = new();
private readonly IApmLogger _logger;
Expand Down Expand Up @@ -84,29 +81,6 @@ public void CaptureTransaction(Transaction transaction)
_loggedWarning = true;
}
}

var transactionMetric =
new MetricSet(timestampNow,
new List<MetricSample>
{
new(TransactionDurationCount, _transactionCount),
new(TransactionDurationSumUs, transaction.Duration!.Value * 1000),
new(TransactionBreakdownCount, _transactionCount),
}) { Transaction = new TransactionInfo { Name = transaction.Name, Type = transaction.Type } };

if (_itemsToSend.Count < MetricLimit)
_itemsToSend.Add(transactionMetric);
else
{
if (!_loggedWarning)
{
_logger.Warning()
?.Log("The limit of {MetricLimit} metricsets has been reached, no new metricsets will be created until "
+ "the current set is sent to APM Server.",
MetricLimit);
_loggedWarning = true;
}
}
}
}

Expand Down
3 changes: 0 additions & 3 deletions test/Elastic.Apm.Tests.MockApmServer/MetricsAssertValid.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ internal static class MetricsAssertValid
{ SystemTotalCpuProvider.SystemCpuTotalPct, new MetricTypeMetadata(VerifySystemTotalCpu, true) },
{ BreakdownMetricsProvider.SpanSelfTimeCount, new MetricTypeMetadata(Verify) },
{ BreakdownMetricsProvider.SpanSelfTimeSumUs, new MetricTypeMetadata(Verify) },
{ BreakdownMetricsProvider.TransactionDurationCount, new MetricTypeMetadata(Verify) },
{ BreakdownMetricsProvider.TransactionDurationSumUs, new MetricTypeMetadata(Verify) },
{ BreakdownMetricsProvider.TransactionBreakdownCount, new MetricTypeMetadata(Verify) },
};

internal static void AssertValid(MetricSetDto metricSet)
Expand Down
123 changes: 12 additions & 111 deletions test/Elastic.Apm.Tests/BreakdownTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public class BreakdownTests
// total self type
// ██████████████████████████████ 30 30 transaction
// 10 20 30
// {"metricset":{"timestamp":1556893458478000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458478000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":30}}}}
[Fact]
public void AcceptanceTest01()
Expand All @@ -39,15 +38,7 @@ public void AcceptanceTest01()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(2);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && s.KeyValue.Value == 30)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(1);

metrics.Should()
.Contain(
Expand All @@ -63,7 +54,6 @@ public void AcceptanceTest01()
// ██████████░░░░░░░░░░██████████ 30 20 transaction
// └─────────██████████ 10 10 db.mysql
// 10 20 30
// {"metricset":{"timestamp":1556893458387000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458387000,"transaction":{"name":"test","type":"request"},"span":{"type":"db","subtype":"mysql"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":10}}}}
// {"metricset":{"timestamp":1556893458387000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":20}}}}

Expand All @@ -88,15 +78,7 @@ public void AcceptanceTest02()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(3);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && s.KeyValue.Value == 30)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(2);

metrics.Should()
.Contain(
Expand All @@ -122,7 +104,6 @@ public void AcceptanceTest02()
// ██████████░░░░░░░░░░██████████ 30 20 transaction
// └─────────██████████ 10 10 app
// 10 20 30
//{"metricset":{"timestamp":1556893458471000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
//{"metricset":{"timestamp":1556893458471000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":2},"span.self_time.sum.us":{"value":30}}}}
[Fact]
public void AcceptanceTest03()
Expand All @@ -145,15 +126,7 @@ public void AcceptanceTest03()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(2);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && s.KeyValue.Value == 30)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(1);

metrics.Should()
.Contain(
Expand All @@ -170,7 +143,6 @@ public void AcceptanceTest03()
// ├─────────██████████ 10 10 db.mysql
// └─────────██████████ 10 10 db.mysql
// 10 20 30
// {"metricset":{"timestamp":1556893458375000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458375000,"transaction":{"name":"test","type":"request"},"span":{"type":"db","subtype":"mysql"},"samples":{"span.self_time.count":{"value":2},"span.self_time.sum.us":{"value":20}}}}
// {"metricset":{"timestamp":1556893458375000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{" ":{"value":1},"span.self_time.sum.us":{"value":20}}}}

Expand Down Expand Up @@ -198,15 +170,7 @@ public void AcceptanceTest04()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(3);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && s.KeyValue.Value == 30)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(2);

metrics.Should()
.Contain(
Expand All @@ -233,7 +197,6 @@ public void AcceptanceTest04()
// ├─────────██████████ 10 10 db.mysql
// └──────────────██████████ 10 10 db.mysql
// 10 20 30
// {"metricset":{"timestamp":1556893458417000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458417000,"transaction":{"name":"test","type":"request"},"span":{"type":"db","subtype":"mysql"},"samples":{"span.self_time.count":{"value":2},"span.self_time.sum.us":{"value":20}}}}
// {"metricset":{"timestamp":1556893458417000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":15}}}}
[Fact]
Expand All @@ -260,15 +223,7 @@ public void AcceptanceTest05()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(3);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && s.KeyValue.Value == 30)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(2);

metrics.Should()
.Contain(
Expand All @@ -295,7 +250,6 @@ public void AcceptanceTest05()
// ├────██████████ 10 10 db.mysql
// └──────────────██████████ 10 10 db.mysql
// 10 20 30
// {"metricset":{"timestamp":1556893458462000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458462000,"transaction":{"name":"test","type":"request"},"span":{"type":"db","subtype":"mysql"},"samples":{"span.self_time.count":{"value":2},"span.self_time.sum.us":{"value":20}}}}
// {"metricset":{"timestamp":1556893458462000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":10}}}}
[Fact]
Expand All @@ -322,15 +276,7 @@ public void AcceptanceTest06()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(3);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && s.KeyValue.Value == 30)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(2);

metrics.Should()
.Contain(
Expand All @@ -357,7 +303,6 @@ public void AcceptanceTest06()
// ├─────────█████ 5 5 db.mysql
// └───────────────────█████ 5 5 db.mysql
// 10 20 30
// {"metricset":{"timestamp":1556893458453000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458453000,"transaction":{"name":"test","type":"request"},"span":{"type":"db","subtype":"mysql"},"samples":{"span.self_time.count":{"value":2},"span.self_time.sum.us":{"value":10}}}}
// {"metricset":{"timestamp":1556893458453000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":20}}}}
[Fact]
Expand All @@ -384,15 +329,7 @@ public void AcceptanceTest07()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(3);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && s.KeyValue.Value == 30)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(2);

metrics.Should()
.Contain(
Expand Down Expand Up @@ -420,7 +357,6 @@ public void AcceptanceTest07()
// └────██████████ 10 10 db.mysql
// 10 20 30
//
// {"metricset":{"timestamp":1556893458398000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":30},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458398000,"transaction":{"name":"test","type":"request"},"span":{"type":"db","subtype":"mysql"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":10}}}}
// {"metricset":{"timestamp":1556893458398000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":2},"span.self_time.sum.us":{"value":25}}}}
[Fact]
Expand Down Expand Up @@ -448,15 +384,7 @@ public void AcceptanceTest08()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(3);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && DoubleCompare(s.KeyValue.Value, 30))
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(2);

metrics.Should()
.Contain(
Expand Down Expand Up @@ -484,7 +412,6 @@ public void AcceptanceTest08()
// └─────────██████████ 10 10 db.mysql
// 10 20 30
//
// {"metricset":{"timestamp":1556893458444000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":20},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458444000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":10}}}}
[Fact]
public void AcceptanceTest09()
Expand All @@ -510,15 +437,7 @@ public void AcceptanceTest09()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(2);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && DoubleCompare(s.KeyValue.Value, 20))
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(1);

metrics.Should()
.Contain(
Expand All @@ -534,7 +453,6 @@ public void AcceptanceTest09()
// ██████████░░░░░░░░░░ 20 10 transaction
// └─────────████████████████████ 20 20 db.mysql
// 10 20 30
// {"metricset":{"timestamp":1556893458409000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":20},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458409000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":10}}}}
[Fact]
public void AcceptanceTest10()
Expand All @@ -555,15 +473,7 @@ public void AcceptanceTest10()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(2);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && DoubleCompare(s.KeyValue.Value, 20))
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(1);

metrics.Should()
.Contain(
Expand All @@ -580,7 +490,6 @@ public void AcceptanceTest10()
// └───────────────────██████████ 10 10 db.mysql
// 10 20 30
//
// {"metricset":{"timestamp":1556893458434000,"transaction":{"name":"test","type":"request"},"samples":{"transaction.duration.count":{"value":1},"transaction.duration.sum.us":{"value":10},"transaction.breakdown.count":{"value":1}}}}
// {"metricset":{"timestamp":1556893458434000,"transaction":{"name":"test","type":"request"},"span":{"type":"app"},"samples":{"span.self_time.count":{"value":1},"span.self_time.sum.us":{"value":10}}}}
[Fact]
public void AcceptanceTest11()
Expand All @@ -602,15 +511,7 @@ public void AcceptanceTest11()

var metrics = metricSets as MetricSet[] ?? metricSets.ToArray();
metrics.Should().NotBeNullOrEmpty();
metrics.Count().Should().Be(2);
metrics.Should()
.Contain(
n => n.Transaction.Name.Equals("test")
&& n.Transaction.Type.Equals("request")
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.count") && s.KeyValue.Value == 1)
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.duration.sum.us") && DoubleCompare(s.KeyValue.Value, 10))
&& n.Samples.Any(s => s.KeyValue.Key.Equals("transaction.breakdown.count") && s.KeyValue.Value == 1)
);
metrics.Length.Should().Be(1);

metrics.Should()
.Contain(
Expand Down Expand Up @@ -712,7 +613,7 @@ public void BreakdownLogTest()
.Be(2);
}

private bool DoubleCompare(double value, double expectedValue) => Math.Abs(value - expectedValue) < 1000;
private static bool DoubleCompare(double value, double expectedValue) => Math.Abs(value - expectedValue) < 1000;

private (ApmAgent, BreakdownMetricsProvider) SetUpAgent(IApmLogger logger = null)
{
Expand Down

0 comments on commit afbc9e7

Please sign in to comment.