Example #1
0
        public override int RemoveTimedOutServers(TimeSpan timeOut)
        {
            if (timeOut.Duration() != timeOut)
            {
                throw new ArgumentException("The `timeOut` value must be positive.", nameof(timeOut));
            }

            var timeOutAt = DateTime.UtcNow.Add(timeOut.Negate());
            var getTimedOutServerIdsReponse = _elasticClient.ScrollingSearch <Model.Server>(descr => descr
                                                                                            .StoredFields(sf => sf.Fields(new string[0]))
                                                                                            .Query(query => query
                                                                                                   .DateRange(c => c
                                                                                                              .Field(field => field.LastHeartBeat)
                                                                                                              .LessThan(DateMath.Anchored(timeOutAt)))));

            var serverIds     = getTimedOutServerIdsReponse.Select(x => x.Id);
            var bulkResponses = _elasticClient.BatchedBulk(serverIds,
                                                           (descr, serverId) => descr.Delete <object>(desc => desc.Id(serverId).Type <Model.Server>()));

            return(bulkResponses.SelectMany(response => response.Items).Count());
        }