private static DateRange GetAvailableDateRangeHelper(IMessage first, IMessage last) { if (first == null || last == null) { return(DateRange.MakeEmpty()); } try { return(DateRange.MakeFromBoundaryValues(first.Time.ToLocalDateTime(), last.Time.ToLocalDateTime())); } catch (DateRangeArgumentException e) { throw new BadBoundaryDatesException("Bad boundary dates", e); } }
void UpdateLoadedTimeStats(IPositionedMessagesReader reader) { MessagesContainers.RangesManagingCollection tmp = buffer; tracer.Info("Current messages: {0}", tmp); long bytesCount = 0; foreach (MessagesContainers.MessagesRange lr in tmp.Ranges) { bytesCount += reader.PositionRangeToBytes(lr.LoadedRange); } DateRange loadedTime; int c = tmp.Count; if (c != 0) { DateTime begin = new DateTime(); DateTime end = new DateTime(); foreach (IndexedMessage l in tmp.Forward(0, 1)) { tracer.Info("First message: {0}, {1}", l.Message.Time, l.Message.Text); begin = l.Message.Time.ToLocalDateTime(); } foreach (IndexedMessage l in tmp.Reverse(c - 1, c - 2)) { tracer.Info("Last message: {0}, {1}", l.Message.Time, l.Message.Text); end = l.Message.Time.ToLocalDateTime(); } loadedTime = DateRange.MakeFromBoundaryValues(begin, end); } else { loadedTime = DateRange.MakeEmpty(); } tracer.Info("Calculated statistics: LoadedTime={0}, BytesLoaded={1}", loadedTime, bytesCount); owner.StatsTransaction(stats => { stats.LoadedTime = loadedTime; stats.LoadedBytes = bytesCount; return(LogProviderStatsFlag.CachedTime | LogProviderStatsFlag.BytesCount); }); }
void InvalidateMessages() { if (IsDisposed) { return; } messagesCacheBackbuffer.InvalidateMessages(); Interlocked.Exchange(ref cache, null); dateBoundsCache.Invalidate(); StatsTransaction(stats => { stats.LoadedBytes = 0; stats.LoadedTime = DateRange.MakeEmpty(); stats.MessagesCount = 0; stats.FirstMessageWithTimeConstraintViolation = null; return(LogProviderStatsFlag.CachedTime | LogProviderStatsFlag.BytesCount | LogProviderStatsFlag.CachedMessagesCount | LogProviderStatsFlag.FirstMessageWithTimeConstraintViolation); }); }