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; } }
public ApSubscribeNodeResponse SubscribeNode(ApSubscribeNodeRequest request) { Log.Debug(typeof(ApNodeControllerService), "SubscribeNode()"); try { // Remove existing node instance if already subscribed Node existing = Database.GetInstance().Nodes.Find(x => x.IpAddress.Equals(request.IpAddress)); if (existing != null) Database.GetInstance().Nodes.Remove(existing); Node node = new Node(); // Initialize Node Id // Multiple nodes may exist in the same host node.Id = GetNextNodeId(); // Initialize node IP Address node.IpAddress = request.IpAddress; node.IpAddress_ = request.IpAddress_; // Find node's virtual machine instance id from IaaS node.InstanceId = FindInstanceId(request.IpAddress); node.ApplicationGridServiceUrl = request.ApplicationGridServiceUrl; node.FileTransferServiceUrl = request.FileTransferServiceUrl; node.SubscribedOn = DateTime.Now; // Update database Database.GetInstance().Nodes.Add(node); ApSubscribeNodeResponse response = new ApSubscribeNodeResponse(); // Send node information back response.Node = node; Log.Debug(typeof(ApNodeControllerService), "Node " + node.ToString() + " subscribed successfully"); return response; } catch (Exception e) { Log.Error(this, e); throw e; } }
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); } }
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; }
internal static bool IsNodeAvailable(Node node) { try { // Echo node to check availability Log.Debug(typeof(EndPoints), "Checking node " + node + " availability..."); GetNcApplicationGridService(node).Echo(new EchoRequest(Settings.Credentials)); Log.Debug(typeof(EndPoints), "Node " + node + " is online"); return true; } catch (EndpointNotFoundException) { Log.Debug(typeof(EndPoints), "Node " + node + " is offline"); return false; } }