public void Ctor_SetsTheDefaultOptions() { CosmosStorageOptions storageOptions = new CosmosStorageOptions(); Assert.Equal("hangfire", storageOptions.Prefix); Assert.Null(storageOptions.InvisibilityTimeout); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddHangfire(config => { var connectionString = "put-your-connectionsString-here"; var mongoUrlBuilder = new MongoUrlBuilder(connectionString) { DatabaseName = "jobs" }; var mongoClient = new MongoClient(mongoUrlBuilder.ToMongoUrl()); var opt = new CosmosStorageOptions { MigrationOptions = new MongoMigrationOptions { BackupStrategy = new NoneMongoBackupStrategy(), MigrationStrategy = new DropMongoMigrationStrategy(), } }; //config.UseLogProvider(new FileLogProvider()); config.UseColouredConsoleLogProvider(LogLevel.Info); config.UseCosmosStorage(mongoClient, mongoUrlBuilder.DatabaseName, opt); }); services.AddMvc(c => c.EnableEndpointRouting = false); }
public CosmosConfigurationSource(CosmosStorageOptions options, SaveConfigurationOptions saveConfig, IConfiguration configSeed = null) { SaveConfig = saveConfig; Options = options; ConfigSeed = configSeed; }
public void Ctor_SetsTheDefaultOptions_ShouldGenerateUniqueClientId() { var storageOptions1 = new CosmosStorageOptions(); var storageOptions2 = new CosmosStorageOptions(); var storageOptions3 = new CosmosStorageOptions(); IEnumerable <string> result = new[] { storageOptions1.ClientId, storageOptions2.ClientId, storageOptions3.ClientId }.Distinct(); Assert.Equal(3, result.Count()); }
private static void DefaultStorageOptions(string connectionString, CosmosStorageOptions o) { var connectionStringBuilder = new CosmosConnectionStringBuilder(connectionString); o.AccountKey ??= connectionStringBuilder.AccountKey; o.AccountEndpoint ??= connectionStringBuilder.AccountEndpoint; o.DatabaseId ??= connectionStringBuilder.Database; o.ContainerId ??= connectionStringBuilder.DefaultContainer ?? Constants.Options.DefaultContainer; o.SharedCollection = false; o.PartitionKeyPaths = connectionStringBuilder.PartitionKeyPaths ?? new[] { "/id" }; }
private static void DefaultDbOptions(string connectionString, CosmosStorageOptions o) { var connectionStringBuilder = new CosmosConnectionStringBuilder(connectionString); o.AccountKey = connectionStringBuilder.AccountKey; o.AccountEndpoint = connectionStringBuilder.AccountEndpoint; o.ContainerId = connectionStringBuilder.DefaultContainer ?? "BackgroundTasks"; o.DatabaseId = connectionStringBuilder.Database ?? "Default"; o.SharedCollection = true; // Sequence, Document, etc. o.PartitionKeyPaths = new[] { "/id" }; }
public static IConfigurationBuilder AddCosmosConfigurationProvider(this IConfigurationBuilder builder, Action <CosmosStorageOptions> configureDatabase, Action <SaveConfigurationOptions> configureOptions = null, bool reloadOnChange = false, IConfiguration configSeed = null) { var dbConfig = new CosmosStorageOptions(); configureDatabase?.Invoke(dbConfig); var saveConfig = new SaveConfigurationOptions(); configureOptions?.Invoke(saveConfig); var source = new CosmosConfigurationSource(dbConfig, saveConfig, configSeed) { ReloadOnChange = reloadOnChange }; builder.Add(source); return(builder); }
public static BackgroundTaskBuilder AddCosmosBackgroundTasksStore(this BackgroundTaskBuilder builder, Action <CosmosStorageOptions> configureAction = null) { const string slot = Constants.ConnectionSlots.BackgroundTasks; if (configureAction != null) { builder.Services.Configure(slot, configureAction); } var dbOptions = new CosmosStorageOptions(); configureAction?.Invoke(dbOptions); var container = MigrateToLatest(slot, new OptionsMonitorShim <CosmosStorageOptions>(dbOptions)); builder.Services.AddSafeLogging(); builder.Services.AddSingleton(r => new CosmosRepository(slot, container, r.GetRequiredService <IOptionsMonitor <CosmosStorageOptions> >(), r.GetService <ISafeLogger <CosmosRepository> >())); builder.Services.Replace(ServiceDescriptor.Singleton <IBackgroundTaskStore, CosmosBackgroundTaskStore>()); return(builder); }
public void Set_CosmosHourlyTtl_SetsTheValue() { var storageOptions = new CosmosStorageOptions(10); Assert.Equal(10, storageOptions.CosmosHourlyTtl); }
public void Ctor_SetsTheDefaultOptions_ShouldGenerateClientId() { var storageOptions = new CosmosStorageOptions(); Assert.False(String.IsNullOrWhiteSpace(storageOptions.ClientId)); }
public static Container MigrateToLatest(string slot, CosmosStorageOptions options, IConfiguration configSeed = null, SeedStrategy strategy = SeedStrategy.InsertIfNotExists) { var optionsMonitor = new OptionsMonitorShim <CosmosStorageOptions>(options); var runner = new CosmosMigrationRunner(slot, optionsMonitor); var container = runner.CreateContainerIfNotExistsAsync().GetAwaiter().GetResult(); if (configSeed != null && strategy != SeedStrategy.None) { var repository = new CosmosRepository(slot, container, optionsMonitor, null); switch (strategy) { case SeedStrategy.InsertIfNotExists: { InsertIfNotExists(repository); break; } case SeedStrategy.Initialize: { var count = repository.CountAsync <ConfigurationDocument>().GetAwaiter().GetResult(); if (count == 0) { InsertIfNotExists(repository); } break; } default: throw new ArgumentOutOfRangeException(); } } void InsertIfNotExists(ICosmosRepository repository) { var manifest = repository.RetrieveAsync <ConfigurationDocument>() .GetAwaiter().GetResult().Select(x => x.Key).ToImmutableHashSet(); var changedKeys = new HashSet <string>(); foreach (var(k, v) in configSeed.AsEnumerable()) { if (manifest.Contains(k)) { continue; } repository.CreateAsync(new ConfigurationDocument { Key = k, Value = v }) .GetAwaiter().GetResult(); changedKeys.Add(k); } Trace.TraceInformation(changedKeys.Count > 0 ? $"Configuration updated the following keys: {string.Join(",", changedKeys)}" : "Configuration is up to date."); } return(container); }