public void Run() { try { Console.WriteLine("Monoscape Node Controller"); Console.WriteLine("Version: 1.0.0.0"); String hostName = MonoscapeUtil.FindHostName(); String hostIpAddress = MonoscapeUtil.FindHostIpAddress().ToString(); Console.WriteLine("Host Name: " + hostName); Console.WriteLine("Host IP Address: " + hostIpAddress); if (MonoscapeUtil.IsRunningOnMono()) { Console.WriteLine("Mono: " + MonoscapeUtil.GetMonoRuntime()); } Console.WriteLine(".NET Runtime Version: " + MonoscapeUtil.GetDotNetRuntime()); Console.WriteLine("Operating System: " + Environment.OSVersion.VersionString + Environment.NewLine); Initialize(); SubscribeToApplicationGrid(); StartApplicationGridService(); StartNcApFileReceiveSocket(); Console.WriteLine("Press Enter to stop..."); Console.ReadLine(); } catch (Exception e) { Log.Error(this, e.Message); } finally { Dispose(); } }
public void Run() { try { Console.WriteLine("Monoscape Cloud Controller"); Console.WriteLine("Version: 1.0.0.0"); String hostName = MonoscapeUtil.FindHostName(); String hostIpAddress = MonoscapeUtil.FindHostIpAddress().ToString(); Console.WriteLine("Host Name: " + hostName); Console.WriteLine("Host IP Address: " + hostIpAddress); if (MonoscapeUtil.IsRunningOnMono()) { Console.WriteLine("Mono: " + MonoscapeUtil.GetMonoRuntime()); } Console.WriteLine(".NET Runtime Version: " + MonoscapeUtil.GetDotNetRuntime()); Console.WriteLine("Operating System: " + MonoscapeUtil.GetOperatingSystem() + Environment.NewLine); Initialize(); StartDashboardService(); StartApplicationService(); StartExternalSystemService(); Console.WriteLine("Press Enter to stop..."); Console.ReadLine(); } catch (Exception e) { Log.Error(this, e); Console.ReadLine(); } finally { Dispose(); } }
public ApGetConfigurationSettingsResponse GetConfigurationSettings(ApGetConfigurationSettingsRequest request) { Log.Debug(this, "GetConfigurationSettings()"); try { Authenticate(request); ApGetConfigurationSettingsResponse response = new ApGetConfigurationSettingsResponse(); ApConfigurationSettings settings = new ApConfigurationSettings(); settings.IpAddress = MonoscapeUtil.FindHostIpAddress(); settings.RunningOnMono = MonoscapeUtil.IsRunningOnMono(); settings.MonoRuntime = MonoscapeUtil.GetMonoRuntime(); settings.DotNetRuntime = MonoscapeUtil.GetDotNetRuntime(); settings.OperatingSystem = MonoscapeUtil.GetOperatingSystem(); settings.IaasName = Settings.IaasName; settings.IaasAccessKey = Settings.IaasAccessKey; settings.IaasSecretKey = Settings.IaasSecretKey; settings.IaasServiceURL = Settings.IaasServiceURL; settings.IaasKeyName = Settings.IaasKeyName; response.ConfigurationSettings = settings; return(response); } catch (Exception e) { Log.Error(this, e); throw e; } }
public static INcApplicationGridService GetNcApplicationGridService(Node node) { try { string serviceUrl = node.ApplicationGridServiceUrl; string hostIpAddress = MonoscapeUtil.FindHostIpAddress().ToString(); if (node.IpAddress.Equals(hostIpAddress) && (serviceUrl.Contains(node.IpAddress))) { Log.Debug(typeof(EndPoints), "Node " + node.ToString() + " is running on the same host as the Application Grid"); serviceUrl.Replace(node.IpAddress, "localhost"); } Log.Debug(typeof(EndPoints), "Creating INcApplicationGridService channel to node: " + serviceUrl); var binding = MonoscapeServiceHost.GetBinding(); var address = new EndpointAddress(serviceUrl); ChannelFactory <INcApplicationGridService> factory = new ChannelFactory <INcApplicationGridService>(binding, address); INcApplicationGridService channel = factory.CreateChannel(); return(channel); } catch (Exception e) { MonoscapeException me = new MonoscapeException("Could not connect to the node", e); Log.Error(typeof(EndPoints), me); throw me; } }
private int ExtractApplicationPackage(Application app, string tenantName) { try { string filePath = Path.Combine(Settings.ApplicationStorePath, app.FileName); if (!MonoscapeUtil.WebConfigExistsInRoot(filePath)) { throw new MonoscapeException("Application package is not valid. Re-package the application without any folders and try again."); } int port = (Database.LastWebServerPort + 1); string extractPath = PrepareApplicationDeployPath(app, tenantName, port); if (Directory.Exists(extractPath)) { // Remove previously extracted application content Directory.Delete(extractPath, true); Directory.CreateDirectory(extractPath); } else if (!Directory.Exists(Settings.ApplicationDeployPath)) { // Create application deployment path Directory.CreateDirectory(Settings.ApplicationDeployPath); } SharpZip.Extract(extractPath, filePath); return(port); } catch (Exception e) { throw new MonoscapeException("Application package extraction failed", e); } }
public UploadApplicationResponse UploadApplication(UploadApplicationRequest request) { Log.Info(this, "UploadApplication()"); try { UploadApplicationResponse response = new UploadApplicationResponse(); string basePath = GetApplicationStorePath(); if (!Directory.Exists(basePath)) { Directory.CreateDirectory(basePath); } string serverFileName = Path.Combine(basePath, request.Metadata.RemoteFileName); using (FileStream outfile = new FileStream(serverFileName, FileMode.Create)) { const int bufferSize = 65536; // 64K Byte[] buffer = new Byte[bufferSize]; int bytesRead = request.FileByteStream.Read(buffer, 0, bufferSize); while (bytesRead > 0) { outfile.Write(buffer, 0, bytesRead); bytesRead = request.FileByteStream.Read(buffer, 0, bufferSize); } outfile.Close(); } //using (ZipFile zip = ZipFile.Read(serverFileName, options)) { if (!MonoscapeUtil.WebConfigExistsInRoot(serverFileName)) { if (File.Exists(serverFileName)) { File.Delete(serverFileName); } throw new MonoscapeException("Application package is not valid. Re-package the application excluding any project folders and try again."); } } Application application = new Application(); application.Id = request.Metadata.ApplicationId; application.Name = request.Metadata.ApplicationName; application.Version = request.Metadata.ApplicationVersion; application.FileName = Path.GetFileName(serverFileName); application.State = ApplicationState.Uploaded; ApplicationUploaded(application); return(response); } catch (Exception e) { Log.Error(this, e); throw e; } }
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 ApAddApplicationResponse AddApplication(ApAddApplicationRequest request) { Log.Debug(this, "AddApplication()"); try { Authenticate(request); Log.Info(this, "Application " + request.Application.Name + " received"); if (!ControllerUtil.ApplicationExists(request.Application)) { string filePath = Settings.ApplicationStorePath + Path.DirectorySeparatorChar + request.Application.FileName; if (!MonoscapeUtil.WebConfigExistsInRoot(filePath)) { if (File.Exists(filePath)) { File.Delete(filePath); } throw new MonoscapeException("Application package is not valid. Re-package the application excluding any project folders and try again."); } try { Database.GetInstance().Applications.Add(request.Application); Database.GetInstance().Commit(); Log.Debug(this, "Application added to the database"); } catch (Exception) { Log.Debug(this, "Application package not found"); } } else { Log.Debug(this, "Application already exists in the database"); } return(new ApAddApplicationResponse()); } catch (Exception e) { Log.Error(this, e); throw e; } }
public static void Initialize() { Log.Info(typeof(Initializer), "Initializing Node Controller..."); AppSettingsReader reader = new AppSettingsReader(); NodeControllerSettings settings = new NodeControllerSettings(); settings.MonoscapeAccessKey = (string)reader.GetValue("MonoscapeAccessKey", typeof(string)); settings.MonoscapeSecretKey = (string)reader.GetValue("MonoscapeSecretKey", typeof(string)); string hostIp = MonoscapeUtil.FindHostIpAddress().ToString(); settings.ApplicationGridServiceURL = ((string)reader.GetValue("ApplicationGridServiceURL", typeof(string))).Replace("node-ipaddress", hostIp); settings.FileServerServiceURL = ((string)reader.GetValue("FileServerServiceURL", typeof(string))).Replace("node-ipaddress", hostIp); settings.FileServerServiceNetTcpURL = ((string)reader.GetValue("FileServerServiceNetTcpURL", typeof(string))).Replace("node-ipaddress", hostIp); settings.FileServerServiceNetPipeURL = ((string)reader.GetValue("FileServerServiceNetPipeURL", typeof(string))).Replace("node-ipaddress", hostIp); settings.ApplicationGridEndPointURL = ((string)reader.GetValue("ApplicationGridEndPointURL", typeof(string))); settings.ApplicationStoreFolder = (string)reader.GetValue("ApplicationStoreFolder", typeof(string)); settings.ApplicationStorePath = Path.GetFullPath(settings.ApplicationStoreFolder); settings.ApplicationDeployFolder = (string)reader.GetValue("ApplicationDeployFolder", typeof(string)); settings.ApplicationDeployPath = Path.GetFullPath(settings.ApplicationDeployFolder); settings.SQLiteConnectionString = (string)reader.GetValue("SQLiteConnectionString", typeof(string)); settings.InitialWebServerPort = (int)reader.GetValue("InitialWebServerPort", typeof(int)); settings.WindowsXSPWebServerPath = (string)reader.GetValue("WindowsXSPWebServerPath", typeof(string)); settings.UnixXSPWebServerPath = (string)reader.GetValue("UnixXSPWebServerPath", typeof(string)); settings.NcApFileReceiveSocketPort = (int)reader.GetValue("NcApFileReceiveSocketPort", typeof(int)); Settings.Initialize(settings); Database.LastWebServerPort = Settings.InitialWebServerPort - 1; ClearApplicationStore(); ClearWebRoot(); Log.Info(typeof(Initializer), "Node Controller initialized"); }
private void SubscribeToApplicationGrid() { try { Console.WriteLine("Subscribing to Application Grid at: " + Settings.ApplicationGridEndPointURL); MonoscapeCredentials credentials = new MonoscapeCredentials(Settings.MonoscapeAccessKey, Settings.MonoscapeSecretKey); ApSubscribeNodeRequest request = new ApSubscribeNodeRequest(credentials); IPAddress hostIp = MonoscapeUtil.FindHostIpAddress(); request.IpAddress = hostIp.ToString(); request.IpAddress_ = hostIp; request.ApplicationGridServiceUrl = Settings.ApplicationGridServiceUrl; request.FileTransferServiceUrl = Settings.FileServerServiceUrl + "/wsHttp"; IApNodeControllerService channel = EndPoints.GetApNodeControllerService(); ApSubscribeNodeResponse response = channel.SubscribeNode(request); Database.Node = response.Node; Console.WriteLine("Subscribed successfully"); } catch (EndpointNotFoundException e) { throw new MonoscapeException("Could not connect to the Application Grid", e); } }
private void StartNcApFileReceiveSocket() { ncApFileReceiveSocket = new NcApFileReceiveSocket(Settings.ApplicationStorePath, MonoscapeUtil.FindHostIpAddress(), Settings.NcApFileReceiveSocketPort); ncApFileReceiveSocket.Open(); }