public async void MultiAnalysis_ValidInterval_Success() { var client = new KeenClient(settingsEnv); IEnumerable<MultiAnalysisParam> param = new List<MultiAnalysisParam>() { new MultiAnalysisParam("first", MultiAnalysisParam.Metric.Count()), new MultiAnalysisParam("second", MultiAnalysisParam.Metric.Maximum("field1")), new MultiAnalysisParam("third", MultiAnalysisParam.Metric.Minimum("field1")), }; var timeframe = QueryRelativeTimeframe.PreviousNDays(3); var interval = QueryInterval.Daily(); IEnumerable<QueryIntervalValue<IDictionary<string, string>>> result = new List<QueryIntervalValue<IDictionary<string, string>>>(); foreach( var i in Enumerable.Range(1,3)) { var dic = new Dictionary<string, string>(); dic.Add("second", "fff"); dic.Add("third", "aaa"); dic.Add("first", "123"); var qv = new QueryIntervalValue<IDictionary<string,string>>(dic, DateTime.Now, DateTime.Now.AddSeconds(2)); ((List<QueryIntervalValue<IDictionary<string, string>>>)result).Add(qv); } Mock<IQueries> queryMock = null; if (UseMocks) { queryMock = new Mock<IQueries>(); queryMock.Setup(m => m.MultiAnalysis( It.Is<string>(c => c == testCol), It.Is<IEnumerable<MultiAnalysisParam>>(p => p == param), It.Is<QueryTimeframe>(t => t == timeframe), It.Is<QueryInterval>(i => i == interval), It.Is<IEnumerable<QueryFilter>>(f => f == null), It.Is<string>(tz => tz == "") )) .Returns(Task.FromResult(result)); client.Queries = queryMock.Object; } var reply = (await client.QueryMultiAnalysisIntervalAsync(testCol, param, timeframe, interval)).ToList(); if (null != queryMock) { queryMock.VerifyAll(); Assert.AreEqual(reply.Count(), result.Count()); } }
public async Task<IEnumerable<QueryIntervalValue<IEnumerable<QueryGroupValue<IDictionary<string, string>>>>>> MultiAnalysis(string collection, IEnumerable<MultiAnalysisParam> analysisParams, QueryTimeframe timeframe = null, QueryInterval interval = null, IEnumerable<QueryFilter> filters = null, string groupby = "", string timezone = "") { var jObs = analysisParams.Select(x => new JProperty(x.Label, JObject.FromObject(new { analysis_type = x.Analysis, target_property = x.TargetProperty }))); var parmsJson = JsonConvert.SerializeObject(new JObject(jObs), Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); var parms = new Dictionary<string, string>(); parms.Add(KeenConstants.QueryParmEventCollection, collection); parms.Add(KeenConstants.QueryParmTimeframe, timeframe.ToSafeString()); parms.Add(KeenConstants.QueryParmInterval, interval.ToSafeString()); parms.Add(KeenConstants.QueryParmTimezone, timezone); parms.Add(KeenConstants.QueryParmGroupBy, groupby); parms.Add(KeenConstants.QueryParmFilters, filters == null ? "" : JArray.FromObject(filters).ToString()); parms.Add(KeenConstants.QueryParmAnalyses, parmsJson); var reply = await KeenWebApiRequest(KeenConstants.QueryMultiAnalysis, parms); var result = new List<QueryIntervalValue<IEnumerable<QueryGroupValue<IDictionary<string, string>>>>>(); foreach (JObject i in reply.Value<JArray>("result")) { var qgl = new List<QueryGroupValue<IDictionary<string, string>>>(); foreach (JObject o in i.Value<JArray>("value")) { var d = new Dictionary<string, string>(); string grpVal = ""; foreach (JProperty p in o.Values<JProperty>()) { if (p.Name == groupby) grpVal = (string)p.Value; else d.Add(p.Name, (string)p.Value); } qgl.Add( new QueryGroupValue<IDictionary<string, string>>(d, grpVal)); } var t = i.Value<JObject>("timeframe"); var qv = new QueryIntervalValue<IEnumerable<QueryGroupValue<IDictionary<string, string>>>>(qgl, t.Value<DateTime>("start"), t.Value<DateTime>("end")); result.Add(qv); } return result; }