static ServiceHost GetServiceHost(ServiceHostProvider provider) { var sh = provider.Queryable().Single(q => q.Machine == Environment.MachineName); while (string.IsNullOrWhiteSpace(sh.CommandMessageQueue)) { Thread.Sleep(500); sh = provider.Queryable().Single(q => q.Machine == Environment.MachineName); } return sh; }
private void UpdateCmdMsgQ(EnvironmentComponents envConfig, string publicationAddress) { var mongoEnv = envConfig.Config.Where(kvp => kvp.Key.StartsWith("Mongo")); var provider = new ServiceHostProvider(mongoEnv); var sh = provider.Queryable().Single(q => q.Machine == Environment.MachineName); sh.CommandMessageQueue = publicationAddress; sh = provider.Update(sh); }
private void ManageServiceComponents(EnvironmentComponents envComponents) { var environment = envComponents.Environment; var mongoEnv = envComponents.Config.Where(kvp => kvp.Key.StartsWith("Mongo")); var provider = new ServiceHostProvider(mongoEnv); var sh = provider.Queryable().Single(q => q.Machine == Environment.MachineName); var configuredComponents = sh.Components; var configuredIds = configuredComponents.Select(c => c.Id); var existingIds = envComponents.Components.Select(c => c.Id); // newly configured components foreach (var newlyConfiguredId in configuredIds.Except(existingIds)) envComponents.Components.Add(new RunningServiceComponent(environment, this.ConfigURL, configuredComponents.Single(c => c.Id == newlyConfiguredId), envComponents.Config)); // newly removed components foreach (var newlyDeletedId in existingIds.Except(configuredIds)) { RunningServiceComponent rsc = envComponents.Components.Single(c => c.Id == newlyDeletedId); rsc.Stop(envComponents.EventProducer); envComponents.Components.Remove(rsc); } // not new, not deleted, possibly updated foreach (var possiblyUpdatedId in configuredIds.Intersect(existingIds)) { var rsc = envComponents.Components.Single(c => c.Id == possiblyUpdatedId); var sc = configuredComponents.Single(c => c.Id == possiblyUpdatedId); if (rsc.RowVersion != sc.RowVersion) rsc.Update(envComponents.EventProducer, sc); } }