/// <summary> /// Ends metrics for a given service. This method also tracks the service status (any exceptions) and the number of items processed. /// </summary> /// <param name="methodName">Method Name</param> /// <param name="exception">Exception (if one occured)</param> /// <param name="itemsProcessed">Number of Items Processed</param> public void EndServiceCall(string methodName, Exception exception, string callingIPAddress = null) { DateTime timestamp = DateTime.Now; if (string.IsNullOrEmpty(callingIPAddress)) { callingIPAddress = GetCallingIPAddress(); } ServiceMetricStatusEnum status = ServiceMetricStatusEnum.Success; if (exception != null) { if (exception is APIException) { status = ServiceMetricStatusEnum.Error; } else { status = ServiceMetricStatusEnum.Exception; } } lock (CurrentWebMethodCallStart) { TimeSpan processTime = timestamp.Subtract(CurrentWebMethodCallStart[methodName]); CurrentServiceMetrics.EndServiceCall(methodName, status, processTime, timestamp, callingIPAddress, GetHostName(callingIPAddress)); } }
internal void EndServiceCall(string methodName, ServiceMetricStatusEnum status, TimeSpan processTime, DateTime timestamp, string callingIPAddress, string callingHostName) { // Update Counters lock (WebMethodMetricsList) { WebMethodAggregateData serviceMetricData = WebMethodMetricsList.FirstOrDefault(m => m.WebMethodName.Equals(methodName)); serviceMetricData.EndServiceCall(status, processTime, timestamp, callingIPAddress, callingHostName); } }
internal void EndServiceCall(ServiceMetricStatusEnum status, TimeSpan processTime, DateTime timestamp, string callingIPAddress, string callingHostName) { // Update Counters CompletedRequests++; ActiveRequests--; TotalProcessingTime += processTime; if (MinProcessTime > processTime || MinProcessTime == TimeSpan.Zero) { MinProcessTime = processTime; } if (MaxProcessTime < processTime) { MaxProcessTime = processTime; } if (FirstProcessTime == TimeSpan.Zero) { FirstProcessTime = processTime; } LastProcessTime = processTime; LastProcessDateTime = timestamp; LastCallingIPAddress = callingIPAddress; LastCallingHostFQN = callingHostName; if (status == ServiceMetricStatusEnum.Exception) { TotalFaults = (TotalFaults ?? 0) + 1; LastFault = timestamp; } else if (status == ServiceMetricStatusEnum.Error) { TotalErrors = (TotalErrors ?? 0) + 1; } }