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 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); }