private static void SetBasicTimingProperties(ITiming timing, TimingDataBase timingData) { if (timing == null || timingData == null) { return; } timingData.DurationMilliseconds = timing.DurationMilliseconds; timingData.ExecuteType = timing.ExecuteType == null ? null : timing.ExecuteType.ToLowerInvariant(); timingData.Id = timing.Id; timingData.MachineName = timing.MachineName; timingData.Name = timing.Name; timingData.ParentId = timing.ParentId; timingData.StartMilliseconds = timing.StartMilliseconds; timingData.Sort = timing.Sort; timingData.Started = ToSortableDateTimeString(timing.Started); if (timing.Tags != null && timing.Tags.Any()) { timingData.Tags = new List<string>(timing.Tags); } timingData.Type = timing.Type; }
/// <summary> /// Logs the timing data via slf4net logger. /// </summary> /// <param name="timingData">The timing to be serialized to JSON and be logged.</param> /// <param name="aggregations">The aggregations to be merged to timing data.</param> protected void LogTimingData(TimingDataBase timingData , params KeyValuePair<string, TimingAggregation>[] aggregations) { if (!_logger.Value.IsInfoEnabled) { return; } var json = Serialize(timingData); // merge aggregations to JSON of timing data if (aggregations != null && aggregations.Length > 0) { var sb = new StringBuilder(json.Substring(0, json.Length - 1)); foreach (var aggr in aggregations) { var aggrData = new AggregationData(); aggrData.Count = aggr.Value.Count; aggrData.Duration = aggr.Value.TotalDurationMilliseconds; var jsonAggr = Serialize(aggrData); var aggrType = aggr.Key.ToLowerInvariant(); sb.Append(","); sb.Append( jsonAggr.Substring(1, jsonAggr.Length - 2) .Replace("count", aggrType + "Count") .Replace("duration", aggrType + "Duration")); } sb.Append("}"); json = sb.ToString(); } _logger.Value.Info(json); }