Exemple #1
0
        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());
        }
Exemple #4
0
 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()));
 }
Exemple #5
0
 public Task <TaskInfoDto> AskForTaskAsync(WorkerInfoDto request)
 {
     Console.WriteLine($"[info] {request.WorkerUuid}: Ask for task.");
     return(Task.FromResult(this.AssignTask(request)));
 }
Exemple #6
0
 public override Task <Empty> Heartbeat(WorkerInfoDto request, ServerCallContext context)
 {
     return(_master.HeartbeatAsync(request));
 }
Exemple #7
0
 public override Task <TaskInfoDto> AskForTask(WorkerInfoDto request, ServerCallContext context)
 {
     return(_master.AskForTaskAsync(request));
 }