Ejemplo n.º 1
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public Task WriteAsync(LogBatch data)
        {
            var toSend = data.NonNull(nameof(data)).Data.NonNull(nameof(data));

            if (!Running)
            {
                return(Task.CompletedTask);
            }

            var cLog = m_LogDb[COLLECTION_LOG];

            int i = 0;

            using (var errors = new ErrorLogBatcher(App.Log)
            {
                Type = MessageType.Critical, From = this.ComponentLogFromPrefix + nameof(WriteAsync), Topic = ComponentLogTopic
            })
                foreach (var batch in toSend.BatchBy(0xf))
                {
                    var bsons = batch.Select(msg => {
                        if (msg.Gdid.IsZero)
                        {
                            msg.Gdid = m_Gdid.Provider.GenerateOneGdid(scopeName: SysConsts.GDID_NS_CHRONICLES, sequenceName: COLLECTION_LOG);
                        }
                        if (msg.Guid == Guid.Empty)
                        {
                            msg.Guid = Guid.NewGuid();
                        }
                        return(BsonConvert.ToBson(msg));
                    });

                    try
                    {
                        var result = cLog.Insert(bsons.ToArray());
                        if (result.WriteErrors != null)
                        {
                            result.WriteErrors.ForEach(we => new MongoDbConnectorServerException(we.Message));
                        }
                    }
                    catch (Exception genError)
                    {
                        errors.Add(genError);
                    }

                    if (!Running)
                    {
                        break;
                    }
                    if (++i > MAX_INSERT_DOC_COUNT)
                    {
                        WriteLog(MessageType.Critical, nameof(WriteAsync), "LogBatch exceeds max allowed count of {0}. The rest discarded".Args(MAX_INSERT_DOC_COUNT));
                        break;
                    }
                }

            return(Task.CompletedTask);
        }