private double FindPrioityIndex(OptionBase option) { DatabaseOptionStatusLine line = _optionStatus.GetDatabaseOptionStatusLineOnOption(option); double priority = 1; if (line?.Fail10Minute > 0) { priority *= 0.5; } else if (line?.Fail1Hour > 0) { priority *= 0.75; } else if (line?.Fail24Hour > 0) { priority *= 0.85; } int?failsOnCurrentOption = option?.DatabaseOption?.Schedule?.Fails; if (failsOnCurrentOption != null) { priority *= 0.5; } return(priority); }
private void UpdateEstimatedStatistics(OptionReport report) { lock (_statusLock) { string optionName = report.OptionType.Name; DatabaseOptionStatusLine line = null; if (_databaseOptionStatus.options.ContainsKey(optionName)) { line = _databaseOptionStatus.options[optionName]; } else { line = new DatabaseOptionStatusLine(); _databaseOptionStatus.options.Add(optionName, line); } line.ExecutionTotal++; if (report.Success) { line.SuccessTotal++; line.Success10Minute++; } else { line.FailTotal++; line.Fail10Minute++; } } }
public DatabaseOptionStatusLine GetDatabaseOptionStatusLineOnOption(OptionBase option) { lock (_statusLock) { string optionName = option.GetType().Name; if (_databaseOptionStatus.options.ContainsKey(optionName)) { DatabaseOptionStatusLine line = _databaseOptionStatus.options[optionName]; return line; } } return null; }
public void DelayOptionFromFails(OptionBase option) { DatabaseOptionStatusLine line = _optionStatus.GetDatabaseOptionStatusLineOnOption(option); int failsThisHour = 0; if (line != null) { failsThisHour = line.Fail1Hour; } if (failsThisHour == 0) { return; } double minutesExtraDouble = 10.0 * Math.Log(failsThisHour); TimeSpan minutesExtra = TimeSpan.FromMinutes(minutesExtraDouble); option.DatabaseOption.Schedule.NextAllowedExecution += minutesExtra; }