private ApplicationInstance StartWebServer(Application application, Tenant tenant, int port) { try { string xsp = Settings.WindowsXSPWebServerPath; if (MonoscapeUtil.IsRunningOnMono () && (Environment.OSVersion.Platform == PlatformID.Unix)) xsp = Settings.UnixXSPWebServerPath; string arguments = "--port " + port + " --applications /" + tenant.Name.Replace (" ", "").ToLower () + "/" + MonoscapeUtil.PrepareApplicationVirtualFolderName (application.Name) + ":."; string workingDirectory = PrepareApplicationDeployPath (application, tenant.Name, port); var p = new Process () { StartInfo = new ProcessStartInfo(xsp, arguments) { RedirectStandardOutput = false, RedirectStandardError = false, UseShellExecute = false, CreateNoWindow = true, WorkingDirectory = workingDirectory } }; if (p.Start ()) { Database.LastWebServerPort = port; ApplicationInstance instance = new ApplicationInstance (); instance.Id = FindNextInstanceId (application); instance.ProcessId = p.Id; instance.ApplicationId = application.Id; instance.ApplicationName = application.Name; instance.NodeId = Database.Node.Id; instance.IpAddress = Database.Node.IpAddress; instance.Port = port; instance.Tenant = tenant; instance.CreatedTime = DateTime.Now; instance.State = "Started"; instance.Url = "http://" + instance.IpAddress + ":" + instance.Port + "/" + tenant.Name.Replace (" ", "").ToLower () + "/" + MonoscapeUtil.PrepareApplicationVirtualFolderName (application.Name); Database.ChildProcesses.Add (p); Log.Info (typeof(NcApplicationGridService), "Started web server: " + instance.Url); return instance; } else { Database.ChildProcesses.Add (p); Log.Error (typeof(NcApplicationGridService), "Could not start web server for application " + application.Name + " " + application.Version); return null; } } catch (Exception e) { Log.Error (this, "Could not start web server"); throw e; } }
public ApplicationInstance Clone() { ApplicationInstance clone = new ApplicationInstance(); clone.Id = Id; clone.ApplicationId = ApplicationId; clone.ApplicationName = ApplicationName; clone.NodeId = NodeId; clone.ProcessId = ProcessId; clone.IpAddress = IpAddress; clone.Port = Port; clone.Url = Url; clone.Tenant = Tenant; clone.RowState = RowState; clone.RowVersion = RowVersion; clone.CreatedTime = CreatedTime; clone.State = State; clone.RequestCount = RequestCount; return clone; }
public bool Equals(ApplicationInstance instance) { return ((NodeId == instance.NodeId) && (ApplicationId == instance.ApplicationId) && (Id == instance.Id)); }
private void RemoveApplicationInstance_(ApplicationInstance instance_) { ApplicationInstance clone = instance_.Clone(); Database.GetInstance().RoutingMesh.Remove(instance_); clone.CreatedTime = DateTime.Now; clone.State = "Stopped"; Database.GetInstance().RoutingMeshHistory.Add(clone); }