public List <CounterSeriesData> GetCounterData(DateTime beginDate, DateTime endDate, int counterCategoryId, int counterNameId, int counterSourceId, int counterInstanceId, int counterExtDataId, List <string> seriesFilter) { List <CounterSeriesData> resultData = new List <CounterSeriesData>(); if (seriesFilter.Count == 0) { return(resultData); } bool getAllSeries = seriesFilter.Contains("*"); List <string> seriesNames = new List <string>(); MongoCollection <BsonDocument> items = Database.GetCollection("countersData"); string mappedCategoryName = CountersMapper.GetMappedCategoryName(counterCategoryId); string mappedCounterName = CountersMapper.GetMappedCounterName(counterCategoryId, counterNameId); string mappedCounterInstance = CountersMapper.GetMappedCounterInstanceName(counterCategoryId, counterNameId, counterInstanceId); string mappedCounterSource = CountersMapper.GetMappedCounterSourceName(counterCategoryId, counterNameId, counterSourceId); string mappedCounterExtData = CountersMapper.GetMappedCounterExtDataName(counterCategoryId, counterNameId, counterExtDataId); QueryComplete qb = beginDate == endDate ? Query.EQ("date", beginDate) : Query.GT("date", beginDate).LTE(endDate); QueryComplete qb2 = Query.EQ("counterCategory", mappedCategoryName); QueryComplete qb3 = Query.EQ("counterName", mappedCounterName); SortByBuilder sortOrder = new SortByBuilder().Ascending("date"); var cursor = items.Find(Query.And(qb, qb2, qb3)); cursor.SetSortOrder(sortOrder); string counterDescription = counterSourceId + "/" + counterInstanceId + "/" + counterExtDataId; cursor.SetFields(Fields.Include("type", "date", "data." + counterDescription)); foreach (BsonDocument cnt in cursor) { var dateTime = cnt["date"].AsDateTime; var countersData = cnt["data"].AsBsonDocument; if (!countersData.Contains(counterDescription)) { foreach (string seriesName in seriesNames) { if (getAllSeries || seriesFilter.Contains(seriesName)) { resultData.Find(f => f.SeriesName == seriesName).AddSeriesPoint(new SeriesPoint(dateTime, null)); } } continue; } var seriesPoints = countersData[counterDescription].AsBsonDocument; foreach (BsonElement seriesPoint in seriesPoints) { string seriesName = seriesPoint.Name; if (!seriesNames.Contains(seriesName)) { seriesNames.Add(seriesName); } if (!getAllSeries && !seriesFilter.Contains(seriesName)) { continue; } var value = seriesPoint.Value.IsString ? new UniversalValue( TimeSpan.Parse(seriesPoint.Value.AsString)) : new UniversalValue( seriesPoint.Value.ToDouble()); var a = resultData.Find(f => f.SeriesName == seriesName); if (a == null) { a = new CounterSeriesData(seriesName, value.Type, mappedCategoryName, mappedCounterName, mappedCounterSource, mappedCounterInstance, mappedCounterExtData); resultData.Add(a); } a.AddSeriesPoint(new SeriesPoint(dateTime, value)); } } return(resultData); }
public List<CounterSeriesData> GetCounterData(DateTime beginDate, DateTime endDate, int counterCategoryId, int counterNameId, int counterSourceId, int counterInstanceId, int counterExtDataId, List<string> seriesFilter) { List<CounterSeriesData> resultData = new List<CounterSeriesData>(); if (seriesFilter.Count == 0) return resultData; bool getAllSeries = seriesFilter.Contains("*"); List<string> seriesNames = new List<string>(); MongoCollection<BsonDocument> items = Database.GetCollection("countersData"); string mappedCategoryName = CountersMapper.GetMappedCategoryName(counterCategoryId); string mappedCounterName = CountersMapper.GetMappedCounterName(counterCategoryId, counterNameId); string mappedCounterInstance = CountersMapper.GetMappedCounterInstanceName(counterCategoryId, counterNameId, counterInstanceId); string mappedCounterSource = CountersMapper.GetMappedCounterSourceName(counterCategoryId, counterNameId, counterSourceId); string mappedCounterExtData = CountersMapper.GetMappedCounterExtDataName(counterCategoryId, counterNameId, counterExtDataId); QueryComplete qb = beginDate == endDate ? Query.EQ("date", beginDate) : Query.GT("date", beginDate).LTE(endDate); QueryComplete qb2 = Query.EQ("counterCategory", mappedCategoryName); QueryComplete qb3 = Query.EQ("counterName", mappedCounterName); SortByBuilder sortOrder = new SortByBuilder().Ascending("date"); var cursor = items.Find(Query.And(qb, qb2, qb3)); cursor.SetSortOrder(sortOrder); string counterDescription = counterSourceId + "/" + counterInstanceId + "/" + counterExtDataId; cursor.SetFields(Fields.Include("type", "date", "data." + counterDescription)); foreach (BsonDocument cnt in cursor) { var dateTime = cnt["date"].AsDateTime; var countersData = cnt["data"].AsBsonDocument; if (!countersData.Contains(counterDescription)) { foreach (string seriesName in seriesNames) if (getAllSeries || seriesFilter.Contains(seriesName)) resultData.Find(f => f.SeriesName == seriesName).AddSeriesPoint(new SeriesPoint(dateTime, null)); continue; } var seriesPoints = countersData[counterDescription].AsBsonDocument; foreach (BsonElement seriesPoint in seriesPoints) { string seriesName = seriesPoint.Name; if (!seriesNames.Contains(seriesName)) seriesNames.Add(seriesName); if (!getAllSeries && !seriesFilter.Contains(seriesName)) continue; var value = seriesPoint.Value.IsString ? new UniversalValue( TimeSpan.Parse(seriesPoint.Value.AsString)) : new UniversalValue( seriesPoint.Value.ToDouble()); var a = resultData.Find(f => f.SeriesName == seriesName); if (a == null) { a = new CounterSeriesData(seriesName, value.Type, mappedCategoryName, mappedCounterName, mappedCounterSource, mappedCounterInstance, mappedCounterExtData); resultData.Add(a); } a.AddSeriesPoint(new SeriesPoint(dateTime, value)); } } return resultData; }