public void AddRange(IAttributeValueCollection fromCollection) { foreach (var classification in _allClassifications) { AddRange(fromCollection.GetAttributeValues(classification)); } }
/// <summary> /// Creates a single root span, much like we do for Transaction Traces, since DT requires that there be only one parent-less span per txn (or at least the UI/Backend is expecting that). /// </summary> private SpanAttributeValueCollection GenerateRootSpan(string rootSpanId, ImmutableTransaction immutableTransaction, string transactionName, IAttributeValueCollection transactionAttribValues) { var spanAttributes = new SpanAttributeValueCollection(); spanAttributes.AddRange(transactionAttribValues.GetAttributeValues(AttributeClassification.AgentAttributes)); _attribDefs.TransactionNameForSpan.TrySetValue(spanAttributes, transactionName); spanAttributes.Priority = immutableTransaction.Priority; spanAttributes.AddRange(immutableTransaction.CommonSpanAttributes); if (immutableTransaction.TracingState != null) { _attribDefs.ParentId.TrySetValue(spanAttributes, immutableTransaction.TracingState.ParentId ?? immutableTransaction.TracingState.Guid); _attribDefs.TrustedParentId.TrySetValue(spanAttributes, immutableTransaction.TracingState.Guid); _attribDefs.TracingVendors.TrySetValue(spanAttributes, immutableTransaction.TracingState.VendorStateEntries ?? null); } if (_configurationService.Configuration.ErrorCollectorEnabled && immutableTransaction.TransactionMetadata.ReadOnlyTransactionErrorState.HasError) { _attribDefs.SpanErrorClass.TrySetValue(spanAttributes, immutableTransaction.TransactionMetadata.ReadOnlyTransactionErrorState.ErrorData.ErrorTypeName); _attribDefs.SpanErrorMessage.TrySetValue(spanAttributes, immutableTransaction.TransactionMetadata.ReadOnlyTransactionErrorState.ErrorData.ErrorMessage); if (immutableTransaction.TransactionMetadata.ReadOnlyTransactionErrorState.ErrorData.IsExpected) { _attribDefs.SpanIsErrorExpected.TrySetValue(spanAttributes, true); } } _attribDefs.Guid.TrySetValue(spanAttributes, rootSpanId); _attribDefs.Timestamp.TrySetValue(spanAttributes, immutableTransaction.StartTime); _attribDefs.Duration.TrySetValue(spanAttributes, immutableTransaction.Duration); _attribDefs.NameForSpan.TrySetValue(spanAttributes, transactionName); _attribDefs.SpanCategory.TrySetValue(spanAttributes, SpanCategory.Generic); _attribDefs.NrEntryPoint.TrySetValue(spanAttributes, true); spanAttributes.AddRange(transactionAttribValues.GetAttributeValues(AttributeClassification.UserAttributes)); spanAttributes.MakeImmutable(); return(spanAttributes); }
public static Dictionary <string, object> ToDictionary(this IAttributeValueCollection attribValueCollection, params AttributeClassification[] classifications) { if (classifications == null || classifications.Length == 0) { classifications = new[] { AttributeClassification.Intrinsics, AttributeClassification.AgentAttributes, AttributeClassification.UserAttributes }; } var attribValues = new List <IAttributeValue>(); foreach (var classification in classifications) { attribValues.AddRange(attribValueCollection.GetAttributeValues(classification)); } return(attribValues.ToDictionary(x => x.AttributeDefinition.Name, x => x.Value)); }
public static Dictionary <string, object> ToDictionary(this IAttributeValueCollection attribValueCollection, params AttributeClassification[] classifications) { if (classifications == null || classifications.Length == 0) { classifications = new[] { AttributeClassification.Intrinsics, AttributeClassification.AgentAttributes, AttributeClassification.UserAttributes }; } var attribValues = new Dictionary <string, object>(); foreach (var classification in classifications) { foreach (var attribVal in attribValueCollection.GetAttributeValues(classification)) { attribValues[attribVal.AttributeDefinition.Name] = attribVal.Value; } } return(attribValues); }
public void AttributeClassificationIsCorrect() { _attribDefs.OriginalUrl.TrySetValue(_attribValues, "banana"); _attribDefs.GetCustomAttributeForTransaction("pie").TrySetValue(_attribValues, "cake"); var agentAttribsDic = _attribValues.GetAttributeValuesDic(AttributeClassification.AgentAttributes); var userAttribsDic = _attribValues.GetAttributeValuesDic(AttributeClassification.UserAttributes); var allAttribs = _attribValues.GetAttributeValues(AttributeClassification.Intrinsics) .Union(_attribValues.GetAttributeValues(AttributeClassification.AgentAttributes)) .Union(_attribValues.GetAttributeValues(AttributeClassification.UserAttributes)) .ToList(); NrAssert.Multiple ( () => Assert.AreEqual(2, allAttribs.Count), () => Assert.AreEqual(1, agentAttribsDic.Count()), () => Assert.AreEqual("banana", agentAttribsDic["original_url"]), () => Assert.AreEqual(1, userAttribsDic.Count()), () => Assert.AreEqual("cake", userAttribsDic["pie"]) ); }