コード例 #1
0
ファイル: ControllerService.cs プロジェクト: virajs/monoscape
        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();
            }
        }
コード例 #2
0
ファイル: ControllerService.cs プロジェクト: virajs/monoscape
        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();
            }
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
ファイル: EndPoints.cs プロジェクト: virajs/monoscape
        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;
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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;
            }
        }
コード例 #7
0
        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;
            }
        }
コード例 #8
0
        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;
            }
        }
コード例 #9
0
ファイル: Initializer.cs プロジェクト: virajs/monoscape
        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");
        }
コード例 #10
0
ファイル: ControllerService.cs プロジェクト: virajs/monoscape
        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);
            }
        }
コード例 #11
0
ファイル: ControllerService.cs プロジェクト: virajs/monoscape
 private void StartNcApFileReceiveSocket()
 {
     ncApFileReceiveSocket = new NcApFileReceiveSocket(Settings.ApplicationStorePath, MonoscapeUtil.FindHostIpAddress(), Settings.NcApFileReceiveSocketPort);
     ncApFileReceiveSocket.Open();
 }