示例#1
0
        public static Task<List<DashboardFeatureByCount>> GetLeastUsedFeaturesAsync(DashboarLoadParams loadParams)
        {
            if (loadParams == null) throw new ArgumentNullException(nameof(loadParams));

            // TODO : Add ability to exclude features - View Params for example
            return GetUsedFeaturesAsync(loadParams, @"SELECT FEATURE_ID, COUNT(*) CNT FROM FEATURE_ENTRIES GROUP BY FEATURE_ID ORDER BY CNT ASC LIMIT @MAXFEATURES", new[]
            {
                new QueryParameter(@"@MAXFEATURES", loadParams.Settings.MaxLeastUsedFeatures),
            });
        }
示例#2
0
        public static Task<List<DashboardException>> GetExceptionsAsync(DashboarLoadParams loadParams)
        {
            if (loadParams == null) throw new ArgumentNullException(nameof(loadParams));

            var feature = loadParams.FeatureContext.Feature;
            {
                var dbContext = loadParams.FeatureContext.DbContext;
                var settings = loadParams.Settings;
                var relativeTimePeriod = settings.ExceptionsRelativeTimePeriod;
                var samples = settings.ExceptionsChartEntries;

                var rangeTimePeriod = relativeTimePeriod.ToRange(DateTime.Now);
                var unit = ((long)relativeTimePeriod.TimeOffset.TotalMilliseconds) / samples;
                var baseDate = rangeTimePeriod.FromDate;

                var map = new int[samples];

                var statement = @"SELECT CREATED_AT FROM FEATURE_EXCEPTION_ENTRIES WHERE @FROMDATE <= CREATED_AT AND CREATED_AT <= @TODATE";

                var sqlParams = new[]
                {
                    new QueryParameter(@"@FROMDATE", rangeTimePeriod.FromDate),
                    new QueryParameter(@"@TODATE", rangeTimePeriod.ToDate),
                };

                var query = new Query(statement, sqlParams);
                dbContext.Fill(new Dictionary<long, int>(0), (r, m) =>
                {
                    var delta = ((long)(r.GetDateTime(0) - baseDate).TotalMilliseconds) / unit;
                    map[delta]++;
                }, query);

                var result = new List<DashboardException>(samples);

                for (var i = 0; i < map.Length; i++)
                {
                    result.Add(new DashboardException(baseDate.AddMilliseconds(unit * i), map[i]));
                }

                return Task.FromResult(result);
            }
        }
示例#3
0
        public static Task<List<DashboardFeatureByCount>> GetMostUsedFeaturesAsync(DashboarLoadParams loadParams)
        {
            if (loadParams == null) throw new ArgumentNullException(nameof(loadParams));

            var tmp = new List<DashboardFeatureByCount>();

            var ctxs = loadParams.Data.Contexts;
            var fs = loadParams.Data.Features;

            var f = fs[1];
            var c = ctxs[f.ContextId];

            tmp.Add(new DashboardFeatureByCount(c, f, 7));
            tmp.Add(new DashboardFeatureByCount(c, f, 11));
            tmp.Add(new DashboardFeatureByCount(c, f, 13));
            tmp.Add(new DashboardFeatureByCount(c, f, 15));
            tmp.Add(new DashboardFeatureByCount(c, f, 17));
            tmp.Add(new DashboardFeatureByCount(c, f, 23));

            return Task.FromResult(tmp);

            // TODO : Add ability to exclude features - Sync Data for example
            return GetUsedFeaturesAsync(loadParams, @"SELECT FEATURE_ID, COUNT(*) CNT FROM FEATURE_ENTRIES GROUP BY FEATURE_ID ORDER BY CNT DESC LIMIT @MAXFEATURES", new[]
            {
                new QueryParameter(@"@MAXFEATURES", loadParams.Settings.MaxMostUsedFeatures),
            });
        }
示例#4
0
        private static Task<List<DashboardFeatureByCount>> GetUsedFeaturesAsync(DashboarLoadParams loadParams, string query, QueryParameter[] sqlParams)
        {
            var dbContext = loadParams.FeatureContext.DbContext;
            var features = loadParams.Data.Features;
            var contexts = loadParams.Data.Contexts;

            var mostUsedFeatures = dbContext.Execute(new Query<DashboardFeatureByCount>(query, r =>
            {
                var featureId = r.GetInt64(0);
                var feature = features[featureId];
                var context = contexts[feature.ContextId];
                return new DashboardFeatureByCount(context, feature, r.GetInt32(1));
            }, sqlParams));

            return Task.FromResult(mostUsedFeatures);
        }
示例#5
0
        public static Task<List<DashboardVersion>> GetVersionsAsync(DashboarLoadParams loadParams)
        {
            if (loadParams == null) throw new ArgumentNullException(nameof(loadParams));

            var context = loadParams.FeatureContext;
            var feature = context.Feature;
            {
                var maxVersions = loadParams.Settings.MaxVersions;

                var statement = @"SELECT ID, NAME FROM FEATURE_VERSIONS ORDER BY ID DESC LIMIT @MAXVERSIONS";

                var sqlParams = new[]
                {
                    new QueryParameter(@"@MAXVERSIONS", maxVersions),
                };

                var query = new Query<DbFeatureVersionRow>(statement, r => new DbFeatureVersionRow(r.GetInt32(0), r.GetString(1)), sqlParams);

                var dbContext = context.DbContext;
                var versions = dbContext.Execute(query);
                var exceptionsByVersion = CountExceptionsByVersion(dbContext);
                var usersByVersion = CountUsersByVersion(dbContext);

                var dashboardVersions = new List<DashboardVersion>(versions.Count);
                foreach (var version in versions)
                {
                    var versionId = version.Id;

                    int usersCount;
                    usersByVersion.TryGetValue(versionId, out usersCount);

                    int exceptionsCount;
                    exceptionsByVersion.TryGetValue(versionId, out exceptionsCount);

                    dashboardVersions.Add(new DashboardVersion(version, usersCount, exceptionsCount));
                }

                dashboardVersions.Sort((x, y) =>
                {
                    var cmp = string.Compare(x.Version.Name, y.Version.Name, StringComparison.OrdinalIgnoreCase);
                    return cmp;
                });

                return Task.FromResult(dashboardVersions);
            }
        }
示例#6
0
        public static Task<List<DashboardUser>> GetUsersAsync(DashboarLoadParams loadParams)
        {
            if (loadParams == null) throw new ArgumentNullException(nameof(loadParams));

            var context = loadParams.FeatureContext;
            {
                var statement = @"SELECT U.ID, U.NAME UNAME, U.REPLICATED_AT, V.NAME VNAME FROM FEATURE_USERS U INNER JOIN FEATURE_VERSIONS V ON U.VERSION_ID = V.ID ORDER BY REPLICATED_AT DESC LIMIT @MAXUSERS";

                var sqlParams = new[]
                {
                    new QueryParameter(@"@MAXUSERS", loadParams.Settings.MaxUsers),
                };

                var query = new Query<DashboardUser>(statement, r => new DashboardUser(r.GetInt64(0), r.GetString(1), r.GetDateTime(2), r.GetString(3)), sqlParams);
                var users = context.DbContext.Execute(query);

                return Task.FromResult(users);
            }
        }
示例#7
0
        public static Task<List<DashboardFeatureByTime>> GetSlowestFeaturesAsync(DashboarLoadParams loadParams)
        {
            if (loadParams == null) throw new ArgumentNullException(nameof(loadParams));

            return Task.FromResult(new List<DashboardFeatureByTime>(0));
        }