private TodoFrame toFrame(TodoQueue queue, BSONDocument doc) { try { var result = new TodoFrame(); result.ID = RowConverter.GDID_BSONtoCLR(doc[Query._ID] as BSONBinaryElement); result.Type = Guid.Parse(((BSONStringElement)doc[FLD_TODO_TYPE]).Value); result.CreateTimestampUTC = ((BSONDateTimeElement)doc[FLD_TODO_CREATETIMESTAMP]).Value; result.ShardingKey = elmStr(doc[FLD_TODO_SHARDINGKEY]); result.ParallelKey = elmStr(doc[FLD_TODO_PARALLELKEY]); result.Priority = ((BSONInt32Element)doc[FLD_TODO_PRIORITY]).Value; result.StartDate = ((BSONDateTimeElement)doc[FLD_TODO_STARTDATE]).Value; result.CorrelationKey = elmStr(doc[FLD_TODO_CORRELATIONKEY]); result.State = ((BSONInt32Element)doc[FLD_TODO_STATE]).Value; result.Tries = ((BSONInt32Element)doc[FLD_TODO_TRIES]).Value; result.Serializer = ((BSONInt32Element)doc[FLD_TODO_SERIALIZER]).Value; result.Content = elmBin(doc[FLD_TODO_CONTENT]); return(result); } catch (Exception error) { throw new MongoWorkersException(StringConsts.TODO_QUEUE_BSON_READ_ERROR.Args(queue, error.ToMessageWithType()), error); } }
protected override List <TrendingEntity> DoGetTreding(TrendingQuery query) { var result = new List <TrendingEntity>(); IEnumerable <string> collections; if (query.EntityType.IsNotNullOrWhiteSpace()) { if (!TrendingHost.HasEntity(query.EntityType)) { return(result); } collections = new[] { query.EntityType }; } else { collections = TrendingHost.AllEntities; } foreach (var collection in collections) { var sort = new BSONDocument().Set(new BSONInt32Element(DBConsts.FIELD_VALUE, -1)); var qry = new Query(); var betweenDate = new BSONDocument(); betweenDate.Set(new BSONDateTimeElement("$gte", query.StartDate)); betweenDate.Set(new BSONDateTimeElement("$lte", query.EndDate)); qry.Set(new BSONDocumentElement("dt", betweenDate)); if (query.DimensionFilter.IsNotNullOrEmpty()) { TrendingHost.MapGaugeDimensions(collection, query.DimensionFilter) .ForEach(pair => qry.Set(new BSONStringElement(pair.Key, pair.Value))); } var find = new Query(); find.Set(new BSONDocumentElement("$query", qry)); find.Set(new BSONDocumentElement("$orderby", sort)); var fetchBy = 1000; if (query.FetchCount < fetchBy) { fetchBy = query.FetchCount; } using (var cursor = m_Database[collection].Find(find, query.FetchStart, fetchBy)) { foreach (var doc in cursor) { if (result.Count >= query.FetchCount) { break; } var doc_dt = doc[DBConsts.FIELD_DATETIME].ObjectValue; var dt = doc[DBConsts.FIELD_DATETIME].ObjectValue.AsDateTime(); var dl = MapDetalizationToMinutes(DetalizationLevel); var gshr = RowConverter.GDID_BSONtoCLR((BSONBinaryElement)doc[DBConsts.FIELD_G_SHARD]); var gent = RowConverter.GDID_BSONtoCLR((BSONBinaryElement)doc[DBConsts.FIELD_G_ENTITY]); var val = doc[DBConsts.FIELD_VALUE].ObjectValue.AsULong(); result.Add(new TrendingEntity(dt, dl, query.EntityType, gshr, gent, val ) ); } } } return(result); }