コード例 #1
0
        public async Task <MultiTaggedReadResult <TEntry, TMeasureType> > ReadGroupsAsync(string measureTypeName, IEnumerable <AggregatedField> fields, IEnumerable <KeyValuePair <string, string> > requiredTags, IEnumerable <string> groupByTags, Sort sort = Sort.Descending)
        {
            using (await _cc.ReadAsync().ConfigureAwait(false))
            {
                await CreateDatabase().ConfigureAwait(false);

                requiredTags = requiredTags.ToList();
                groupByTags  = groupByTags.ToList();
                var measureType = await _typeStorage.GetMeasureTypeAsync(measureTypeName).ConfigureAwait(false);

                var fieldQueryInfos = GetFieldQueryInfos(measureType, fields.ToArray());

                var resultSet = await _client.ReadAsync <DynamicInfluxRow>(_database, CreateGroupedSelectQuery( measureType, fieldQueryInfos, requiredTags, groupByTags, sort )).ConfigureAwait(false);

                return(Convert(measureType, fieldQueryInfos, resultSet, sort));
            }
        }
コード例 #2
0
        private async Task <MultiTaggedReadResult <TEntry, TMeasureType> > MergeTaggedResultsAsync(
            string measureTypeName,
            AggregatedField[] fields,
            Sort sort,
            List <MultiTaggedReadResult <TEntry, TMeasureType> > results)
        {
            if (results.Count == 1)
            {
                return(results[0]);
            }
            else
            {
                // figure out which to merge together
                var finalResultDictionary = new Dictionary <TagCollection, TaggedReadResult <TEntry, TMeasureType> >();

                // foreach tag combination!
                var          groupings   = new Dictionary <TagCollection, List <TaggedReadResult <TEntry, TMeasureType> > >();
                TMeasureType measureType = default(TMeasureType);
                bool         anyResults  = false;

                foreach (var multiTaggedReadResult in results)
                {
                    measureType = multiTaggedReadResult.MeasureType;

                    foreach (var taggedReadResult in multiTaggedReadResult)
                    {
                        anyResults = true;

                        List <TaggedReadResult <TEntry, TMeasureType> > existingList;
                        if (!groupings.TryGetValue(taggedReadResult.GroupedTags, out existingList))
                        {
                            existingList = new List <TaggedReadResult <TEntry, TMeasureType> >();
                            groupings.Add(taggedReadResult.GroupedTags, existingList);
                        }
                        existingList.Add(taggedReadResult);
                    }
                }

                if (anyResults)
                {
                    // need fields and aggregate method
                    var calculators = CreateFieldCalculators(fields, measureType.GetFields().ToDictionary(x => x.Key));
                    return(Merge(measureType, calculators, sort, groupings));
                }
                else
                {
                    measureType = await _typedKeyStorage.GetMeasureTypeAsync(measureTypeName);

                    return(new MultiTaggedReadResult <TEntry, TMeasureType>(measureType));
                }
            }
        }