public PackageFileUploadResponse UploadStitchPackageFileFromRemote(PackageFileUploadRequest request) { if (!request.IsValidRemoteRequest()) { return(new PackageFileUploadResponse(false, null, null)); } // Save the file and generate a unique Version name var result = _fileSystem.SavePackageToLibrary(request.GroupName.Application, request.GroupName.Component, request.GroupName.Version, request.Contents); var packageFile = new PackageFile { Id = request.GroupName.ToString(), Adaptor = request.Adaptor, FileName = request.FileName, GroupName = request.GroupName }; bool ok = _data.Save(packageFile, true); if (!ok) { _log.LogError("Could not save PackageFile Id={0} from remote", request.GroupName.ToString()); } _log.LogDebug("Uploaded package file {0}", request.GroupName); return(new PackageFileUploadResponse(ok, request.GroupName, result.FilePath)); }
public StitchGroupNancyModule(IMessageBus messageBus) : base("/stitchgroups") { Post["/{GroupName}/upload"] = x => { var file = Request.Files.Single(); var request = new PackageFileUploadRequest { GroupName = new StitchGroupName(x.GroupName.ToString()), FileName = file.Name, Contents = file.Value, LocalOnly = true }; return(messageBus.Request <PackageFileUploadRequest, PackageFileUploadResponse>(request)); }; Post["/{GroupName}/createinstance"] = x => { var request = this.Bind <CreateInstanceRequest>(); request.GroupName = new StitchGroupName(x.GroupName.ToString()); request.LocalOnly = true; return(messageBus.Request <CreateInstanceRequest, CreateInstanceResponse>(request)); }; // TODO: The rest of these requests are local-only, so we need to tell the handler // (MasterModule) that these requests are local and the similar-looking ones from the // Cluster api are cluster-wide. Get["/{GroupName}"] = _ => { // TODO: Get all instances in the group, including status and home node return(null); }; Post["/{GroupName}/stopall"] = _ => { return(messageBus.Request <CommandRequest, CommandResponse>(new CommandRequest { Command = CommandType.StopStitchGroup, Target = _.GroupName.ToString() })); }; Post["/{GroupName}/startall"] = _ => { return(messageBus.Request <CommandRequest, CommandResponse>(new CommandRequest { Command = CommandType.StartStitchGroup, Target = _.GroupName.ToString() })); }; Post["/{GroupName}/stopoldversions"] = _ => { // TODO: Stop all instances in the version group which are older than the group // specified return(null); }; }
private PackageFileUploadResponse UploadPackageFile(PackageFileUploadRequest request) { var response = _messageBus.Request <PackageFileUploadRequest, PackageFileUploadResponse>(PackageFileUploadRequest.ChannelLocal, request); if (!response.IsSuccess) { _log.LogError("Could not upload package file"); return(response); } if (request.LocalOnly) { return(response); } return(_service.UploadStitchPackageFile(response.GroupName, response.FilePath, request)); }
public PackageFileUploadResponse UploadStitchPackageFile(PackageFileUploadRequest request) { if (!request.IsValidLocalRequest()) { return(new PackageFileUploadResponse(false, null, null)); } // Save the file and generate a unique Version name var result = _fileSystem.SavePackageToLibrary(request.GroupName.Application, request.GroupName.Component, request.Contents); var groupName = new StitchGroupName(request.GroupName.Application, request.GroupName.Component, result.Version); var packageFile = new PackageFile { Id = groupName.ToString(), Adaptor = request.Adaptor, FileName = request.FileName, GroupName = groupName }; bool ok = _data.Save(packageFile, true); _log.LogDebug("Uploaded package file {0}", groupName); return(new PackageFileUploadResponse(true, groupName, result.FilePath)); }
public PackageFileUploadResponse UploadStitchPackageFile(StitchGroupName groupName, string filePath, PackageFileUploadRequest request) { // Send this to all nodes which are running the Stitches module var nodes = _data.GetAll <NodeStatus>() .Where(n => n.Id != _core.NodeId) .Where(ns => ns.RunningModules.Contains(ModuleNames.Stitches)) .ToList(); if (nodes.Count == 0) { return(new PackageFileUploadResponse(true, groupName, filePath)); } var job = _jobManager.CreateJob("Command=PackageFileUpload"); foreach (var node in nodes) { var task = job.CreateSubtask(CommandType.UploadPackageFile, node.Id, node.Id); _clusterSender.SendPackageFile(node.NetworkNodeId, groupName, request.FileName, filePath, request.Adaptor, job.Id, task.Id); } _jobManager.Save(job); return(new PackageFileUploadResponse(true, groupName, filePath, job.Id)); }
public ClusterNancyModule(IMessageBus messageBus) : base("/cluster") { var data = new DataHelperClient(messageBus); Get("/", _ => data.GetAll <NodeStatus>()); Get("/nodes/{NodeId}", (Func <dynamic, NodeStatus>)(_ => data.Get <NodeStatus>(_.NodeId.ToString()))); Get("/nodes/{NodeId}/stitches", _ => messageBus.RequestWait <StitchSummaryRequest, List <StitchSummary> >(new StitchSummaryRequest { NodeId = _.NodeId.ToString() })); Get("/nodes/{NodeId}/stitches/{StitchId}", _ => messageBus.RequestWait <StitchSummaryRequest, List <StitchSummary> >(new StitchSummaryRequest { NodeId = _.NodeId.ToString(), StitchId = _.StitchId.ToString() }).FirstOrDefault()); Get("/stitches", _ => messageBus.RequestWait <StitchSummaryRequest, List <StitchSummary> >(new StitchSummaryRequest())); Get("/stitchgroups/{GroupName}", _ => messageBus.RequestWait <StitchSummaryRequest, List <StitchSummary> >(new StitchSummaryRequest { StitchGroupName = _.GroupName.ToString() })); Post <PackageFileUploadResponse>("/stitchgroups/{GroupName}/upload", x => { var file = Request.Files.Single(); var request = new PackageFileUploadRequest { GroupName = new StitchGroupName(x.GroupName.ToString()), FileName = file.Name, Contents = file.Value, LocalOnly = false }; return(messageBus.RequestWait <PackageFileUploadRequest, PackageFileUploadResponse>(request)); }); Post <CreateInstanceResponse>("/stitchgroups/{GroupName}/createinstance", x => { var request = this.Bind <CreateInstanceRequest>(); request.GroupName = new StitchGroupName(x.GroupName.ToString()); request.LocalOnly = false; return(messageBus.RequestWait <CreateInstanceRequest, CreateInstanceResponse>(request)); }); Post <CommandResponse>("/stitchgroups/{GroupName}/stopall", _ => messageBus.RequestWait <CommandRequest, CommandResponse>(new CommandRequest { Command = CommandType.StopStitchGroup, Target = _.GroupName.ToString() })); Post <CommandResponse>("/stitchgroups/{GroupName}/startall", _ => messageBus.RequestWait <CommandRequest, CommandResponse>(new CommandRequest { Command = CommandType.StartStitchGroup, Target = _.GroupName.ToString() })); //Post("/stitchgroups/{GroupName}/stopoldversions", _ => //{ // // TODO: Stop all instances in the version group which are older than the group // // specified // return null; //}); //Post("/stitchgroups/{GroupName}/rebalance", _ => //{ // // TODO: Rebalance all instances in the group across the cluster // return null; //}); }