using System; using System.Threading.Tasks; using App.Metrics; using AyaNova.Util; using System.Linq; namespace AyaNova.Biz { /// /// called by Generator to flush metrics to reporter /// /// internal static class CoreJobMetricsReport { private static TimeSpan DO_EVERY_INTERVAL = new TimeSpan(0, 0, 20);//FLUSH EVERY 20 SECONDS private static DateTime lastReportFlushDone = DateTime.MinValue; //////////////////////////////////////////////////////////////////////////////////////////////// // DoAsync // public static async Task DoJobAsync() { //https://www.app-metrics.io/ IMetrics metrics = (IMetrics)ServiceProviderProvider.Provider.GetService(typeof(IMetrics)); //No more quickly than doeveryinterval if (!DateUtil.IsAfterDuration(lastReportFlushDone, DO_EVERY_INTERVAL)) return; //RUN ALL REPORTS - FLUSH STATS var mr = (IMetricsRoot)metrics; Task.WaitAll(mr.ReportRunner.RunAllAsync().ToArray()); lastReportFlushDone = DateTime.UtcNow; //just to hide compiler warning for now await Task.CompletedTask; } ///////////////////////////////////////////////////////////////////// }//eoc }//eons