Example #1
0
        /// <summary>
        /// Called by the <see cref="T:Quartz.IScheduler"/> when a <see cref="T:Quartz.ITrigger"/>
        ///             fires that is associated with the <see cref="T:Quartz.IJob"/>.
        /// </summary>
        /// <remarks>
        /// The implementation may wish to set a  result object on the
        ///             JobExecutionContext before this method exits.  The result itself
        ///             is meaningless to Quartz, but may be informative to
        ///             <see cref="T:Quartz.IJobListener"/>s or
        ///             <see cref="T:Quartz.ITriggerListener"/>s that are watching the job's
        ///             execution.
        /// </remarks>
        /// <param name="context">The execution context.</param>
        public void Execute(IJobExecutionContext context)
        {
            _logger = LogManager.GetCurrentClassLogger();

            JobDataMap dataMap = context.JobDetail.JobDataMap;
            EconomicReleaseUpdateJobSettings settings;

            try
            {
                settings = JsonConvert.DeserializeObject <EconomicReleaseUpdateJobSettings>((string)dataMap["settings"]);
            }
            catch (Exception e)
            {
                _logger.Error(e, "Failed to deserialize data update job settings");
                return;
            }

            _logger.Info($"Data Update job {settings.Name} triggered.");

            _broker.Error += _broker_Error;

            var startDate = DateTime.Now.AddBusinessDays(-settings.BusinessDaysBack);
            var endDate   = DateTime.Now.AddBusinessDays(settings.BusinessDaysAhead);
            var req       = new EconomicReleaseRequest(startDate, endDate, dataLocation: DataLocation.ExternalOnly, dataSource: settings.DataSource);
            var releases  = _broker.RequestEconomicReleases(req).Result; //no async support in Quartz, and no need for it anyway, this runs on its own thread

            _logger.Trace($"Economic release update job downloaded {releases.Count} items");

            JobComplete();
        }
Example #2
0
        public EconomicReleasesModule(IMyDbContext context, IEconomicReleaseBroker erb) : base("/economicreleases")
        {
            this.RequiresAuthentication();

            Get["/", runAsync : true] = async(_, token) =>
            {
                var releases = context.EconomicReleases;

                var request = this.Bind <EconomicReleaseRequest>();

                if (request == null)
                {
                    // No request object, just return everything
                    return(await releases.ToListAsync(token).ConfigureAwait(false));
                }

                // filter and return
                return(await erb.RequestEconomicReleases(request).ConfigureAwait(false));
            };

            Get["/datasources"] = _ => erb.DataSources.Keys.ToList();
        }