/// <inheritdoc cref="IBulkDeduplicationScheduler.ScheduleSearchJob"/>
        public void ScheduleSearchJob(DuplicatesScheduledSearchParameter duplicatesScheduledSearchParameter)
        {
            var schemaName     = duplicatesScheduledSearchParameter.SearchSchemaName;
            var cronExpression = duplicatesScheduledSearchParameter.GetCronExpression();
            var jobName        = string.Format(ScheduledSearchDuplicatesJobNamePattern, schemaName);
            var jobParameters  = new Dictionary <string, object> {
                { "SchemaName", schemaName },
            };
            var jobDetail = AppScheduler.CreateProcessJob(
                jobName,
                ScheduledSearchDuplicatesJobGroup,
                ScheduledSearchDuplicatesJobProcessName,
                _userConnection.Workspace.Name,
                _userConnection.CurrentUser.Name,
                jobParameters);
            var cronTrigger = new CronTriggerImpl {
                Name               = jobName,
                Group              = ScheduledSearchDuplicatesJobGroup,
                TimeZone           = TimeZoneInfo.Utc,
                CronExpression     = new CronExpression(cronExpression),
                MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing
            };

            AppScheduler.Instance.ScheduleJob(jobDetail, cronTrigger);
        }
Example #2
0
        public static string GetCronExpression(
            this DuplicatesScheduledSearchParameter duplicatesScheduledSearchParameter)
        {
            var searchDays = duplicatesScheduledSearchParameter.SearchDays;
            var searchTime = duplicatesScheduledSearchParameter.SearchTime;
            var daysOfWeek = Enum.GetValues(typeof(SearchDayOfWeek))
                             .Cast <SearchDayOfWeek>()
                             .Where(dayOfWeek => searchDays.HasFlag(dayOfWeek) && dayOfWeek != SearchDayOfWeek.None)
                             .Select(dayOfWeek => dayOfWeek.ToString("G").Substring(0, DayOfWeekShortNameLength).ToUpper());

            return($"0 {searchTime.Minutes} {searchTime.Hours} ? * {string.Join(",", daysOfWeek)} *");
        }
 private static void UpdateDuplicatesSearchJob(Entity entity, bool isJobShouldBeRestarted)
 {
     if (!entity.UserConnection.GetIsFeatureEnabled(BulkEsDeduplicationFeatureName))
     {
         return;
     }
     try {
         var bulkDeduplicationScheduler = ClassFactory.Get <IBulkDeduplicationScheduler>(
             new ConstructorArgument("userConnection", entity.UserConnection));
         var duplicatesScheduledSearchParameter = DuplicatesScheduledSearchParameter.CreateFromEntity(entity);
         bulkDeduplicationScheduler.DeleteSearchJob(duplicatesScheduledSearchParameter.SearchSchemaName);
         if (isJobShouldBeRestarted && IsSearchParameterValid(duplicatesScheduledSearchParameter))
         {
             bulkDeduplicationScheduler.ScheduleSearchJob(duplicatesScheduledSearchParameter);
         }
     }
     catch (Exception ex) {
         Log.Error("Deduplication. Duplicates search settings has been changed. "
                   + "Failed to restart duplicates search job.", ex);
     }
 }
 private static bool IsSearchParameterValid(DuplicatesScheduledSearchParameter duplicatesScheduledSearchParameter)
 {
     return(duplicatesScheduledSearchParameter.SearchTime != TimeSpan.MinValue &&
            duplicatesScheduledSearchParameter.SearchDays != SearchDayOfWeek.None);
 }