示例#1
0
 private void UpdateApplications(List <Node> nodes)
 {
     foreach (Node node in nodes)
     {
         try
         {
             NcDescribeApplicationsRequest request = new NcDescribeApplicationsRequest(Settings.Credentials);
             var channel = EndPoints.GetNcApplicationGridService(node);
             NcDescribeApplicationsResponse response = channel.DescribeApplications(request);
             node.Applications = response.Applications;
             foreach (Application application in node.Applications)
             {
                 LbGetApplicationInstancesRequest request1 = new LbGetApplicationInstancesRequest(Settings.Credentials);
                 request1.NodeId        = node.Id;
                 request1.ApplicationId = application.Id;
                 LbGetApplicationInstancesResponse response1 = EndPoints.GetLbApplicationGridService().GetApplicationInstances(request1);
                 application.ApplicationInstances = response1.ApplicationInstances;
             }
             Log.Debug(this, "Updated applications of node " + node.ToString());
         }
         catch (Exception e)
         {
             Log.Error(this, "Could not update applications of node " + node.ToString());
             throw e;
         }
     }
 }
示例#2
0
        private void UploadApplicationToNode(int applicationId, Node node)
        {
            Log.Debug(this, "Uploading application " + applicationId + " to node " + node.ToString());

            Application app = FindApplication(applicationId);

            if (app != null)
            {
                string filePath = Path.Combine(Settings.ApplicationStorePath, app.FileName);
                if (File.Exists(filePath))
                {
                    Log.Debug(this, "Transferring application package...");
                    NcFileTransferSocket socket = new NcFileTransferSocket(node.IpAddress_, Settings.NcFileTransferSocketPort);
                    socket.SendFile(filePath);

                    Log.Debug(this, "Transferring application data...");
                    NcAddApplicationRequest request = new NcAddApplicationRequest(Credentials);
                    request.Application = app;
                    EndPoints.GetNcApplicationGridService(node).AddApplication(request);
                }
                else
                {
                    throw new MonoscapeException("File not found: " + app.FileName);
                }
            }
            else
            {
                throw new MonoscapeException("Application not found: " + app.Name);
            }
        }
示例#3
0
        private bool ApplicationExistsInNode(int applicationId, Node node)
        {
            NcApplicationExistsRequest request = new NcApplicationExistsRequest(Credentials);

            request.ApplicationId = applicationId;
            NcApplicationExistsResponse response = EndPoints.GetNcApplicationGridService(node).ApplicationExists(request);

            return(response.Exists);
        }
示例#4
0
        public ApStartApplicationResponse StartApplication(ApStartApplicationRequest request)
        {
            Log.Info(this, "StartApplication()");

            try
            {
                Authenticate(request);
                ApStartApplicationResponse response = new ApStartApplicationResponse();
                List <Node> nodes = FindAvailableNodes();
                foreach (Node node in nodes)
                {
                    if (!ApplicationExistsInNode(request.ApplicationId, node))
                    {
                        // Upload application to node
                        UploadApplicationToNode(request.ApplicationId, node);
                    }

                    NcStartApplicationInstancesRequest ncRequest = new NcStartApplicationInstancesRequest(Credentials);
                    ncRequest.ApplicationId     = request.ApplicationId;
                    ncRequest.TenantName        = request.TenantName;
                    ncRequest.NumberOfInstances = request.NumberOfInstances;
                    NcStartApplicationInstancesResponse ncResponse = EndPoints.GetNcApplicationGridService(node).StartApplicationInstances(ncRequest);
                    response.Urls = ncResponse.Urls;

                    // Update Routing Mesh in Load Balancer
                    LbAddApplicationInstancesRequest request2 = new LbAddApplicationInstancesRequest(Credentials);
                    request2.AppInstances = ncResponse.ApplicationInstances;
                    EndPoints.GetLbApplicationGridService().AddApplicationInstances(request2);
                }
                return(response);
            }
            catch (Exception e)
            {
                Log.Error(this, e);
                throw e;
            }
        }
示例#5
0
        public ApStopApplicationInstanceResponse StopApplicationInstance(ApStopApplicationInstanceRequest request)
        {
            Log.Info(this, "StopApplicationInstance()");

            try
            {
                Authenticate(request);
                ApStopApplicationInstanceResponse response = new ApStopApplicationInstanceResponse();
                Node node = Database.GetInstance().Nodes.Where(x => x.Id == request.NodeId).FirstOrDefault();
                if (node != null)
                {
                    // Stop application instance in the node
                    NcStopApplicationRequest ncRequest = new NcStopApplicationRequest(Credentials);
                    ncRequest.ApplicationId = request.ApplicationId;
                    ncRequest.InstanceId    = request.InstanceId;
                    EndPoints.GetNcApplicationGridService(node).StopApplicationInstance(ncRequest);

                    // Update routing mesh in the load balancer
                    LbRemoveApplicationInstanceRequest request_ = new LbRemoveApplicationInstanceRequest(Credentials);
                    request_.NodeId        = request.NodeId;
                    request_.ApplicationId = request.ApplicationId;
                    request_.InstanceId    = request.InstanceId;
                    EndPoints.GetLbApplicationGridService().RemoveApplicationInstances(request_);
                }
                else
                {
                    throw new MonoscapeException("Node not found");
                }
                return(response);
            }
            catch (Exception e)
            {
                Log.Error(this, e);
                throw e;
            }
        }