public async Task<List<IInfluxSeries>> QueryMultiSeriesAsync (string dbName, string measurementQuery, TimePrecision precision = TimePrecision.Nanoseconds)
{
var response = await GetAsync (new Dictionary<string, string> () { { "db", dbName }, { "q", measurementQuery }, { "epoch", precisionLiterals[(int) precision] } });
if (response.StatusCode == HttpStatusCode.OK)
{
var results = new List<IInfluxSeries> ();
var rawResult = JsonConvert.DeserializeObject<InfluxResponse> (await response.Content.ReadAsStringAsync ());
if (rawResult?.Results?.Count > 1)
throw new ArgumentException ("The query is resulting in a format, which is not supported by this method yet");
if (rawResult?.Results[0]?.Series != null)
{
foreach (var series in rawResult?.Results[0]?.Series)
{
var result = new InfluxSeries ();
result.HasEntries = false;
results.Add (result);
result.SeriesName = series.Name;
result.Tags = series.Tags;
var entries = new List<dynamic> ();
for (var row = 0; row < series?.Values?.Count; row++)
{
result.HasEntries = true;
dynamic entry = new ExpandoObject ();
entries.Add (entry);
for (var col = 0; col < series.Columns.Count; col++)
{
var header = char.ToUpper (series.Columns[col][0]) + series.Columns[col].Substring (1);
if (header == "Time")
((IDictionary<string, object>) entry).Add (header, EpochHelper.FromEpoch (series.Values[row][col], precision));
else
((IDictionary<string, object>) entry).Add (header, series.Values[row][col]);
}
}
result.Entries = entries;
}
}
return results;
}
return null;
}