private void RunCampaignWithInProgress(CoreCampaignSchema campaignSchema, CampaignSchemaExecutionStrategy strategy, DateTime scheduledFireTime) { var campaignStatusId = GetCampaignStatusId(campaignSchema.EntityId); if (campaignStatusId == CampaignConsts.RunCampaignStatusId) { SetCampaignInProgress(campaignSchema.EntityId, true, null); RunCampaign(campaignSchema, strategy, scheduledFireTime); } }
private void RunCampaign(CoreCampaignSchema campaignSchema, CampaignSchemaExecutionStrategy schemaGeneratorStrategy, DateTime scheduledFireTime) { try { DateTime?stopDate = GetScheduledStopDate(campaignSchema.EntityId); var latenessConfig = CampaignTimeScheduler.GetLatenessConfig(campaignSchema, scheduledFireTime); LogMisfiredRun(campaignSchema, latenessConfig, scheduledFireTime); if (stopDate <= DateTime.UtcNow) { LogAction(campaignSchema.EntityId, CampaignConsts.CampaignLogTypeStoppedBySchedule); } if (latenessConfig.Lateness == CampaignExecutionLateness.CriticalAndMisfiredTimeConditionElements || stopDate <= DateTime.UtcNow) { CampaignEventFacade.Finalize(_userConnection, campaignSchema); CampaignEventFacade.Stop(_userConnection, campaignSchema); return; } if (latenessConfig.Lateness == CampaignExecutionLateness.NoMisfire) { campaignSchema.CampaignConfiguration["ScheduledUtcFireTime"] = scheduledFireTime; var config = new CampaignExecutionConfig { CurrentFireTime = scheduledFireTime, ExecutionStrategy = schemaGeneratorStrategy }; CampaignEngine.Run(campaignSchema, config); } else { scheduledFireTime = DateTime.UtcNow; } } catch (Exception e) { string message = CampaignHelper.GetLczStringValue(nameof(CampaignJobExecutor), "ExecutionException"); Logger.Error(message, e); } TryScheduleNextJob(campaignSchema, scheduledFireTime); }