private static void WriteDistributed(IDistributed x, string key, HttpContext context) { var percentiles = x.Percentiles(0.5, 0.75, 0.95, 0.98, 0.99, 0.999); var max = $"{key}.max;dur={x.Max}"; var min = $"{key}.min;dur={x.Min}"; var mean = $"{key}.mean;dur={x.Mean}"; var stdDev = $"{key}.stdDev;dur={x.StdDev}"; var median = $"{key}.median;dur={percentiles[0]}"; var desc = x is TimerMetric timer ? $" <= {timer.DurationUnit.Abbreviate()}\"" : string.Empty; var p75 = $"{key}.p75;dur={percentiles[1]};desc=\"75%%{desc}\""; var p95 = $"{key}.p95;dur={percentiles[2]};desc=\"95%%{desc}\""; var p98 = $"{key}.p98;dur={percentiles[3]};desc=\"98%%{desc}\""; var p99 = $"{key}.p99;dur={percentiles[4]};desc=\"99%%{desc}\""; var p999 = $"{key}.p999;dur={percentiles[5]};desc=\"99.99%%{desc}\""; AddServerTimingEntry(context, max); AddServerTimingEntry(context, min); AddServerTimingEntry(context, mean); AddServerTimingEntry(context, stdDev); AddServerTimingEntry(context, median); AddServerTimingEntry(context, p75); AddServerTimingEntry(context, p95); AddServerTimingEntry(context, p98); AddServerTimingEntry(context, p99); AddServerTimingEntry(context, p999); }
private static void WriteDistributed(TextWriter writer, IDistributed distribution) { var percentiles = distribution.Percentiles(0.5, 0.75, 0.95, 0.98, 0.99, 0.999); writer.Write(" min = %{0:2}\n", distribution.Min); writer.Write(" max = %{0:2}\n", distribution.Max); writer.Write(" mean = %{0:2}\n", distribution.Mean); writer.Write(" stddev = %{0:2}\n", distribution.StdDev); writer.Write(" median = %{0:2}\n", percentiles[0]); writer.Write(" 75%% <= %{0:2}\n", percentiles[1]); writer.Write(" 95%% <= %{0:2}\n", percentiles[2]); writer.Write(" 98%% <= %{0:2}\n", percentiles[3]); writer.Write(" 99%% <= %{0:2}\n", percentiles[4]); writer.Write(" 99.9%% <= %{0:2}\n", percentiles[5]); }
/// <summary> /// 是否包含弱检索式 /// </summary> /// <param name="filter">分期过滤器</param> /// <returns>若包含则为<c>true</c>,否则为<c>false</c></returns> public static bool IsDangerous(this IDistributed filter) { if (filter.ID.HasValue) { return(false); } if (filter.Name != null) { return(false); } if (!string.IsNullOrEmpty(filter.Remark)) { return(false); } return(true); }
/// <summary> /// 获取分期的剩余 /// </summary> /// <param name="dist">分期</param> /// <param name="dt">日期,若为<c>null</c>则返回总额</param> /// <returns>指定日期的总额,若早于日期则为<c>null</c></returns> public static double?GetBookValueOn(IDistributed dist, DateTime?dt) { if (!dt.HasValue || dist.TheSchedule == null) { return(dist.Value); } var last = dist.TheSchedule.LastOrDefault(item => DateHelper.CompareDate(item.Date, dt) <= 0); if (last != null) { return(last.Value); } if (DateHelper.CompareDate(dist.Date, dt) <= 0) { return(dist.Value); } return(null); }
private static void AppendDistribution(StringBuilder sb, IDistributed distribution) { sb.Append("\"count\":").Append(distribution.Count) .Append(",\"max\":").Append(distribution.Max) .Append(",\"min\":").Append(distribution.Min) .Append(",\"mean\":").Append(distribution.Mean) .Append(",\"std_dev\":").Append(distribution.StdDev); sb.Append(",\"percentiles\":["); var values = distribution.Percentiles(percentiles); for (var i = 0; i < values.Length; i++) { sb.Append(values[i]); if (i < values.Length - 1) { sb.Append(','); } } sb.Append("]"); }
public static double?GetBookValueOn(IDistributed dist, DateTime?dt) => DistributedAccountant.GetBookValueOn(dist, dt);
private static void AppendHistogram(StringBuilder sb, IDistributed histogram) { sb.Append('{'); AppendDistribution(sb, histogram); sb.Append('}'); }