Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
            };
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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;
            //});
        }