コード例 #1
0
        protected void Handle(EventArgs args)
        {
            Assert.IsNotNull(args, "event args");
            IEvent instance = this.index.Locator.GetInstance <IEvent>();

            if (instance.ExtractParameters(args).Length != 2)
            {
                CrawlingLog.Log.Fatal($"[Index={this.index.Name}] RemoteRebuildStrategy skipped. Invalid parameters", null);
            }
            else if (!((instance.ExtractParameter(args, 1) is bool) && ((bool)instance.ExtractParameter(args, 1))))
            {
                CrawlingLog.Log.Fatal($"[Index={this.index.Name}] RemoteRebuildStrategy skipped. Full Rebuild was not detected.", null);
            }
            else
            {
                this.indexName = instance.ExtractParameter <string>(args, 0);
                if (string.IsNullOrEmpty(this.indexName))
                {
                    CrawlingLog.Log.Fatal($"[Index={this.index.Name}] RemoteRebuildStrategy skipped. Invalid parameters", null);
                }
                else if (this.index.Name.Equals(this.indexName, StringComparison.InvariantCultureIgnoreCase))
                {
                    OperationMonitor.Register(new Action(this.Run));
                    OperationMonitor.Trigger();
                }
            }
        }
コード例 #2
0
        public async Task Monitor_NoTimeout()
        {
            var connection = new TestConnection();
            var task       = new OperationTask();
            var flow       = new OperationTaskflow(task);

            List <OperationEvent> received = new List <OperationEvent>();

            void callback(OperationEvent operationEvent)
            {
                received.Add(operationEvent);
            }

            var monitor = new OperationMonitor(
                flow,
                TimeSpan.FromMilliseconds(200),
                TimeSpan.FromMilliseconds(200),
                connection,
                callback);

            // Time to start monitoring
            await Task.Delay(100);

            monitor.Update(TaskProgress.Acknowledged);

            await Task.Delay(100);

            flow.Update(TaskProgress.Confirmed);

            await Task.Delay(300);

            Assert.AreEqual(0, received.Count);
            Assert.IsTrue(monitor.IsComplete);
        }
コード例 #3
0
        public override void OnActionExecuting(
            HttpActionContext actionContext)
        {
            OperationMonitor monitor =
                GetCompletion(actionContext.Request);
            Action end = monitor.Start();

            actionContext.ActionArguments.Add("end-action", end);
        }
コード例 #4
0
        private static OperationMonitor GetCompletion(
            HttpRequestMessage request)
        {
            string actionName = request.GetActionDescriptor().ActionName;

            var monitor = _cache[actionName] as OperationMonitor;

            if (monitor != null)
            {
                return(monitor);
            }

            var policy = new CacheItemPolicy()
            {
                SlidingExpiration = TimeSpan.FromMinutes(10)
            };

            monitor = new OperationMonitor(request);
            _cache.Set(actionName, monitor, policy);
            return(monitor);
        }
コード例 #5
0
        public void Monitor_AcknowledgeLost()
        {
            var connection = new TestConnection();
            var task       = new OperationTask();
            var flow       = new OperationTaskflow(task);

            AutoResetEvent signal = new AutoResetEvent(false);

            void callback(OperationEvent operationEvent)
            {
                signal.Set();
            }

            connection.NextStatus = new OperationStatus
            {
                Events     = new[] { new OperationEvent() },
                RetryAfter = TimeSpan.FromMilliseconds(100)
            };

            var monitor = new OperationMonitor(
                flow,
                TimeSpan.FromMilliseconds(100),
                TimeSpan.FromMilliseconds(2000),
                connection,
                callback);

            Assert.IsTrue(signal.WaitOne(200));
            Assert.IsTrue(signal.WaitOne(200));
            Assert.IsTrue(signal.WaitOne(200));

            monitor.Update(TaskProgress.Confirmed);

            Assert.IsFalse(signal.WaitOne(200));

            Assert.IsTrue(monitor.IsComplete);
        }