예제 #1
0
        /// <summary>
        /// Обработчик старта ноды
        /// </summary>
        public void Started()
        {
            _status.AddCallback("test", action =>
            {
                if (action.PayLoad == null)
                {
                    _status.Next.Send(action.Message);
                }
                else
                {
                    _status.Next.Send(action.PayLoad);
                }
            });

            var apiService = _serviceProvider.GetRequiredService <IApiService>();

            // Отправляем информацию о старте и количестве акторов в ноде
            try
            {
                var url = string.Format("{0}/api/worker/started", _nodeSettings.ClusterUrl);
                apiService.PutOrPostRequest <NodeStarted, string>(url, new NodeStarted()
                {
                    ActorsCount = _nodeSettings.ActorsCount,
                    Host        = _nodeSettings.NodeUrl
                });
            }
            catch (Exception ex)
            {
                SendError(ex.ToString());
                _logger.Error(ex);
            }

            var cancellationTokenSource = new CancellationTokenSource();

            // Добавил простой heartbeat чтобы отслеживать на кластере существование нод
            TaskRepeater.Interval(TimeSpan.FromSeconds(_heartbeatInterval), () =>
            {
                try
                {
                    apiService.GetRequest <string>(string.Format("{0}/api/worker/ready/{1}", _nodeSettings.ClusterUrl, _nodeSettings.NodeUrl));
                }
                catch (Exception ex)
                {
                    SendError(ex.ToString());
                    _logger.Error(ex);
                }
            }, cancellationTokenSource.Token, true);
        }
예제 #2
0
        public async Task TaskRepeater_ShouldBeSentcurrencyToSap_WhenQueueHasOneValidElement()
        {
            var queueMock      = new Mock <IQueuingService>();
            var sapServiceMock = new Mock <ISapService>();
            var loggerMock     = new Mock <ILogger <TaskRepeater> >();

            var slackServiceMock = new Mock <ISlackService>();

            slackServiceMock.Setup(x => x.SendNotification(It.IsAny <string>()));

            using var sapTaskHandler = new TaskRepeater(loggerMock.Object, queueMock.Object, sapServiceMock.Object, slackServiceMock.Object);

            // We want only a result
            queueMock.SetupSequence(x => x.GetFromTaskQueue())
            .Returns(new SapTask
            {
                CurrencyRate = new SapCurrencyRate
                {
                    Currency = "ARS",
                    Rate     = "32",
                    RateDate = "20202308"
                },
                TaskType = SapTaskEnum.CurrencyRate
            });

            sapServiceMock.Setup(x => x.SendToSap(It.IsAny <SapTask>()))
            .ReturnsAsync(new SapTaskResult
            {
                IsSuccessful = true,
                TaskName     = "Test"
            });

            await sapTaskHandler.StartAsync(CancellationToken.None);

            // Consider to wait a little if some of the expected actions occurs
            // asynchronously
            // await Task.Delay(5);
            await sapTaskHandler.StopAsync(CancellationToken.None);

            loggerMock.Verify(
                x => x.Log(
                    LogLevel.Information,
                    It.IsAny <EventId>(),
                    It.Is <It.IsAnyType>((o, t) => o.ToString().Equals("Succeeded at Test.")),
                    It.IsAny <Exception>(),
                    (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()),
                Times.Exactly(1));
        }
예제 #3
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            GuidPoolLiteral.Text = TheHelper.JsSerializer.Serialize(TheGuidPool.CreateGuids(500));

            var taskTypes = TheHelper.TypesImplementingInterface(typeof(IWorkflowTask));
            var tasks     = taskTypes.Select(taskType => TheWorkflowTaskFactory.CreateTask(taskType)).ToList();

            var adapter = new WorkflowTaskCollectionUiAdapter(tasks);

            TaskInfoLiteral.Text = TheHelper.JsSerializer.Serialize(adapter);

            TaskRepeater.DataSource = adapter.Tasks.Values;
            TaskRepeater.DataBind();
        }
예제 #4
0
        public async Task TaskRepeater_ShouldBeSentBusinessPartnerToSap_WhenQueueHasOneValidElement()
        {
            var queueMock      = new Mock <IQueuingService>();
            var sapServiceMock = new Mock <ISapService>();
            var loggerMock     = new Mock <ILogger <TaskRepeater> >();

            using var sapTaskHandler = new TaskRepeater(loggerMock.Object, queueMock.Object, sapServiceMock.Object);

            queueMock.SetupSequence(x => x.GetFromTaskQueue())
            .Returns(new SapTask
            {
                DopplerUser = new DopplerUserDto
                {
                    Id           = 1,
                    FederalTaxID = "27111111115",
                    PlanType     = 1
                },
                TaskType = SapTaskEnum.CreateOrUpdateBusinessPartner
            });

            sapServiceMock.Setup(x => x.SendToSap(It.IsAny <SapTask>()))
            .ReturnsAsync(new SapTaskResult
            {
                IsSuccessful = true,
                TaskName     = "Test"
            });

            await sapTaskHandler.StartAsync(CancellationToken.None);

            // Consider to wait a little if some of the expected actions occurs
            // asynchronously
            // await Task.Delay(5);
            await sapTaskHandler.StopAsync(CancellationToken.None);

            loggerMock.Verify(
                x => x.Log(
                    LogLevel.Information,
                    It.IsAny <EventId>(),
                    It.Is <It.IsAnyType>((o, t) => o.ToString().Equals("Succeeded at Test.")),
                    It.IsAny <Exception>(),
                    (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()),
                Times.Exactly(1));
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            GuidPoolLiteral.Text = TheHelper.JsSerializer.Serialize(TheGuidPool.CreateGuids(500));

            var taskTypes = TheHelper.TypesImplementingInterface(typeof(IWorkflowTask));

            Log.Debug(string.Format("Found {0} types implementing IWorkflowTask", taskTypes.Count()));

            var tasks = taskTypes.Select(taskType => TheWorkflowTaskFactory.CreateTask(taskType)).ToList();

            var adapter = new WorkflowTaskCollectionUiAdapter(tasks);

            TaskInfoLiteral.Text = TheHelper.JsSerializer.Serialize(adapter);
            var data = adapter.Tasks.Values.OrderBy(v => v.Name);

            TaskRepeater.DataSource = data;
            TaskRepeater.DataBind();
        }
예제 #6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoginInfo       login = (LoginInfo)Session["login"];
                List <TaskInfo> task  = TaskDAO.GetTask(login.UserName);
                TaskRepeater.DataSource = task;
                TaskRepeater.DataBind();

                if (task.Count == 0)
                {
                    lblNoTask.Text = "No Task has been assigned by or to You!";
                }
                else
                {
                    lblNoTask.Text = "Following are tasks assigned by or to You!";
                }
            }
            ddlAssignTo.DataSource     = TaskDAO.userList();
            ddlAssignTo.DataTextField  = "FullName";
            ddlAssignTo.DataValueField = "UserName";
            ddlAssignTo.DataBind();
        }