public Worker( WorkerSettings settings, RpcClientFactory rpcClientFactory, IMapping <TKey, TValueIn> mappingPhase, IReducing <TKey, TValueIn, TValueOut> reducingPhase, IPartitioning <TKey, TValueIn> partitioningPhase) { _settings = settings; _mappingPhase = mappingPhase; _reducingPhase = reducingPhase; _partitioningPhase = partitioningPhase; _workerInfoDto = new() { WorkerUuid = settings.WorkerUuid }; _channel = rpcClientFactory.CreateRpcChannel(); _heartBeatTicker = new() { Interval = TimeSpan.FromSeconds(4).TotalMilliseconds }; StartHeartbeat(); } public void Dispose() { _heartBeatTicker.Dispose(); _channel.Dispose(); }
public async Task <ActionResult> CreateAsync([FromBody] WorkerInfoDto workerInfoDto) { var worker = mapperWrapper.Map <Worker>(workerInfoDto); var validation = validator.Validate(worker); if (!validation.IsSuccess) { return(BadRequest(mapperWrapper.Map <ValidationResultDto>(validation))); } var createdWorker = await workerRepository.CreateAsync(Shop.Id, worker); var result = mapperWrapper.Map <WorkerDto>(createdWorker); return(Ok(result)); }
public async Task <ActionResult> UpdateAsync([FromRoute] Guid workerId, [FromBody] WorkerInfoDto workerInfoDto) { try { var worker = mapperWrapper.Map <Worker>(workerInfoDto); var validation = validator.Validate(worker); if (!validation.IsSuccess) { return(BadRequest(mapperWrapper.Map <ValidationResultDto>(validation))); } await workerRepository.UpdateAsync(Shop.Id, workerId, w => mapper.Map(worker, w)); } catch (KeyNotFoundException) { return(NotFound()); } return(Ok()); }
public Task <Empty> HeartbeatAsync(WorkerInfoDto request) { Console.WriteLine($"[info] {request.WorkerUuid}: Heartbeat."); lock (_workers) { var worker = _workers.Find(xxxx => xxxx.WorkerUuid == request.WorkerUuid); if (worker == null) { _workers.Add(new() { LastHeartbeatTime = DateTime.UtcNow, WorkerUuid = request.WorkerUuid }); } else { worker.LastHeartbeatTime = DateTime.UtcNow; } } return(Task.FromResult(new Empty())); }
public Task <TaskInfoDto> AskForTaskAsync(WorkerInfoDto request) { Console.WriteLine($"[info] {request.WorkerUuid}: Ask for task."); return(Task.FromResult(this.AssignTask(request))); }
public override Task <Empty> Heartbeat(WorkerInfoDto request, ServerCallContext context) { return(_master.HeartbeatAsync(request)); }
public override Task <TaskInfoDto> AskForTask(WorkerInfoDto request, ServerCallContext context) { return(_master.AskForTaskAsync(request)); }