Beispiel #1
0
        private static void UpdateTracerDocument(this RavenHelper raven, Store store, Instance instance)
        {
            try
            {
                var tracerId = "brnkly/raven/tracers/" + instance.Url.Authority.Replace(":", "_");
                var docStore = raven.GetDocumentStore(instance.Url.GetServerRootUrl());
                using (var session = docStore.OpenSession(store.Name))
                {
                    session.Advanced.UseOptimisticConcurrency = true;
                    var tracer = session.Load <Tracer>(tracerId)
                                 ?? new Tracer {
                        UpdatedAtUtc = DateTimeOffset.UtcNow
                    };
                    tracer.UpdatedAtUtc = DateTimeOffset.UtcNow;
                    session.Store(tracer, tracerId);
                    session.SaveChanges();
                }

                logger.Debug("Tracer document updated for {0}", instance.Url);
            }
            catch (Exception exception)
            {
                logger.ErrorException(
                    string.Format("Failed to update tracer document for {0}", instance.Url),
                    exception);

                if (exception.IsFatal())
                {
                    throw;
                }
            }
        }
Beispiel #2
0
        private static void EnsureReplicationBundleIsActive(this RavenHelper raven, Store store, Instance instance)
        {
            var docStore = raven.GetDocumentStore(instance.Url.GetServerRootUrl());

            docStore.DatabaseCommands.EnsureDatabaseExists(store.Name);
            using (var session = docStore.OpenSession())
            {
                session.Advanced.UseOptimisticConcurrency = true;
                var dbDoc         = session.Load <RavenJObject>("Raven/Databases/" + store.Name);
                var settings      = dbDoc["Settings"].Value <RavenJObject>();
                var activeBundles = settings[Constants.ActiveBundles] ?? "";
                var bundles       = activeBundles.Value <string>()
                                    .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
                                    .Select(x => x.Trim())
                                    .ToArray();
                if (!bundles.Contains("Replication"))
                {
                    var newActiveBundles = string.Join(
                        ";",
                        bundles.Concat(new[] { "Replication" }).ToArray());
                    settings[Constants.ActiveBundles] = newActiveBundles;
                    session.Store(dbDoc);
                    session.SaveChanges();
                }
            }
        }
Beispiel #3
0
        private static void RequestData(
            this RavenHelper raven,
            Store store,
            Dictionary <Uri, Task <DatabaseStatistics> > dbStats,
            Dictionary <Uri, Task <RavenJToken> > replicationStats,
            Dictionary <Uri, Task <IndexDefinition[]> > indexes)
        {
            foreach (var instance in store.Instances)
            {
                var docStore = raven.GetDocumentStore(instance.Url.GetServerRootUrl());

                using (var session = docStore.OpenAsyncSession())
                {
                    dbStats.Add(
                        instance.Url,
                        session.Advanced.DocumentStore.AsyncDatabaseCommands.ForDatabase(store.Name)
                        .GetStatisticsAsync());

                    indexes.Add(
                        instance.Url,
                        session.Advanced.DocumentStore.AsyncDatabaseCommands.ForDatabase(store.Name)
                        .GetIndexesAsync(0, 255));

                    var asyncServerClient = session.Advanced.DocumentStore.AsyncDatabaseCommands
                                            .ForDatabase(store.Name) as AsyncServerClient;
                    replicationStats.Add(
                        instance.Url,
                        asyncServerClient
                        .CreateRequest("/replication/info?noCache=" + Guid.NewGuid(), "GET")
                        .ReadResponseJsonAsync());
                }
            }
        }
Beispiel #4
0
        private static IEnumerable <ReplicationDestination> UpdateReplicationDocument(this RavenHelper raven, Store store, Instance instance)
        {
            var docStore = raven.GetDocumentStore(instance.Url.GetServerRootUrl());

            docStore.DatabaseCommands.EnsureDatabaseExists(store.Name);
            using (var session = docStore.OpenSession(store.Name))
            {
                session.Advanced.UseOptimisticConcurrency = true;
                var replicationDoc =
                    session.Load <ReplicationDocument>(Constants.RavenReplicationDestinations) ??
                    new ReplicationDocument();
                replicationDoc.Destinations = instance.Destinations
                                              .Where(d => !d.Url.Equals(instance.Url.ToString(), StringComparison.OrdinalIgnoreCase))
                                              .ToList();
                session.Store(replicationDoc);
                session.SaveChanges();

                return(replicationDoc.Destinations);
            }
        }
Beispiel #5
0
        private static IDatabaseCommands GetDatabaseCommands(this RavenHelper helper, Uri instanceUrl)
        {
            var docStore = helper.GetDocumentStore(instanceUrl.GetServerRootUrl());

            return(docStore.DatabaseCommands.ForDatabase(instanceUrl.GetDatabaseName()));
        }