private IEnumerable <Message> get(LogChronicleFilter filter) { filter.NonNull(nameof(filter)); if (!Running) { yield break; } var cLog = m_LogDb[COLLECTION_LOG]; var query = LogFilterQueryBuilder.BuildLogFilterQuery(filter); var totalCount = Math.Min(filter.PagingCount <= 0 ? FETCH_BY_LOG : filter.PagingCount, MAX_FETCH_DOC_COUNT); using (var cursor = cLog.Find(query, filter.PagingStartIndex, FETCH_BY_LOG)) { int i = 0; foreach (var bdoc in cursor) { var msg = BsonConvert.FromBson(bdoc); yield return(msg); if (++i > totalCount || !Running) { break; } } } }
public async Task <object> Filter(LogChronicleFilter filter) => await ApplyFilterAsync(filter).ConfigureAwait(false);
public async Task <IEnumerable <Message> > GetAsync(LogChronicleFilter filter) => await m_Log.NonNull().GetAsync(filter.NonNull(nameof(filter)));
public async Task <object> Filter(LogChronicleFilter filter) => await ApplyFilterAsync(filter);
public Task <IEnumerable <Message> > GetAsync(LogChronicleFilter filter) => Task.FromResult(get(filter));
public static Query BuildLogFilterQuery(LogChronicleFilter filter) { var query = new Query(); var andNodes = new List <BSONDocumentElement>(); void add(BSONElement elm) => andNodes.Add(new BSONDocumentElement(new BSONDocument().Set(elm))); if (!filter.Gdid.IsZero) { add(DataDocConverter.GDID_CLRtoBSON(BsonConvert.FLD_GDID, filter.Gdid)); } if (filter.Id.HasValue) { add(DataDocConverter.GUID_CLRtoBSON(BsonConvert.FLD_GUID, filter.Id.Value)); } if (filter.RelId.HasValue) { add(DataDocConverter.GUID_CLRtoBSON(BsonConvert.FLD_RELATED_TO, filter.RelId.Value)); } if (filter.Channel.HasValue && !filter.Channel.Value.IsZero) { add(new BSONInt64Element(BsonConvert.FLD_CHANNEL, (long)filter.Channel.Value.ID)); } if (filter.Application.HasValue && !filter.Application.Value.IsZero) { add(new BSONInt64Element(BsonConvert.FLD_APP, (long)filter.Application.Value.ID)); } if (filter.TimeRange.HasValue && filter.TimeRange.Value.Start.HasValue) { add(new BSONDocumentElement(BsonConvert.FLD_TIMESTAMP, new BSONDocument().Set(new BSONDateTimeElement("$gte", filter.TimeRange.Value.Start.Value)))); } if (filter.TimeRange.HasValue && filter.TimeRange.Value.End.HasValue) { add(new BSONDocumentElement(BsonConvert.FLD_TIMESTAMP, new BSONDocument().Set(new BSONDateTimeElement("$lte", filter.TimeRange.Value.End.Value)))); } if (filter.MinType.HasValue) { add(new BSONDocumentElement(BsonConvert.FLD_TYPE, new BSONDocument().Set(new BSONInt32Element("$gte", (int)filter.MinType.Value)))); } if (filter.MaxType.HasValue) { add(new BSONDocumentElement(BsonConvert.FLD_TYPE, new BSONDocument().Set(new BSONInt32Element("$lte", (int)filter.MaxType.Value)))); } if (andNodes.Count > 0) { query.Set(new BSONArrayElement("$and", andNodes.ToArray())); } //todo: Finish the Advanced filter //var ctx = m_LogXlat.TranslateInContext(filter.AdvancedFilter); // var query = query;// ctx.Query; return(query); }