public virtual async Task <JobResult> RunAsync(CancellationToken cancellationToken = default(CancellationToken)) { string snapshotName = SystemClock.UtcNow.ToString("'" + Repository + "-'yyyy-MM-dd-HH-mm"); _logger.Info($"Starting {Repository} snapshot {snapshotName}..."); await _lockProvider.TryUsingAsync("es-snapshot", async t => { var sw = Stopwatch.StartNew(); var result = await Run.WithRetriesAsync(async() => { var response = await _client.SnapshotAsync( Repository, snapshotName, d => d .Indices(IncludedIndexes.Count > 0 ? IncludedIndexes.ToArray() : new[] { "*" }) .IgnoreUnavailable() .IncludeGlobalState(false) .WaitForCompletion() .RequestConfiguration(r => r.RequestTimeout(60 * 60 * 1000))).AnyContext(); if (response.IsValid == false) { _logger.Trace($"Invalid response attempting to create snapshot, checking to see if snapshot {snapshotName} already exists."); var snapshotExistsResponse = await _client.GetSnapshotAsync(Repository, snapshotName).AnyContext(); if (snapshotExistsResponse.IsValid == false || snapshotExistsResponse.Snapshots.Count() == 0) { throw new ApplicationException($"Snapshot failed: {response.GetErrorMessage()}", response.ConnectionStatus.OriginalException); } return(true); } return(true); }, maxAttempts: 5, retryInterval: TimeSpan.FromSeconds(10), cancellationToken: cancellationToken, logger: _logger).AnyContext(); sw.Stop(); if (result) { await OnSuccess(snapshotName, sw.Elapsed).AnyContext(); } else { await OnFailure(snapshotName).AnyContext(); } }, TimeSpan.FromMinutes(30), TimeSpan.FromMinutes(30)).AnyContext(); return(JobResult.Success); }
public OrganizationSnapshotJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory) : base(configuration.Client, lockProvider, loggerFactory) { _configuration = configuration; Repository = configuration.Options.ScopePrefix + "organizations"; foreach (var index in configuration.Indexes) { if (index == configuration.Events || index == configuration.Stacks) { continue; } IncludedIndexes.Add(index.Name + "*"); } }
public EventSnapshotJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory) : base(configuration.Client, lockProvider, loggerFactory) { _configuration = configuration; Repository = configuration.Options.ScopePrefix + "events"; IncludedIndexes.Add(configuration.Events.Name + "*"); }
public StackSnapshotJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory) : base(configuration.Client, lockProvider, loggerFactory) { _configuration = configuration; Repository = configuration.Options.ScopePrefix + "ex_stacks"; IncludedIndexes.Add("stacks*"); }
public OrganizationSnapshotJob(ExceptionlessElasticConfiguration configuration, ILockProvider lockProvider, ILoggerFactory loggerFactory) : base(configuration.Client, lockProvider, loggerFactory) { Repository = Settings.Current.AppScopePrefix + "ex_organizations"; IncludedIndexes.Add("organizations*"); }