public async Task <IEnumerable <QueryIntervalValue <string> > > Metric(QueryType queryType, string collection, string targetProperty, QueryTimeframe timeframe, QueryInterval interval, IEnumerable <QueryFilter> filters = null, string timezone = "") { if (queryType == null) { throw new ArgumentNullException("queryType"); } if (string.IsNullOrWhiteSpace(collection)) { throw new ArgumentNullException("collection"); } if (string.IsNullOrWhiteSpace(targetProperty) && (queryType != QueryType.Count())) { throw new ArgumentNullException("targetProperty"); } if (null == timeframe) { throw new ArgumentException("timeframe", "Timeframe must be specified for a series query."); } if (null == interval) { throw new ArgumentNullException("interval", "interval must be specified for a series query"); } var parms = new Dictionary <string, string>(); parms.Add(KeenConstants.QueryParmEventCollection, collection); parms.Add(KeenConstants.QueryParmTargetProperty, targetProperty); parms.Add(KeenConstants.QueryParmTimeframe, timeframe.ToSafeString()); parms.Add(KeenConstants.QueryParmInterval, interval.ToSafeString()); parms.Add(KeenConstants.QueryParmTimezone, timezone); parms.Add(KeenConstants.QueryParmFilters, filters == null ? "" : JArray.FromObject(filters).ToString()); var reply = await KeenWebApiRequest(queryType.ToString(), parms); IEnumerable <QueryIntervalValue <string> > result; if (queryType == QueryType.SelectUnique()) { // This is to support SelectUnique which is the only query type with a list-type result. result = from i in reply.Value <JArray>("result") let v = string.Join(",", i.Value <JArray>("value").Values <string>()) let t = i.Value <JObject>("timeframe") select new QueryIntervalValue <string>(v, t.Value <DateTime>("start"), t.Value <DateTime>("end")); } else { result = from i in reply.Value <JArray>("result") let v = i.Value <string>("value") let t = i.Value <JObject>("timeframe") select new QueryIntervalValue <string>(v, t.Value <DateTime>("start"), t.Value <DateTime>("end")); } return(result); }
public async Task <IEnumerable <QueryGroupValue <string> > > Metric(QueryType queryType, string collection, string targetProperty, string groupby, QueryTimeframe timeframe = null, IEnumerable <QueryFilter> filters = null, string timezone = "") { if (queryType == null) { throw new ArgumentNullException("queryType"); } if (string.IsNullOrWhiteSpace(collection)) { throw new ArgumentNullException("collection"); } if (string.IsNullOrWhiteSpace(targetProperty) && (queryType != QueryType.Count())) { throw new ArgumentNullException("targetProperty"); } if (string.IsNullOrWhiteSpace(groupby)) { throw new ArgumentNullException("groupby", "groupby field name must be specified for a groupby query"); } var parms = new Dictionary <string, string>(); parms.Add(KeenConstants.QueryParmEventCollection, collection); parms.Add(KeenConstants.QueryParmTargetProperty, targetProperty); parms.Add(KeenConstants.QueryParmGroupBy, groupby); parms.Add(KeenConstants.QueryParmTimeframe, timeframe.ToSafeString()); parms.Add(KeenConstants.QueryParmTimezone, timezone); parms.Add(KeenConstants.QueryParmFilters, filters == null ? "" : JArray.FromObject(filters).ToString()); var reply = await KeenWebApiRequest(queryType.ToString(), parms); IEnumerable <QueryGroupValue <string> > result; if (queryType == QueryType.SelectUnique()) { // This is to support SelectUnique which is the only query type with a list-type result. result = from r in reply.Value <JArray>("result") let c = string.Join(",", r.Value <JArray>("result").Values <string>()) let g = r.Value <string>(groupby) select new QueryGroupValue <string>(c, g); } else { result = from r in reply.Value <JArray>("result") let c = r.Value <string>("result") let g = r.Value <string>(groupby) select new QueryGroupValue <string>(c, g); } return(result); }
public async Task <string> Metric(QueryType queryType, string collection, string targetProperty, QueryTimeframe timeframe = null, IEnumerable <QueryFilter> filters = null, string timezone = "") { if (queryType == null) { throw new ArgumentNullException("queryType"); } if (string.IsNullOrWhiteSpace(collection)) { throw new ArgumentNullException("collection"); } if (string.IsNullOrWhiteSpace(targetProperty) && (queryType != QueryType.Count())) { throw new ArgumentNullException("targetProperty"); } var parms = new Dictionary <string, string>(); parms.Add(KeenConstants.QueryParmEventCollection, collection); parms.Add(KeenConstants.QueryParmTargetProperty, targetProperty); parms.Add(KeenConstants.QueryParmTimeframe, timeframe.ToSafeString()); parms.Add(KeenConstants.QueryParmTimezone, timezone); parms.Add(KeenConstants.QueryParmFilters, filters == null ? "" : JArray.FromObject(filters).ToString()); var reply = await KeenWebApiRequest(queryType.ToString(), parms).ConfigureAwait(false); string result; if (queryType == QueryType.SelectUnique()) { // This is to support SelectUnique which is the only query type with a list-type result. result = string.Join(",", (reply.Value <JArray>("result").Values <string>())); } else { result = reply.Value <string>("result"); } return(result); }