Ejemplo n.º 1
0
        public async Task <IActionResult> Lifetime(int start, int end, int interval, CancellationToken token)
        {
            if (start == 0 || end == 0 || interval == 0)
            {
                Response.StatusCode = 400;
                return(Json(null));
            }
            var scaling = new ChartScaling(start, end, interval);

            return(Json(await GetData(
                            Mgmtsvc,
                            @"SELECT 
                  Name as n, 
                  FLOOR(UNIX_TIMESTAMP(EndTime) - UNIX_TIMESTAMP(StartTime)) as d,
                  Count(Id) as c 
                  FROM joyoi_mgmtsvc.statemachineinstances 
                  WHERE UNIX_TIMESTAMP(StartTime) >= @start AND UNIX_TIMESTAMP(StartTime) <= @end 
                  GROUP BY d, n ",
                            scaling,
                            (rows) =>
            {
                var max_scale = 60;
                var rows_tuple =
                    rows.Select(d => {
                    Int64 duration = 0;
                    Int64.TryParse(d["d"].ToString(), out duration);
                    return (d["n"].ToString(),
                            duration,
                            Convert.ToDouble(d["c"]));
                }).ToList();
Ejemplo n.º 2
0
        public async Task <IActionResult> Created(int start, int end, int interval, int timezoneoffset, CancellationToken token)
        {
            if (start == 0 || end == 0 || interval == 0)
            {
                Response.StatusCode = 400;
                return(Json(null));
            }
            var scaling = new ChartScaling(start, end, interval);

            return(Json(await GetData(
                            Mgmtsvc,
                            @"SELECT 
                  Name as n, 
                  FLOOR(UNIX_TIMESTAMP(StartTime) / @interval) * @interval as t,  
                  Count(Id) as c
                  FROM joyoi_mgmtsvc.statemachineinstances 
                  WHERE UNIX_TIMESTAMP(StartTime) >= @start AND UNIX_TIMESTAMP(StartTime) <= @end 
                  GROUP BY n, t 
                  HAVING t >= @start AND t <= @end 
                  ORDER BY t DESC",
                            scaling,
                            GroupingLineChartRowFn(scaling, timezoneoffset, "新建的状态机"),
                            token
                            )));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Chart(int start, int end, int interval, int timezoneoffset, CancellationToken token)
        {
            if (start == 0 || end == 0 || interval == 0)
            {
                Response.StatusCode = 400;
                return(Json(null));
            }
            var scaling = new ChartScaling(start, end, interval);

            return(Json(await GetData(
                            Judge,
                            @"SELECT 
                  Result as n, 
                  FLOOR(UNIX_TIMESTAMP(Time) / @interval) * @interval as t,  
                  Count(Id) as c
                  FROM joyoi_oj.hackstatuses 
                  WHERE UNIX_TIMESTAMP(Time) >= @start AND UNIX_TIMESTAMP(Time) <= @end 
                  GROUP BY n, t 
                  HAVING t >= @start AND t <= @end 
                  ORDER BY t DESC",
                            scaling,
                            (rows) => {
                var chart_data = (GroupingLineChartRowFn(scaling, timezoneoffset, "Hack 结果"))(rows);
                chart_data.Data.Datasets = chart_data.Data.Datasets.Select(d => {
                    var val = Convert.ToInt32(d.Label);
                    d.Label = ((HackResult)val).ToString();
                    return d;
                })
                                           .ToList();
                return chart_data;
            },
                            token
                            )));
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> List(string db, int start, int end, int timezoneoffset, CancellationToken token)
        {
            if (start == 0 || end == 0 || db.Equals(""))
            {
                Response.StatusCode = 400;
                return(Json(null));
            }
            var scaling = new ChartScaling(start, end, 1);

            return(Json(await GetData(
                            db,
                            @"SELECT UserName, ActiveTime FROM aspnetusers WHERE 
                    UNIX_TIMESTAMP(ActiveTime) >= @start AND
                    UNIX_TIMESTAMP(ActiveTime) <= @end
                  ORDER BY ActiveTime DESC",
                            scaling,
                            (rows) => rows,
                            token
                            )));
        }
Ejemplo n.º 5
0
        protected async Task <Object> GetData(
            string database,
            string sql,
            ChartScaling scale,
            Func <IEnumerable <IDictionary <string, object> >, Object> proc_rows,
            CancellationToken token
            )
        {
            var query_data = new List <Dictionary <string, object> >();

            using (var conn = new MySqlConnection(Startup.Config["Datasource"]))
            {
                await conn.OpenAsync(token);

                await conn.ChangeDatabaseAsync(database, token);

                using (var cmd = new MySqlCommand(sql, conn))
                {
                    cmd.Parameters.Add(new MySqlParameter("points", scale.Points));
                    cmd.Parameters.Add(new MySqlParameter("interval", scale.Interval));
                    cmd.Parameters.Add(new MySqlParameter("start", scale.Start));
                    cmd.Parameters.Add(new MySqlParameter("end", scale.End));

                    using (var dr = await cmd.ExecuteReaderAsync(token))
                    {
                        while (await dr.ReadAsync(token))
                        {
                            var row = new Dictionary <string, object>();
                            for (var i = 0; i < dr.FieldCount; i++)
                            {
                                row.Add(dr.GetName(i), dr.GetValue(i));
                            }
                            query_data.Add(row);
                        }
                    }
                }
            }
            return(proc_rows(query_data));
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> Chart(int start, int end, int interval, int timezoneoffset, CancellationToken token)
        {
            if (start == 0 || end == 0 || interval == 0)
            {
                Response.StatusCode = 400;
                return(Json(null));
            }
            var scaling = new ChartScaling(start, end, interval);

            return(Json(await GetData(
                            Forum,
                            @"SELECT 
                  FLOOR(UNIX_TIMESTAMP(CreationTime) / @interval) * @interval as t,  
                  Count(Id) as c  
                  FROM joyoi_forum.threads 
                  GROUP BY t 
                  HAVING t >= @start AND t <= @end 
                  ORDER BY t DESC 
                  LIMIT 0, @points",
                            scaling,
                            this.DefaultLineChartRowFn(scaling, timezoneoffset, "新主题"),
                            token
                            )));
        }
Ejemplo n.º 7
0
        public async Task <IActionResult> Size(int start, int end, int interval, CancellationToken token)
        {
            if (start == 0 || end == 0 || interval == 0)
            {
                Response.StatusCode = 400;
                return(Json(null));
            }
            var scaling = new ChartScaling(start, end, interval);

            return(Json(await GetData(
                            Mgmtsvc,
                            @"SELECT 
                  FLOOR(OCTET_LENGTH(body) / 1024) * 1024 as s,
                  Count(Id) as c 
                  FROM joyoi_mgmtsvc.blobs 
                  WHERE UNIX_TIMESTAMP(CreateTime) >= @start AND UNIX_TIMESTAMP(CreateTime) <= @end 
                  GROUP BY s",
                            scaling,
                            (rows) =>
            {
                var tiers = new List <int>()
                {
                    1024, 1024 * 1024, 1024 * 1024 * 10
                };
                var buckets = Enumerable.Repeat((double)0, tiers.Count + 1).ToList();
                var rows_tuple =
                    rows.Select(d => (Convert.ToInt64(d["s"]), Convert.ToDouble(d["c"])));
                foreach ((Int64, double)t in rows_tuple)
                {
                    int bucket_idx = 0;
                    foreach (int tier in tiers)
                    {
                        if (t.Item1 < tier)
                        {
                            buckets[bucket_idx] += t.Item1;
                            goto NEXT;
                        }
                        bucket_idx++;
                    }
                    buckets[bucket_idx] += t.Item1;
                    NEXT:;
                }
                var labels = tiers.Select(x => x.ToString()).ToList();
                labels.Add(">10M");
                return new Chart
                {
                    Title = "二进制数据大小",
                    Type = "bar",
                    Data = new ChartData
                    {
                        Labels = labels,
                        Datasets = new List <ChartDataSet>()
                        {
                            new ChartDataSet {
                                Data = buckets,
                                BackgroundColor = RandomColorHex()
                            }
                        }
                    }
                };
            },
Ejemplo n.º 8
0
        public async Task <IActionResult> Ongoing(int start, int end, int interval, int timezoneoffset, CancellationToken token)
        {
            if (start == 0 || end == 0 || interval == 0)
            {
                Response.StatusCode = 400;
                return(Json(null));
            }
            var scaling = new ChartScaling(start, end, interval);

            return(Json(await GetData(
                            Judge,
                            @"SELECT 
                  UNIX_TIMESTAMP(Begin) AS s,
                  UNIX_TIMESTAMP(ADDTIME(Begin, Duration)) AS e
                  FROM joyoi_oj.contests 
                  WHERE 
                  Begin >= DATE_ADD(FROM_UNIXTIME(@start), interval - 30 day) 
                  AND
                  Begin <  FROM_UNIXTIME(@end)
                  AND
                  ADDTIME(Begin, Duration) > FROM_UNIXTIME(@start)",
                            scaling,
                            (rows) => {
                string color = "#008b00";
                string title = "正在进行的比赛";
                var rows_tuple = rows
                                 .Select(d => (Convert.ToInt64(d["s"]), Convert.ToInt64(d["e"]))).ToList();
                var labels = FillMissingAndSort(new List <(long, double)>(), scaling).Select(x => x.Item1);
                var values = labels.Select(l =>
                {
                    var r_start = l;
                    var r_end = l + scaling.Interval;
                    var count = 0;
                    foreach ((long, long)row in rows_tuple)
                    {
                        if (row.Item2 >= r_start && row.Item1 <= r_end)
                        {
                            count++;
                        }
                    }
                    return count;
                })
                             .Select(i => (double)i);
                var datasets = new List <ChartDataSet>()
                {
                    new ChartDataSet {
                        Label = title,
                        Data = values,
                        Fill = false,
                        BackgroundColor = color,
                        BorderColor = color
                    }
                };
                return new Chart {
                    Title = title,
                    Type = "line",
                    Data = new ChartData
                    {
                        Labels = labels.Select(t => ConvertTime(t, timezoneoffset)).ToList(),
                        Datasets = datasets
                    },
                    Options = new
                    {
                        Scales = TimeScaleOption()
                    }
                };
            },