public void GivenAGRPCTransactionWithStatus(string responseCode) { var transaction = _agent.Tracer.StartTransaction("GRPCTransaction", "Test"); transaction.Outcome = GrpcHelper.GrpcServerReturnCodeToOutcome(responseCode); _lastTransaction = transaction; }
internal static void StopTransaction(Transaction transaction, HttpContext context, IApmLogger logger) { if (transaction == null) { return; } var grpcCallInfo = CollectGrpcInfo(); try { if (!transaction.HasCustomName) { //fixup Transaction.Name - e.g. /user/profile/1 -> /user/profile/{id} var routeData = context.GetRouteData()?.Values; if (routeData != null && context.Response.StatusCode != StatusCodes.Status404NotFound) { logger?.Trace()?.Log("Calculating transaction name based on route data"); var name = Transaction.GetNameFromRouteContext(routeData); if (!string.IsNullOrWhiteSpace(name)) { transaction.Name = $"{context.Request.Method} {name}"; } } else if (context.Response.StatusCode == StatusCodes.Status404NotFound) { logger?.Trace() ? .Log("No route data found or status code is 404 - setting transaction name to 'unknown route"); transaction.Name = $"{context.Request.Method} unknown route"; } } if (grpcCallInfo == default) { transaction.Result = Transaction.StatusCodeToResult(GetProtocolName(context.Request.Protocol), context.Response.StatusCode); SetOutcomeForHttpResult(transaction, context.Response.StatusCode); } else { transaction.Name = grpcCallInfo.methodname; transaction.Result = GrpcHelper.GrpcReturnCodeToString(grpcCallInfo.result); transaction.Outcome = GrpcHelper.GrpcServerReturnCodeToOutcome(transaction.Result); } if (transaction.IsSampled) { FillSampledTransactionContextResponse(context, transaction, logger); FillSampledTransactionContextUser(context, transaction, logger); } } catch (Exception ex) { logger?.Error()?.LogException(ex, "Exception thrown while trying to stop transaction"); } finally { transaction.End(); } }