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(); } } }
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); }
public override void OnActionExecuting( HttpActionContext actionContext) { OperationMonitor monitor = GetCompletion(actionContext.Request); Action end = monitor.Start(); actionContext.ActionArguments.Add("end-action", end); }
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); }
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); }