コード例 #1
0
ファイル: MongoChronicleStore.cs プロジェクト: erxdkh/azos
        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;
                    }
                }
            }
        }
コード例 #2
0
 public async Task <object> Filter(LogChronicleFilter filter) => await ApplyFilterAsync(filter).ConfigureAwait(false);
コード例 #3
0
ファイル: ChronicleServerLogic.cs プロジェクト: erxdkh/azos
 public async Task <IEnumerable <Message> > GetAsync(LogChronicleFilter filter)
 => await m_Log.NonNull().GetAsync(filter.NonNull(nameof(filter)));
コード例 #4
0
 public async Task <object> Filter(LogChronicleFilter filter) => await ApplyFilterAsync(filter);
コード例 #5
0
ファイル: MongoChronicleStore.cs プロジェクト: erxdkh/azos
 public Task <IEnumerable <Message> > GetAsync(LogChronicleFilter filter) => Task.FromResult(get(filter));
コード例 #6
0
        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);
        }