using System;
using System.Threading.Tasks;
using App.Metrics;
using AyaNova.Util;
using System.Linq;


namespace AyaNova.Biz
{


    /// <summary>
    /// called by Generator to flush metrics to reporter
    /// 
    /// </summary>
    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

