Пример #1
0
        public void CustomSegment_HasCorrectTraceNameAndMetrics()
        {
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);
            var segment = _agent.StartCustomSegmentOrThrow("customName");

            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            var expectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "Custom/customName"
                },
                new ExpectedMetric {
                    Name = "Custom/customName", Scope = "WebTransaction/Action/name"
                }
            };
            var expectedSegments = new[]
            {
                "customName"
            };
            var actualMetrics    = _compositeTestAgent.Metrics.ToList();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionTraceAssertions.SegmentsExist(expectedSegments, transactionTrace),
                () => MetricAssertions.MetricsExist(expectedMetrics, actualMetrics)
                );
        }
Пример #2
0
        public void DatastoreSegment_HasCorrectTraceNameAndMetrics_WhenNullModelAndOperation()
        {
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);
            var segment = _agent.StartDatastoreRequestSegmentOrThrow(null, DatastoreVendor.MSSQL, null);

            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            var expectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "Datastore/all"
                },
                new ExpectedMetric {
                    Name = "Datastore/allWeb"
                },
                new ExpectedMetric {
                    Name = "Datastore/MSSQL/all"
                },
                new ExpectedMetric {
                    Name = "Datastore/MSSQL/allWeb"
                },
                new ExpectedMetric {
                    Name = "Datastore/operation/MSSQL/other", Scope = "WebTransaction/Action/name"
                },
                new ExpectedMetric {
                    Name = "Datastore/operation/MSSQL/other"
                }
            };
            var unexpectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "Datastore/allOther"
                }
            };
            var expectedSegments = new[]
            {
                "Datastore/operation/MSSQL/other"
            };
            var actualMetrics    = _compositeTestAgent.Metrics.ToList();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionTraceAssertions.SegmentsExist(expectedSegments, transactionTrace),
                () => MetricAssertions.MetricsExist(expectedMetrics, actualMetrics),
                () => MetricAssertions.MetricsDoNotExist(unexpectedMetrics, actualMetrics)
                );
        }
Пример #3
0
        public void ExternalSegment_HasCorrectTraceNameAndMetrics()
        {
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);
            var segment = _agent.StartExternalRequestSegmentOrThrow(new Uri("http://www.newrelic.com/test"), "POST");

            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            var expectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "External/all"
                },
                new ExpectedMetric {
                    Name = "External/allWeb"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/all"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/Stream/POST"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/Stream/POST", Scope = "WebTransaction/Action/name"
                }
            };
            var unexpectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "External/allOther"
                }
            };
            var expectedSegments = new[]
            {
                "External/www.newrelic.com/Stream/POST"
            };
            var actualMetrics    = _compositeTestAgent.Metrics.ToList();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionTraceAssertions.SegmentsExist(expectedSegments, transactionTrace),
                () => MetricAssertions.MetricsExist(expectedMetrics, actualMetrics),
                () => MetricAssertions.MetricsDoNotExist(unexpectedMetrics, actualMetrics)
                );
        }
Пример #4
0
        public void synthetics_attributes_when_no_header_is_present()
        {
            // ARRANGE
            var encodingKey = "foo";

            _compositeTestAgent.ServerConfiguration.TrustedIds  = new long[] { 123 };
            _compositeTestAgent.ServerConfiguration.EncodingKey = encodingKey;
            _compositeTestAgent.PushConfiguration();


            // ==== ACT ====
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);

            _agent.CurrentTransaction.AcceptDistributedTraceHeaders(new KeyValuePair <string, string> [0], HeaderFunctions.GetHeaders, TransportType.HTTP);

            var segment = _agent.StartTransactionSegmentOrThrow("segmentName");

            segment.End();
            tx.End();
            _compositeTestAgent.Harvest();

            // ASSERT
            var unexpectedEventAttributes = new List <string>
            {
                "nr.guid",
                "nr.syntheticsResourceId",
                "nr.syntheticsJobId",
                "nr.syntheticsMonitorId"
            };
            var unexpectedTraceAttributes = new List <string>
            {
                "synthetics_resource_id",
                "synthetics_job_id",
                "synthetics_monitor_id"
            };
            var transactionEvent = _compositeTestAgent.TransactionEvents.First();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionEventAssertions.DoesNotHaveAttributes(unexpectedEventAttributes, AttributeClassification.Intrinsics, transactionEvent),
                () => TransactionTraceAssertions.DoesNotHaveAttributes(unexpectedTraceAttributes, AttributeClassification.Intrinsics, transactionTrace)
                );
        }
        public void cat_attributes_when_no_headers_are_provided()
        {
            // ARRANGE
            var encodingKey = "foo";

            _compositeTestAgent.ServerConfiguration.TrustedIds  = new long[] { 123 };
            _compositeTestAgent.ServerConfiguration.EncodingKey = encodingKey;
            _compositeTestAgent.PushConfiguration();


            // ==== ACT ====
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);
            var segment = _agent.StartTransactionSegmentOrThrow("segmentName");

            segment.End();
            tx.End();
            _compositeTestAgent.Harvest();

            // ASSERT
            var unexpectedEventAttributes = new List <string>
            {
                "nr.referringPathHash",
                "nr.referringTransactionGuid",
                "nr.alternatePathHashes",
                "nr.guid",
                "nr.pathHash"
            };
            var unexpectedTraceAttributes = new List <string>
            {
                "client_cross_process_id",
                "referring_transaction_guid",
                "path_hash"
            };
            var transactionEvent = _compositeTestAgent.TransactionEvents.First();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionEventAssertions.DoesNotHaveAttributes(unexpectedEventAttributes, AttributeClassification.Intrinsics, transactionEvent),
                () => TransactionTraceAssertions.DoesNotHaveAttributes(unexpectedTraceAttributes, AttributeClassification.Intrinsics, transactionTrace)
                );
        }
Пример #6
0
        public void MessageBrokerSegment_HasCorrectTraceNameAndMetrics()
        {
            var tx = _agent.CreateTransaction(
                destinationType: MessageBrokerDestinationType.Queue,
                brokerVendorName: "vendor1",
                destination: "queueA");
            var segment = _agent.StartMessageBrokerSegmentOrThrow("vendor1", MessageBrokerDestinationType.Queue, "queueA",
                                                                  MessageBrokerAction.Consume);

            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            var expectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "MessageBroker/vendor1/Queue/Consume/Named/queueA"
                },
                new ExpectedMetric {
                    Name = "OtherTransaction/Message/vendor1/Queue/Named/queueA"
                },
                new ExpectedMetric {
                    Name = "OtherTransactionTotalTime/Message/vendor1/Queue/Named/queueA"
                },
                new ExpectedMetric {
                    Name = "MessageBroker/vendor1/Queue/Consume/Named/queueA", Scope = "OtherTransaction/Message/vendor1/Queue/Named/queueA"
                }
            };
            var expectedSegments = new[]
            {
                "MessageBroker/vendor1/Queue/Consume/Named/queueA"
            };
            var actualMetrics    = _compositeTestAgent.Metrics.ToList();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionTraceAssertions.SegmentsExist(expectedSegments, transactionTrace),
                () => MetricAssertions.MetricsExist(expectedMetrics, actualMetrics)
                );
        }
Пример #7
0
        public void synthetics_attributes_when_header_is_present()
        {
            // ARRANGE
            var encodingKey     = "foo";
            var version         = 1;
            var clientAccountId = 123;
            var resourceId      = "resourceId";
            var jobId           = "jobId";
            var monitorId       = "monitorId";

            _compositeTestAgent.ServerConfiguration.TrustedIds  = new long[] { clientAccountId };
            _compositeTestAgent.ServerConfiguration.EncodingKey = encodingKey;
            _compositeTestAgent.PushConfiguration();

            var syntheticsHeaderValue = Strings.Base64Encode(
                string.Format(@"[{0}, {1}, ""{2}"", ""{3}"", ""{4}""]", version, clientAccountId, resourceId, jobId,
                              monitorId), encodingKey);
            var requestHeaders = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>(SyntheticsHeaderKey, syntheticsHeaderValue)
            };

            // ==== ACT ====
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);

            tx.AcceptDistributedTraceHeaders(requestHeaders, HeaderFunctions.GetHeaders, TransportType.HTTP);

            var segment = _agent.StartTransactionSegmentOrThrow("segmentName");

            segment.End();
            tx.End();
            _compositeTestAgent.Harvest();

            // ASSERT
            var unexpectedEventAttributes = new List <string>
            {
                "nr.alternatePathHashes"
            };
            var expectedEventAttributes = new List <ExpectedAttribute>
            {
                new ExpectedAttribute {
                    Key = "nr.guid"
                },
                new ExpectedAttribute {
                    Key = "nr.syntheticsResourceId", Value = resourceId
                },
                new ExpectedAttribute {
                    Key = "nr.syntheticsJobId", Value = jobId
                },
                new ExpectedAttribute {
                    Key = "nr.syntheticsMonitorId", Value = monitorId
                }
            };
            var expectedTraceAttributes = new List <ExpectedAttribute>
            {
                new ExpectedAttribute {
                    Key = "synthetics_resource_id", Value = resourceId
                },
                new ExpectedAttribute {
                    Key = "synthetics_job_id", Value = jobId
                },
                new ExpectedAttribute {
                    Key = "synthetics_monitor_id", Value = monitorId
                }
            };
            var transactionEvent = _compositeTestAgent.TransactionEvents.First();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () =>
                TransactionEventAssertions.HasAttributes(expectedEventAttributes, AttributeClassification.Intrinsics,
                                                         transactionEvent),
                () =>
                TransactionEventAssertions.DoesNotHaveAttributes(unexpectedEventAttributes,
                                                                 AttributeClassification.Intrinsics, transactionEvent),
                () =>
                TransactionTraceAssertions.HasAttributes(expectedTraceAttributes, AttributeClassification.Intrinsics,
                                                         transactionTrace)
                );
        }
        public void cat_attributes_when_header_is_present()
        {
            // ARRANGE
            var encodingKey           = "foo";
            var clientAccountId       = 123;
            var crossProcessId        = $"{clientAccountId}#456";
            var clientTransactionGuid = "transaction guid";
            var clientTripId          = "trip id";
            var clientPathHash        = "path hash";

            _compositeTestAgent.ServerConfiguration.TrustedIds  = new long[] { clientAccountId };
            _compositeTestAgent.ServerConfiguration.EncodingKey = encodingKey;
            _compositeTestAgent.PushConfiguration();

            var newRelicIdHeader          = new KeyValuePair <string, string>("X-NewRelic-ID", Strings.Base64Encode(crossProcessId, encodingKey));
            var newRelicTransactionHeader = new KeyValuePair <string, string>("X-NewRelic-Transaction", Strings.Base64Encode($@"[""{clientTransactionGuid}"", ""{false}"", ""{clientTripId}"", ""{clientPathHash}""]", encodingKey));
            var requestHeaders            = new[] { newRelicIdHeader, newRelicTransactionHeader };

            // ==== ACT ====
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);

            _agent.CurrentTransaction.AcceptDistributedTraceHeaders(requestHeaders, HeaderFunctions.GetHeaders, TransportType.HTTP);

            var segment = _agent.StartTransactionSegmentOrThrow("segmentName");

            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            // ASSERT
            var unexpectedEventAttributes = new List <string>
            {
                "nr.alternatePathHashes"
            };

            var expectedEventAttributes = new List <ExpectedAttribute>
            {
                new ExpectedAttribute {
                    Key = "nr.guid"
                },
                new ExpectedAttribute {
                    Key = "nr.tripId", Value = clientTripId
                },
                new ExpectedAttribute {
                    Key = "nr.pathHash", Value = "b5880367"
                },
                new ExpectedAttribute {
                    Key = "nr.referringTransactionGuid", Value = clientTransactionGuid
                },
                new ExpectedAttribute {
                    Key = "nr.referringPathHash", Value = "path hash"
                }
            };

            var expectedTraceAttributes = new List <ExpectedAttribute>
            {
                new ExpectedAttribute {
                    Key = "client_cross_process_id", Value = crossProcessId
                },
                new ExpectedAttribute {
                    Key = "trip_id", Value = clientTripId
                },
                new ExpectedAttribute {
                    Key = "path_hash", Value = "b5880367"
                },
                new ExpectedAttribute {
                    Key = "referring_transaction_guid", Value = clientTransactionGuid
                },
            };

            var transactionEvent = _compositeTestAgent.TransactionEvents.First();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple
            (
                () => TransactionEventAssertions.HasAttributes(expectedEventAttributes, AttributeClassification.Intrinsics, transactionEvent),
                () => TransactionEventAssertions.DoesNotHaveAttributes(unexpectedEventAttributes, AttributeClassification.Intrinsics, transactionEvent),
                () => TransactionTraceAssertions.HasAttributes(expectedTraceAttributes, AttributeClassification.Intrinsics, transactionTrace)
            );
        }
Пример #9
0
        public void DatastoreSegment_HasNoInstanceMetric_WhenInstanceReportingIsDisabled()
        {
            _compositeTestAgent.LocalConfiguration.datastoreTracer.instanceReporting.enabled = false;
            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);
            var segment = _agent.StartDatastoreRequestSegmentOrThrow("INSERT", DatastoreVendor.MSSQL, "MyAwesomeTable", null, null, "HostName", "1433", "MyDatabase");

            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            var expectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "Datastore/all"
                },
                new ExpectedMetric {
                    Name = "Datastore/allWeb"
                },
                new ExpectedMetric {
                    Name = "Datastore/MSSQL/all"
                },
                new ExpectedMetric {
                    Name = "Datastore/MSSQL/allWeb"
                },
                new ExpectedMetric {
                    Name = "Datastore/statement/MSSQL/MyAwesomeTable/INSERT"
                },
                new ExpectedMetric {
                    Name = "Datastore/statement/MSSQL/MyAwesomeTable/INSERT", Scope = "WebTransaction/Action/name"
                },
                new ExpectedMetric {
                    Name = "Datastore/operation/MSSQL/INSERT"
                }
            };
            var unexpectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "Datastore/allOther"
                },
                new ExpectedMetric {
                    Name = "Datastore/instance/MSSQL/HostName/1433"
                }
            };
            var expectedSegments = new[]
            {
                "Datastore/statement/MSSQL/MyAwesomeTable/INSERT"
            };
            var actualMetrics    = _compositeTestAgent.Metrics.ToList();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionTraceAssertions.SegmentsExist(expectedSegments, transactionTrace),
                () => MetricAssertions.MetricsExist(expectedMetrics, actualMetrics),
                () => MetricAssertions.MetricsDoNotExist(unexpectedMetrics, actualMetrics)
                );
        }
Пример #10
0
        public void ExternalSegment_HasCorrectTraceNameAndMetrics_IfCatResponseReceived()
        {
            const string encodingKey = "foo";

            _compositeTestAgent.ServerConfiguration.EncodingKey = encodingKey;
            _compositeTestAgent.PushConfiguration();

            var tx = _agent.CreateTransaction(
                isWeb: true,
                category: EnumNameCache <WebTransactionType> .GetName(WebTransactionType.Action),
                transactionDisplayName: "name",
                doNotTrackAsUnitOfWork: true);
            var segment = _agent.StartExternalRequestSegmentOrThrow(new Uri("http://www.newrelic.com/test"), "POST");

            var catResponseData = new CrossApplicationResponseData("123#456", "transactionName", 1.1f, 2.2f, 3, "guid");
            var responseHeaders = new Dictionary <string, string>
            {
                { "X-NewRelic-App-Data", HeaderEncoder.EncodeSerializedData(JsonConvert.SerializeObject(catResponseData), encodingKey) }
            };

            tx.ProcessInboundResponse(responseHeaders, segment);
            segment.End();
            tx.End();

            _compositeTestAgent.Harvest();

            var expectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "External/all"
                },
                new ExpectedMetric {
                    Name = "External/allWeb"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/all"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/Stream/POST"
                },
                new ExpectedMetric {
                    Name = "ExternalApp/www.newrelic.com/123#456/all"
                },
                new ExpectedMetric {
                    Name = "ExternalTransaction/www.newrelic.com/123#456/transactionName"
                },
                new ExpectedMetric {
                    Name = "ExternalTransaction/www.newrelic.com/123#456/transactionName", Scope = "WebTransaction/Action/name"
                }
            };
            var unexpectedMetrics = new[]
            {
                new ExpectedMetric {
                    Name = "External/allOther"
                },
                new ExpectedMetric {
                    Name = "External/www.newrelic.com/Stream/POST", Scope = "WebTransaction/Action/name"
                }
            };
            var unexpectedSegments = new[]
            {
                "External/www.newrelic.com/Stream/POST"
            };
            var expectedSegments = new[]
            {
                "ExternalTransaction/www.newrelic.com/123#456/transactionName"
            };
            var actualMetrics    = _compositeTestAgent.Metrics.ToList();
            var transactionTrace = _compositeTestAgent.TransactionTraces.First();

            NrAssert.Multiple(
                () => TransactionTraceAssertions.SegmentsExist(expectedSegments, transactionTrace),
                () => TransactionTraceAssertions.SegmentsDoNotExist(unexpectedSegments, transactionTrace),
                () => MetricAssertions.MetricsExist(expectedMetrics, actualMetrics),
                () => MetricAssertions.MetricsDoNotExist(unexpectedMetrics, actualMetrics)
                );
        }