private void CreateGraphicalReport()
        {
            PerformanceTesterLibrary.PerformanceChecker pch = PerformanceTesterLibrary.PerformanceChecker.GetInstance(Settings.ReportFolder,
                                                                                                                      Settings.ConnectionString, Settings.ReportHeader);
            List <MetricInfo> mtrList = pch.RetrieveMetricsFromFile(new DateTime(DateTime.Today.Year, 1, 1), DateTime.Now);

            PlotterLibrary.Plotter p = new PlotterLibrary.Plotter(Settings.ReportFolder); //, Settings.ConnectionString, Settings.ReportHeader);

            DataTable dtMetricsProcessor = new DataTable();

            dtMetricsProcessor.Columns.Add("DateTime", typeof(DateTime));
            dtMetricsProcessor.Columns.Add("Value", typeof(double));
            dtMetricsProcessor.Columns.Add("Date", typeof(DateTime));
            dtMetricsProcessor.Columns.Add("DateHour", typeof(DateTime));

            DataTable dtMetricsSql = new DataTable();

            dtMetricsSql.Columns.Add("DateTime", typeof(DateTime));
            dtMetricsSql.Columns.Add("Value", typeof(double));
            dtMetricsSql.Columns.Add("Date", typeof(DateTime));
            dtMetricsSql.Columns.Add("DateHour", typeof(DateTime));

            List <MetricInfo> mtrProcList = mtrList.Where(c => c.MetricType.StartsWith("Processor")).ToList();

            foreach (MetricInfo item in mtrProcList)
            {
                DataRow rw = dtMetricsProcessor.NewRow();
                rw[0] = item.MetricTime;
                rw[1] = item.MetricValue;
                rw[2] = item.MetricTime.Date;
                rw[3] = item.MetricTime.Date.AddHours(item.MetricTime.Hour);
                dtMetricsProcessor.Rows.Add(rw);
            }

            List <MetricInfo> mtrSqlList = mtrList.Where(c => c.MetricType.StartsWith("SQLServer")).ToList();

            foreach (MetricInfo item in mtrSqlList)
            {
                DataRow rw = dtMetricsSql.NewRow();
                rw[0] = item.MetricTime;
                rw[1] = item.MetricValue;
                rw[2] = item.MetricTime.Date;
                rw[3] = item.MetricTime.Date.AddHours(item.MetricTime.Hour);
                dtMetricsSql.Rows.Add(rw);
            }
            mtrList = null;

            p.BuildProcessorLoadsCharts(dtMetricsProcessor);

            p.BuildSqlMemoryLoadsCharts(dtMetricsSql);

            pch.SaveReportAsPDF(mtrList,
                                string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("Proc_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("ProcHourly_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("ProcDaily_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("SqlHourly_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("SqlDaily_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"));
        }
        static void Main(string[] args)
        {
            PerformanceTesterLibrary.PerformanceChecker perfChecker = PerformanceTesterLibrary.PerformanceChecker.GetInstance(Settings.ReportFolder,
                                                                                                                              Settings.ConnectionString, Settings.ReportHeader);
            List <MetricInfo> mtrList = perfChecker.RetrieveMetricsFromFile(new DateTime(DateTime.Today.Year, 1, 1), DateTime.Now);


            PlotterLibrary.Plotter p = new PlotterLibrary.Plotter(Settings.ReportFolder); //, Settings.ConnectionString, Settings.ReportHeader);

            DataTable dtMetricsProcessor = new DataTable();

            dtMetricsProcessor.Columns.Add("DateTime", typeof(DateTime));
            dtMetricsProcessor.Columns.Add("Value", typeof(double));
            dtMetricsProcessor.Columns.Add("Date", typeof(DateTime));
            dtMetricsProcessor.Columns.Add("DateHour", typeof(DateTime));

            DataTable dtMetricsSql = new DataTable();

            dtMetricsSql.Columns.Add("DateTime", typeof(DateTime));
            dtMetricsSql.Columns.Add("Value", typeof(double));
            dtMetricsSql.Columns.Add("Date", typeof(DateTime));
            dtMetricsSql.Columns.Add("DateHour", typeof(DateTime));

            List <MetricInfo> mtrProcList = mtrList.Where(c => c.MetricType.StartsWith("Processor")).ToList();

            foreach (MetricInfo item in mtrProcList)
            {
                DataRow rw = dtMetricsProcessor.NewRow();
                rw[0] = item.MetricTime;
                rw[1] = item.MetricValue;
                rw[2] = item.MetricTime.Date;
                rw[3] = item.MetricTime.Date.AddHours(item.MetricTime.Hour);
                dtMetricsProcessor.Rows.Add(rw);
            }

            List <MetricInfo> mtrSqlList = mtrList.Where(c => c.MetricType.StartsWith("SQLServer")).ToList();

            foreach (MetricInfo item in mtrSqlList)
            {
                DataRow rw = dtMetricsSql.NewRow();
                rw[0] = item.MetricTime;
                rw[1] = item.MetricValue;
                rw[2] = item.MetricTime.Date;
                rw[3] = item.MetricTime.Date.AddHours(item.MetricTime.Hour);
                dtMetricsSql.Rows.Add(rw);
            }
            mtrList = null;

            p.BuildProcessorLoadsCharts(dtMetricsProcessor);

            p.BuildSqlMemoryLoadsCharts(dtMetricsSql);

            perfChecker.SaveReportAsPDF(mtrList,
                                        string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("Proc_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                        string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("ProcHourly_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                        string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("ProcDaily_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                        string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("SqlHourly_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"),
                                        string.Format("{0}\\{1}_{2}", Settings.ReportFolder, string.Format("SqlDaily_{0}", DateTime.Now.Date.ToString("yyyyMMdd")), ".png"));

            /*
             * var query = from row in dtMetricsProcessor.AsEnumerable()
             *          group row by row.Field<DateTime>("Date") into grp
             *         select new { DateValue = grp.Key, Avg = grp.Average(x => x.Field<double>("Value")) };
             *
             * DataTable dtMetricsProcessorDaily = new DataTable();
             * dtMetricsProcessorDaily.Columns.Add("DateTime", typeof(DateTime));
             * dtMetricsProcessorDaily.Columns.Add("Value", typeof(double));
             *
             * foreach (var row in query)
             * {
             *  DataRow rw = dtMetricsProcessorDaily.NewRow();
             *  rw[0] = row.DateValue;
             *  rw[1] = row.Avg;
             *  dtMetricsProcessorDaily.Rows.Add(rw);
             *
             * }
             *
             * try
             * {
             *  //prepare chart control...
             *  Chart chart = new Chart();
             *  chart.DataSource = dtMetricsProcessorDaily;//dataSet.Tables[0];
             *  chart.Width = 1000;
             *  chart.Height = 350;
             *  //create serie...
             *  Series serie1 = new Series();
             *  serie1.Name = "Serie1";
             *  serie1.Color = Color.FromArgb(112, 255, 200);
             *  serie1.BorderColor = Color.FromArgb(164, 164, 164);
             *  serie1.ChartType = SeriesChartType.Line;//Column
             *  serie1.BorderDashStyle = ChartDashStyle.Solid;
             *  serie1.BorderWidth = 1;
             *  serie1.ShadowColor = Color.FromArgb(128, 128, 128);
             *  serie1.ShadowOffset = 1;
             *  serie1.IsValueShownAsLabel = false;//true;
             *  serie1.XValueMember = "DateTime";
             *  serie1.YValueMembers = "Value";
             *  serie1.Font = new Font("Tahoma", 8.0f);
             *  serie1.BackSecondaryColor = Color.FromArgb(0, 102, 153);
             *  serie1.LabelForeColor = Color.FromArgb(100, 100, 100);
             *  chart.Series.Add(serie1);
             *  //create chartareas...
             *  ChartArea ca = new ChartArea();
             *  ca.Name = "ChartArea1";
             *  ca.BackColor = Color.White;
             *  ca.BorderColor = Color.FromArgb(26, 59, 105);
             *  ca.BorderWidth = 0;
             *  ca.BorderDashStyle = ChartDashStyle.NotSet;//Solid;
             *  ca.AxisX = new Axis();
             *  ca.AxisY = new Axis();
             *  chart.ChartAreas.Add(ca);
             *  chart.Titles.Add("Average Daily Values");
             *  //databind...
             *  chart.DataBind();
             *  //save result...
             *  chart.SaveImage(string.Format("{0}\\{1}_{2}", Settings.ReportFolder, "ProcessorDaily", "myChart.png"), ChartImageFormat.Png);
             * }
             * catch { }
             *
             * var query1 = from row in dtMetricsProcessor.AsEnumerable()
             *          group row by row.Field<DateTime>("DateHour") into grp
             *          select new { DateValue = grp.Key, Avg = grp.Average(x => x.Field<double>("Value")) };
             *
             * DataTable dtMetricsProcessorHourly = new DataTable();
             * dtMetricsProcessorHourly.Columns.Add("DateTime", typeof(DateTime));
             * dtMetricsProcessorHourly.Columns.Add("Value", typeof(double));
             *
             * foreach (var row in query1)
             * {
             *  DataRow rw = dtMetricsProcessorHourly.NewRow();
             *  rw[0] = row.DateValue;
             *  rw[1] = row.Avg;
             *  dtMetricsProcessorHourly.Rows.Add(rw);
             * }
             *
             * try
             * {
             *  //prepare chart control...
             *  Chart chart = new Chart();
             *  chart.DataSource = dtMetricsProcessorHourly;//dataSet.Tables[0];
             *  chart.Width = 1000;
             *  chart.Height = 350;
             *  //create serie...
             *  Series serie1 = new Series();
             *  serie1.Name = "Serie1";
             *  serie1.Color = Color.FromArgb(0, 0, 139);
             *  serie1.BorderColor = Color.FromArgb(164, 164, 164);
             *  serie1.ChartType = SeriesChartType.Line;//Column
             *  serie1.BorderDashStyle = ChartDashStyle.Solid;
             *  serie1.BorderWidth = 2;
             *  serie1.ShadowColor = Color.FromArgb(128, 128, 128);
             *  serie1.ShadowOffset = 1;
             *  serie1.IsValueShownAsLabel = false;//true;
             *  serie1.XValueMember = "DateTime";
             *  serie1.YValueMembers = "Value";
             *  serie1.Font = new Font("Tahoma", 8.0f);
             *  serie1.BackSecondaryColor = Color.FromArgb(0, 102, 153);
             *  serie1.LabelForeColor = Color.FromArgb(100, 100, 100);
             *  chart.Series.Add(serie1);
             *  //create chartareas...
             *  ChartArea ca = new ChartArea();
             *  ca.Name = "ChartArea1";
             *  ca.BackColor = Color.White;
             *  ca.BorderColor = Color.FromArgb(26, 59, 105);
             *  ca.BorderWidth = 0;
             *  ca.BorderDashStyle = ChartDashStyle.Dot;//Solid;
             *  ca.AxisX = new Axis();
             *  ca.AxisY = new Axis();
             *  chart.ChartAreas.Add(ca);
             *  //databind...
             *  chart.DataBind();
             *  //save result...
             *  chart.SaveImage(string.Format("{0}\\{1}_{2}", Settings.ReportFolder, "ProcessorHourly", "myChart.png"), ChartImageFormat.Png);
             * }
             * catch { }*/

            Console.ReadLine();

            /*
             * foreach (var item in Enum.GetValues(typeof(SeriesChartType)))
             * {
             *
             *  try
             *  {
             *      //prepare chart control...
             *      Chart chart = new Chart();
             *      chart.DataSource = dtMetricsProcessor;//dataSet.Tables[0];
             *      chart.Width = 1000;
             *      chart.Height = 350;
             *      //create serie...
             *      Series serie1 = new Series();
             *      serie1.Name = "Serie1";
             *      serie1.Color = Color.FromArgb(112, 255, 200);
             *      serie1.BorderColor = Color.FromArgb(164, 164, 164);
             *      serie1.ChartType = (SeriesChartType)item; //SeriesChartType.Spline;//Column
             *      serie1.BorderDashStyle = ChartDashStyle.Solid;
             *      serie1.BorderWidth = 1;
             *      serie1.ShadowColor = Color.FromArgb(128, 128, 128);
             *      serie1.ShadowOffset = 1;
             *      serie1.IsValueShownAsLabel = false;//true;
             *      serie1.XValueMember = "DateTime";
             *      serie1.YValueMembers = "Value";
             *      serie1.Font = new Font("Tahoma", 8.0f);
             *      serie1.BackSecondaryColor = Color.FromArgb(0, 102, 153);
             *      serie1.LabelForeColor = Color.FromArgb(100, 100, 100);
             *      chart.Series.Add(serie1);
             *      //create chartareas...
             *      ChartArea ca = new ChartArea();
             *      ca.Name = "ChartArea1";
             *      ca.BackColor = Color.White;
             *      ca.BorderColor = Color.FromArgb(26, 59, 105);
             *      ca.BorderWidth = 0;
             *      ca.BorderDashStyle = ChartDashStyle.Solid;
             *      ca.AxisX = new Axis();
             *      ca.AxisY = new Axis();
             *      chart.ChartAreas.Add(ca);
             *      //databind...
             *      chart.DataBind();
             *      //save result...
             *      chart.SaveImage(string.Format("{0}\\{1}_{2}", Settings.ReportFolder, item.ToString(), "myChart.png"), ChartImageFormat.Png);
             *  }
             *  catch { }
             * }
             */
        }