Beispiel #1
0
        public void Get_By_Id_Returns_Valid_Release_Task()
        {
            var newRelease = new ReleaseTask();

            releaseTaskRepo.GetById(1).Returns(newRelease);
            var result = underTest.Get(1);

            Assert.Equal(newRelease, result);
        }
Beispiel #2
0
        private void StartTask()
        {
            //判断文件是否存在
            if (_users.Count <= 0)
            {
                _vm.LogText = "当前无任何用户";
                return;
            }

            //1.生成任务,加入到队列
            lock (_tasks)
            {
                if (_tasks.Count <= 0)
                {
                    //添加任务,计算执行时间
                    var count         = 0;
                    var execTime      = Logger.GetTimeStampMic(); //当前
                    var changeTimeMic = TimeSpan.FromMinutes(_vm.Status.ChangeInterval).TotalMilliseconds;
                    var changeTime    = long.Parse(changeTimeMic + "");
                    for (int i = 0; i < _users.Count; i++)
                    {
                        var user = _users[i];
                        if (i == 0)
                        {
                            _lastUsername = user.Username;
                        }

                        foreach (var goods in _goodsList)
                        {
                            if (goods.IsChecked == false && i == 0)
                            {
                                continue;                                     //只过滤第一个账号的商品
                            }
                            var task = new ReleaseTask {
                                Username = user.Username, GoodsNo = goods.GoodsNo
                            };
                            count++;
                            lock (task)
                            {
                                execTime += 1;
                                _tasks.Add(execTime, task); //添加任务
                            }
                        }

                        execTime += changeTime;
                    }

                    _vm.LogText = $"加入:{count}个任务到有序列表";
                }
            }

            _vm.LogText          = "任务已启动";
            _vm.Status.IsRunning = true;
        }
Beispiel #3
0
 public void ReleaseObject(T obj)
 {
     ReleaseTask?.Invoke(obj);
     if (objectStack.Count < targetCount)
     {
         objectStack.Push(obj);
     }
     else
     {
         DisposeTask?.Invoke(obj);
     }
 }
Beispiel #4
0
 public Task <ILockRelease> WaitOneAsync(CancellationToken token = default(CancellationToken))
 {
     lock (_lockedStateAccessLock)
     {
         if (!IsLocked)
         {
             IsLocked = true;
             var waitingTask = new ReleaseTask(this, token);
             waitingTask.Start();
             return(waitingTask);
         }
         else
         {
             var waitingTask = new ReleaseTask(this, token);
             _waitingLocks.Enqueue(waitingTask);
             return(waitingTask);
         }
     }
 }
        public System.IO.Stream GetLogsOfReleaseTask()
        {
            string projectName = ClientSampleHelpers.FindAnyProject(this.Context).Name;

            // Get a release client instance
            VssConnection     connection    = Context.Connection;
            ReleaseHttpClient releaseClient = connection.GetClient <ReleaseHttpClient>();

            // Get Release Defintion
            ReleaseDefinition releaseDefinition = releaseClient.GetReleaseDefinitionAsync(project: projectName, definitionId: newlyCreatedReleaseDefinitionId).Result;

            // Get all completed environment releases.
            // environmentStatusFilter values Undefined = 0,  NotStarted = 1, InProgress = 2, Succeeded = 4, Canceled = 8, Rejected = 16, Qeued = 32, Scheduled = 64, PartiallySucceeded = 128
            List <WebApiRelease> releases = new List <WebApiRelease>();

            ClientSampleHelpers.Retry(
                TimeSpan.FromMinutes(2),
                TimeSpan.FromSeconds(5),
                () =>
            {
                releases = releaseClient.GetReleasesAsync(project: projectName, definitionId: releaseDefinition.Id, definitionEnvironmentId: releaseDefinition.Environments.First().Id, expand: ReleaseExpands.Environments, environmentStatusFilter: 4).Result;
                return(releases.Count > 0);
            });

            // Get first release first environment first deployment first task log
            WebApiRelease release = releaseClient.GetReleaseAsync(project: projectName, releaseId: releases.First().Id).Result;

            this.completedReleaseId = release.Id;
            ReleaseEnvironment releaseEnvironment = release.Environments.First();
            ReleaseDeployPhase deployPhase        = releaseEnvironment.DeploySteps.First().ReleaseDeployPhases.FirstOrDefault();
            ReleaseTask        task = deployPhase.DeploymentJobs.First().Tasks.First();

            System.IO.Stream taskLog = releaseClient.GetTaskLogAsync(project: projectName, releaseId: release.Id, environmentId: releaseEnvironment.Id, releaseDeployPhaseId: deployPhase.Id, taskId: task.Id).Result;
            Context.Log("{0} {1}", release.Id.ToString().PadLeft(6), release.Id);

            return(taskLog);
        }
Beispiel #6
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <returns></returns>
        private async Task <bool> DoReleaseTask(ReleaseTask task)
        {
            if (_users.Count <= 0)
            {
                return(false);
            }
            _vm.LogText = $"开始执行任务:{task.Username} / 商品:{task.GoodsNo}";

            //查找user
            var user = _users.First(u => u.Username == task.Username);

            //发布商品
            var goods = _goodsList.First(g => g.GoodsNo == task.GoodsNo);

            if (user == null || goods == null)
            {
                _vm.LogText = $"任务执行失败:{task.Username}找不到对应信息";
            }

            if (user == null)
            {
                _vm.LogText = $"任务执行失败:{task.Username}找不到对应信息";
            }

            try
            {
                //进行发布


                //判断是否是切换账号了,如果是就直接勾选上所有商品
                if (user.Username != _lastUsername)
                {
                    foreach (var goodse in _goodsList)
                    {
                        goodse.IsChecked = true;
                    }

                    _lastUsername = user.Username;
                }


                var isLogin = await UserLogin(user); //检测是否已经登录

                if (!isLogin)
                {
                    //任务失败
                    _vm.LogText = $"任务:{task.Username} / 商品:{task.GoodsNo} 执行失败";
                    return(false);
                }

                goods.ReleaseStatus = "正在发布";

                var bean = JpParse.ParseGoodsToSaleBean(goods);
                bean.ItemId = 0; //重置

                //判断是否使用图片缓存
                var images = await UploadImages(user, goods); //上传图片格式 x,x,x,x

                if (images.Equals(""))
                {
                    throw new Exception("图片未上传成功");
                }

                _vm.LogText = $"上传完成:{images}";

                bean.ImgList = images;


                bean.Mode = 2;
                var ret = await Api.SetItem(user, bean);

                if (!ret.Ok)
                {
                    throw new Exception(ret.Message);
                }

                var data = ret.Data as ResData;
                if (data?.StatusCode != 1)
                {
                    throw new Exception(data?.Error.Message);
                }

                //校验
                var check = await Api.CheckSetItem(user);

                if (check.Ok)
                {
                }

                goods.ReleaseStatus = "发布成功";
                _vm.LogText         = $"{task.Username} / 商品:{goods.GoodsNo} / 发布成功";
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                _vm.LogText         = $" {task.Username} / 商品:{goods.GoodsNo} / 发布失败 / {ex.Message}";
                goods.ReleaseStatus = "发布失败";
            }

            //做一个延迟等待
            await Task.Delay(TimeSpan.FromSeconds(_vm.Status.ReleaseInterval));

            return(true);
        }
Beispiel #7
0
 public void SetParentReleaseTask(ReleaseTask releaseTask)
 {
     _targetEnvironment.ParentTask = releaseTask;
 }
Beispiel #8
0
 public IEnumerable <ReleaseTask> Put(int id, [FromBody] ReleaseTask value)
 {
     releaseTasksRepo.Update(value);
     return(releaseTasksRepo.GetAll());
 }
Beispiel #9
0
 public IEnumerable <ReleaseTask> Post([FromBody] ReleaseTask value)
 {
     releaseTasksRepo.Create(value);
     return(releaseTasksRepo.GetAll());
 }
 public int Post([FromBody] ReleaseTask value)
 {
     releaseTasksRepo.Create(value);
     return(value.ID);
 }
 public void AddReleaseTask(ReleaseTask releaseTask)
 {
     _component.ReleaseTasks.Add(releaseTask);
 }