public static void SetEngines(int serviceId, HeliconZooEngine[] userEngines) { // update applicationHost.config HeliconZoo zooServer = new HeliconZoo(); ServiceProviderProxy.Init(zooServer, serviceId); zooServer.SetEngines(userEngines); // update Helicon Zoo quotas in Quotas table UpdateQuotas(serviceId, userEngines); }
public HeliconZooEngine[] GetEngines() { // Read applicationHost.config List<HeliconZooEngine> result = new List<HeliconZooEngine>(); using (var srvman = new ServerManager()) { Configuration appConfig = srvman.GetApplicationHostConfiguration(); ConfigurationSection heliconZooServer; try { heliconZooServer = appConfig.GetSection("system.webServer/heliconZooServer"); } catch(Exception) { // heliconZooServer is not found // looks like zoo is not installed return result.ToArray(); } ConfigurationElement engines = heliconZooServer.GetChildElement("engines"); ConfigurationElementCollection enginesCollection = engines.GetCollection(); //switchboard ConfigurationElement switchboard = heliconZooServer.GetChildElement("switchboard"); ConfigurationElementCollection switchboardCollection = switchboard.GetCollection(); bool switchboardDisabledDefault = true; foreach (ConfigurationElement switchboardElement in switchboardCollection) { if ((string)switchboardElement.GetAttributeValue("name") == "*") { bool isEnabled = GetSwitchBoardValue(switchboardElement); switchboardDisabledDefault = !isEnabled ; break; } } //main engines foreach (ConfigurationElement item in enginesCollection) { HeliconZooEngine newItem = ConvertElementToHeliconZooEngine(item); newItem.disabled = switchboardDisabledDefault; result.Add(newItem); } //userEngines ConfigurationElement userEngines = heliconZooServer.GetChildElement("userEngines"); ConfigurationElementCollection userEnginesCollection = userEngines.GetCollection(); foreach (ConfigurationElement item in userEnginesCollection) { HeliconZooEngine newItem = ConvertElementToHeliconZooEngine(item); //remove if exists HeliconZooEngine serverItem = Collection_GetHeliconZooEngineByName(result, newItem.name); if (serverItem != null) { result.Remove(serverItem); } //override settings newItem.isUserEngine = true; newItem.disabled = switchboardDisabledDefault; result.Add(newItem); } //Web console HeliconZooEngine webConsole = new HeliconZooEngine { displayName = "Web console", name = "console" }; result.Add(webConsole); foreach (ConfigurationElement switchboardElement in switchboardCollection) { HeliconZooEngine item = Collection_GetHeliconZooEngineByName(result, (string)switchboardElement.GetAttributeValue("name")); if (item != null) { bool isEnabled = GetSwitchBoardValue(switchboardElement); item.disabled = !isEnabled; } else { //default value //item.disabled = !switchboardEnabledDefaults; } } } return result.ToArray(); }
private HeliconZooEngine ConvertElementToHeliconZooEngine(ConfigurationElement item) { HeliconZooEngine result = new HeliconZooEngine(); result.name = (string)item.GetAttributeValue("name"); result.displayName = (string)item.GetAttributeValue("displayName"); result.arguments = (string)item.GetAttributeValue("arguments"); result.fullPath = (string)item.GetAttributeValue("fullPath"); result.arguments = (string)item.GetAttributeValue("arguments"); result.transport = (string)item.GetAttributeValue("transport"); result.protocol = (string)item.GetAttributeValue("protocol"); result.host = (string)item.GetAttributeValue("host"); result.portLower = (long) item.GetAttributeValue("portLower"); result.portUpper = (long) item.GetAttributeValue("portUpper"); result.maxInstances = (long) item.GetAttributeValue("maxInstances"); result.minInstances = (long) item.GetAttributeValue("minInstances"); result.timeLimit = (long) item.GetAttributeValue("timeLimit"); result.gracefulShutdownTimeout = (long) item.GetAttributeValue("gracefulShutdownTimeout"); result.memoryLimit = (long) item.GetAttributeValue("memoryLimit"); List<HeliconZooEnv> envList = new List<HeliconZooEnv>(); ConfigurationElementCollection envColl = item.GetChildElement("environmentVariables").GetCollection(); foreach (ConfigurationElement el in envColl) { envList.Add(ConvertElementToHeliconZooEnv(el)); } result.environmentVariables = envList.ToArray(); // TODO: fix this result.isUserEngine = false; // TODO: disabled return result; }
private void ConvertHeliconZooEngineToElement(HeliconZooEngine item, ConfigurationElement engine) { engine.SetAttributeValue("name", item.name); engine.SetAttributeValue("displayName", item.displayName); engine.SetAttributeValue("arguments", item.arguments); engine.SetAttributeValue("fullPath", item.fullPath); engine.SetAttributeValue("arguments", item.arguments); engine.SetAttributeValue("transport", item.transport); engine.SetAttributeValue("protocol", item.protocol); engine.SetAttributeValue("host", item.host); engine.SetAttributeValue("portLower", item.portLower); engine.SetAttributeValue("portUpper", item.portUpper); engine.SetAttributeValue("maxInstances", item.maxInstances); engine.SetAttributeValue("minInstances", item.minInstances); engine.SetAttributeValue("timeLimit", item.timeLimit); engine.SetAttributeValue("gracefulShutdownTimeout", item.gracefulShutdownTimeout); engine.SetAttributeValue("memoryLimit", item.memoryLimit); ConfigurationElementCollection envColl = engine.GetChildElement("environmentVariables").GetCollection(); foreach(HeliconZooEnv env in item.environmentVariables) { ConfigurationElement envElement = envColl.CreateElement(); envElement.SetAttributeValue("name", env.Name); envElement.SetAttributeValue("value", env.Value); envColl.Add(envElement); } }
public void SetEngines(HeliconZooEngine[] userEngines) { // Write to applicationHost.config using (var srvman = new ServerManager()) { Configuration appConfig = srvman.GetApplicationHostConfiguration(); ConfigurationSection heliconZooServer = appConfig.GetSection("system.webServer/heliconZooServer"); ConfigurationElement engines = heliconZooServer.GetChildElement("userEngines"); ConfigurationElementCollection enginesCollection = engines.GetCollection(); enginesCollection.Clear(); ConfigurationElement switchboard = heliconZooServer.GetChildElement("switchboard"); ConfigurationElementCollection switchboardCollection = switchboard.GetCollection(); switchboardCollection.Clear(); foreach(HeliconZooEngine item in userEngines) { if (item.isUserEngine) { ConfigurationElement engine = enginesCollection.CreateElement(); ConvertHeliconZooEngineToElement(item, engine); enginesCollection.Add(engine); } } srvman.CommitChanges(); } }
private void BindEngineForm(HeliconZooEngine engine) { EngineName.Text = engine.name; EngineFriendlyName.Text = engine.displayName; EngineFullPath.Text = engine.fullPath; EngineArguments.Text = engine.arguments; EngineTransport.Text = engine.transport.ToLower(); EngineProtocol.Text = engine.protocol.ToLower(); EnginePortLower.Text = ToStringClearDeafult(engine.portLower); EnginePortUpper.Text = ToStringClearDeafult(engine.portUpper); EngineMinInstances.Text = ToStringClearDeafult(engine.minInstances); EngineMaxInstances.Text = ToStringClearDeafult(engine.maxInstances); EngineTimeLimit.Text = ToStringClearDeafult(engine.timeLimit); EngineGracefulShutdownTimeout.Text = ToStringClearDeafult(engine.gracefulShutdownTimeout); EngineMemoryLimit.Text = ToStringClearDeafult(engine.memoryLimit); for (int i = 0; i < engine.environmentVariables.Length && i < _envBoxsPair.Length; i++) { HeliconZooEnv env = engine.environmentVariables[i]; _envBoxsPair[i].Name.Text = env.Name; _envBoxsPair[i].Value.Text = env.Value; } }
private HeliconZooEngine EngineFromForm() { HeliconZooEngine engine = new HeliconZooEngine() { name = EngineName.Text.Trim(), displayName = EngineFriendlyName.Text.Trim(), arguments = EngineArguments.Text.Trim(), fullPath = EngineFullPath.Text.Trim(), transport = EngineTransport.SelectedValue, protocol = EngineProtocol.SelectedValue, portLower = ParseLong(EnginePortLower.Text, -1), portUpper = ParseLong(EnginePortUpper.Text, -1), minInstances = ParseLong(EngineMinInstances.Text, -1), maxInstances = ParseLong(EngineMaxInstances.Text, -1), timeLimit = ParseLong(EngineTimeLimit.Text, -1), gracefulShutdownTimeout = ParseLong(EngineGracefulShutdownTimeout.Text, -1), memoryLimit = ParseLong(EngineMemoryLimit.Text, -1), isUserEngine = true }; // envs List<HeliconZooEnv> tempEnvList = new List<HeliconZooEnv>(); for (int i = 0; i < _envBoxsPair.Length; i++) { EnvBoxPair pair = _envBoxsPair[i]; if (!string.IsNullOrEmpty(pair.Name.Text.Trim()) && !string.IsNullOrEmpty(pair.Value.Text.Trim())) { tempEnvList.Add(new HeliconZooEnv(){Name = pair.Name.Text.Trim(), Value = pair.Value.Text.Trim()}); } } engine.environmentVariables = tempEnvList.ToArray(); return engine; }
public void SetEngines(int serviceId, HeliconZooEngine[] userEngines) { HeliconZooController.SetEngines(serviceId, userEngines); }
public void SetEngines(HeliconZooEngine[] userEngines) { ZooProvider.SetEngines(userEngines); }
/// <remarks/> public void SetEnginesAsync(HeliconZooEngine[] userEngines, object userState) { if ((this.SetEnginesOperationCompleted == null)) { this.SetEnginesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetEnginesOperationCompleted); } this.InvokeAsync("SetEngines", new object[] { userEngines}, this.SetEnginesOperationCompleted, userState); }
/// <remarks/> public void SetEnginesAsync(HeliconZooEngine[] userEngines) { this.SetEnginesAsync(userEngines, null); }
/// <remarks/> public System.IAsyncResult BeginSetEngines(HeliconZooEngine[] userEngines, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetEngines", new object[] { userEngines}, callback, asyncState); }
public void SetEngines(HeliconZooEngine[] userEngines) { this.Invoke("SetEngines", new object[] { userEngines}); }
private static int GenerateIntId(HeliconZooEngine engine) { return engine.name.GetHashCode(); }
private static void UpdateQuotas(int serviceId, HeliconZooEngine[] userEngines) { List<HeliconZooEngine> updatedEngines = new List<HeliconZooEngine>(userEngines); int providerId, groupId; DataProvider.GetHeliconZooProviderAndGroup("HeliconZoo", out providerId, out groupId); // get existing Helicon Zoo quotas List<string> existingQuotas = new List<string>(); IDataReader reader = DataProvider.GetHeliconZooQuotas(providerId); while (reader.Read()) { string quota = (string) reader["QuotaName"]; if (quota.StartsWith(HeliconZooQuotaPrefix)) { quota = quota.Substring(HeliconZooQuotaPrefix.Length); } existingQuotas.Add(quota); } // sort: engine to remove and add List<string> engineNamesToRemove = new List<string>(); List<HeliconZooEngine> enginesToAdd = new List<HeliconZooEngine>(); // find engine to remove in existing engines foreach (string existingEngineName in existingQuotas) { if ( Array.Find(updatedEngines.ToArray(), engine => engine.name == existingEngineName) == null && !engineNamesToRemove.Contains(existingEngineName) ) { engineNamesToRemove.Add(existingEngineName); } } // find engines to add foreach (HeliconZooEngine engine in updatedEngines) { if (!existingQuotas.Contains(engine.name)) { enginesToAdd.Add(engine); } } // remove engines foreach (string engineName in engineNamesToRemove) { DataProvider.RemoveHeliconZooQuota(groupId, HeliconZooQuotaPrefix+engineName); } // add engines int order = 0; foreach (HeliconZooEngine engine in enginesToAdd) { int quotaId = GenerateIntId(engine); DataProvider.AddHeliconZooQuota(groupId, quotaId, HeliconZooQuotaPrefix+engine.name, engine.displayName, existingQuotas.Count + order++); } }