Beispiel #1
0
        public string GenerateGanttChart(IEnumerable<RunStats> runners)
        {
            var data = runners.OrderBy(x => x.StartOrder);

            var DIVIDEND = 1000;
            var graphData = data.Select(x => new LineData
            {
                Offset = (float)x.StartTime.TotalMilliseconds / DIVIDEND,
                Length = (float)(x.EndTime - x.StartTime).TotalMilliseconds / DIVIDEND,
                Name = x.Name,
                Success = x.IsSuccess
            });
            var graphOptions = new LineDrawOptions
            {
                BarPadding = 2,
                BarHeight = 10
            };
            return DrawHorizontalLines(graphData, graphOptions);
        }
Beispiel #2
0
        string DrawHorizontalLines(IEnumerable<LineData> rawData, LineDrawOptions opts)
        {
            var data = rawData.ToList();

            var lineHeight = opts.BarHeight + opts.BarPadding;

            var h = (int)Math.Ceiling(data.Count * lineHeight);
            var w = (int)Math.Ceiling(data.Max(x => x.Offset + x.Length + 1));

            var g = new HtmlDraw();

                var i = 0;
                LineData d = null;
            while (data.Count > 0)
            {
                if (d == null)
                    d = data.First(x => x.Offset == data.Min(y => y.Offset));
                else
                {
                    LineData d1 = d;
                    var filtered = data.Where(x => x.Offset >= (d1.Offset + d1.Length)).ToArray();
                    d = filtered.FirstOrDefault(x => x.Offset == filtered.Min(y => y.Offset));
                }
                if (d == null)
                {
                    ++i;
                    continue;
                }
                g.DrawRectangle(
                    d.Success ? "#00008B" : "#8B0000",
                    d.Success ? "#0000FF" : "#FF0000",
                    1, d.Offset, i * lineHeight, d.Length, opts.BarHeight, d.Name);
                data.Remove(d);
            }

            return g.ToString();
        }