Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }