Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }