//this method gets called once but the HeartbeatController gets an action as a param that it then //executes on a timer. I haven't included that but you get the idea //This method also checks for tasks that have stopped and restarts them if the manifest call says they should be running. //Will also start any new tasks included in the manifest and stop any that aren't included in the manifest. internal void MonitorTasks() { HeartbeatController.Beat(() => { HeartBeatHappened?.Invoke(this, null); List <int> tasksToStart = new List <int>(); //this is an api call or whatever drives your config that says what tasks must be running. var newManifest = this.GetManifest(Properties.Settings.Default.ResourceId); //task Removed Check - If a Processor is removed from the task pool, cancel it if running and remove it from the Tasks List. List <int> instanceIds = new List <int>(); newManifest.Processors.ForEach(x => instanceIds.Add(x.ProcessorId)); var removed = Tasks.Select(x => x.ProcessorId).ToList().Except(instanceIds).ToList(); if (removed.Count() > 0) { foreach (var extaskId in removed) { var task = Tasks.FirstOrDefault(x => x.ProcessorId == extaskId); task.CancellationTokenSource?.Cancel(); } } foreach (var newtask in newManifest.Processors) { var oldtask = Tasks.FirstOrDefault(x => x.ProcessorId == newtask.ProcessorId); //Existing task check if (oldtask != null && oldtask.Task != null) { if (!oldtask.Task.IsCanceled && (oldtask.Task.IsCompleted || oldtask.Task.IsFaulted)) { var ex = oldtask.Task.Exception; tasksToStart.Add(oldtask.ProcessorId); continue; } } else //New task Check { tasksToStart.Add(newtask.ProcessorId); } } foreach (var item in tasksToStart) { var taskToRemove = Tasks.FirstOrDefault(x => x.ProcessorId == item); if (taskToRemove != null) { Tasks.Remove(taskToRemove); } var task = newManifest.Processors.FirstOrDefault(x => x.ProcessorId == item); if (task != null) { CreateProcessorTask(task); } } }); }
public void should_edit() { var controller = new HeartbeatController(null, null); var result = controller.Edit(); var display = (CreateHeartbeatInput)result.ViewData.Model; display.Message.ShouldBeNull(); }
public void should_save_new_heartbeat() { var form = new CreateHeartbeatInput { Message = "Howdy" }; var controller = new HeartbeatController(null, null); var result = (CommandResult)controller.Edit(form); result.Success.AssertActionRedirect().ToAction <HeartbeatController>(a => a.Index()); }
public void Setup() { var mockHeartbeatJobController = new Mock <IRecurringJobManager>(); var mockConfig = new HeartbeatConfig { IntervalMinutes = Int32.MaxValue }; var mockOptions = Options.Create <HeartbeatConfig>(mockConfig); heartbeat = new HeartbeatImpl(mockOptions, mockHeartbeatJobController.Object); hbController = new HeartbeatController(heartbeat); }
public void Get_should_return_status_code_200() { var controller = new HeartbeatController(); var result = controller.Get(); result.Should().BeAssignableTo <StatusCodeResult>(); var statusCodeResult = result as StatusCodeResult; statusCodeResult.StatusCode.Should().Be((int)HttpStatusCode.OK); }
public void should_list_on_index() { var top = new Heartbeat[3]; var repository = S <IHeartbeatRepository>(); repository.Stub(x => x.GetTop()).Return(top); var controller = new HeartbeatController(repository, null); var result = controller.Index(); result.ViewData.Model.ShouldBeTheSameAs(top); }
public void should_check_the_heartbeat() { var timeout = 5; var message = "something"; var checker = S <IHeartbeatChecker>(); checker.Stub(x => x.CheckHeartbeat(timeout)).Return(message); var controller = new HeartbeatController(null, checker); var result = controller.Check(5); var checkResult = (HeartbeatCheckDisplay)result.ViewData.Model; checkResult.Message.ShouldEqual(message); }
public SceneController() { playerOne = new PlayerController("Player One", 1); playerTwo = new PlayerController("Player Two", 2); heartbeatController = new HeartbeatController(playerOne, playerTwo); mainAudio = new GameObject("Main Audio").AddComponent <AudioSource>(); mainAudio.clip = Resources.Load <AudioClip>("Audio/Memo"); mainAudio.loop = true; mainAudio.transform.position = Vector3.zero; mainAudio.playOnAwake = false; mainAudio.volume = 0.02f; hasWon = false; victory = GameObject.Find("Victory").transform; victory.gameObject.SetActive(false); menu = GameObject.Find("Menu").transform; menu.gameObject.SetActive(false); }
// Heart beats are sent from replica to masters. private async Task SendHeartbeats() { IDictionary <string, Task> heartbeatTasks = new Dictionary <string, Task>(); foreach (Server masterServer in GetMastersOfPartitionsWhereSelfReplica()) { heartbeatTasks.Add(masterServer.Id, HeartbeatController.ExecuteAsync(masterServer.Stub, selfServerId, HEARTBEAT_TIMEOUT)); } foreach (KeyValuePair <string, Task> heartbeatTask in heartbeatTasks) { string masterId = heartbeatTask.Key; Task task = heartbeatTask.Value; try { await task; } catch (Grpc.Core.RpcException exception) when(exception.StatusCode == Grpc.Core.StatusCode.DeadlineExceeded || exception.StatusCode == Grpc.Core.StatusCode.Internal) { Console.WriteLine($"{DateTime.Now:HH:mm:ss tt} No response from master '{masterId}' heartbeat in '{HEARTBEAT_TIMEOUT}' milliseconds."); DeclareDead(masterId); } } }
public HeartbeatControllerTests() { _underTest = new HeartbeatController(); }