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"));
        }
        void runCheckTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            ////if sender is null - probably this is a continuous monitor setting
            if (!Settings.MonitorContinuously)//sender != null)
            {
                ////run next time after this interval:
                DateTime curDate = DateTime.Now;
                //curDate = new DateTime(curDate.Year, curDate.Month, curDate.Day, curDate.Hour, curDate.Minute, curDate.Second);
                DateTime runTime = DateTime.Now.Date.Add(statusCheckTimes[0]);
                foreach (TimeSpan item in statusCheckTimes)
                {
                    DateTime runTime1 = DateTime.Now.Date.Add(item);
                    if (curDate.AddSeconds(10).CompareTo(runTime1) < 0)//// RunTime is later than current time - will execute today (10 seconds for timer that starts little earlier)
                    {
                        runTime = runTime1;
                        break;
                    }
                }

                //string[] time = ServiceConfig.AppSettings.Settings["RunTime"].Value.Split(new char[] { ':' });
                //TimeSpan ts = curDate.Date.AddDays(1).AddHours(Int32.Parse(time[0])).AddMinutes(Int32.Parse(time[1])).Subtract(curDate);
                Timer tmr = (Timer)sender;

                TimeSpan ts;
                if (runTime.Subtract(curDate).TotalSeconds > 10) //curDate.CompareTo(runTime) < 0)//// RunTime is later than current time
                {
                    ///// timer may start a bit earlier, therefore this check of 10 seconds
                    ts           = runTime.Subtract(curDate);
                    tmr.Interval = ts.TotalMilliseconds;
                }
                else
                {
                    ts           = runTime.AddDays(1).Subtract(curDate);
                    tmr.Interval = ts.TotalMilliseconds;
                }
                //SyncCheckLogger.Instance().log("Next time scheduled to execute in " + ts.ToString());
                //// end of run next time after this interval.

                PerformanceTesterLibrary.PerformanceChecker pch = PerformanceTesterLibrary.PerformanceChecker.GetInstance(
                    Settings.ReportFolder, Settings.ConnectionString, Settings.ReportHeader);
                pch.CollectCounter(DateTime.Now.AddMinutes(Settings.CheckInterval));
                pch.SaveReportAsPDF(DateTime.Now.AddMinutes((-1) * Settings.CheckInterval), DateTime.Now); //// from past to present
            }
            else //// probably monitor continuously
            {
                PerformanceTesterLibrary.PerformanceChecker pch = PerformanceTesterLibrary.PerformanceChecker.GetInstance(
                    Settings.ReportFolder, Settings.ConnectionString, Settings.ReportHeader);
                if (Settings.MonitorContinuously)
                {
                    pch.CollectCounter();
                    //tmr.AutoReset = false; //// will be doing it constantly - no need to reset
                }
            }
        }
示例#3
0
        static void Main()
        {
            //Console.WriteLine("Recording performance metrics...");
            //var processorCategory = PerformanceCounterCategory.GetCategories()
            //    .FirstOrDefault(cat => cat.CategoryName == "Processor");
            //var countersInCategory = processorCategory.GetCounters("_Total");

            //var sqlServerMemoryCategory = PerformanceCounterCategory.GetCategories()
            //    .FirstOrDefault(cat => cat.CategoryName == "SQLServer:Memory Manager");
            //PerformanceCounter sqlPerformanceCounter = sqlServerMemoryCategory.GetCounters().First(cnt => cnt.CounterName.StartsWith("Total Server "));

            ////var processorCategory1 = PerformanceCounterCategory.GetCategories().
            ////    //Where(cat => cat.CategoryName.ToLower().StartsWith("memory") || cat.CategoryName.ToLower().StartsWith("sql")).
            ////    Where(cat => cat.CategoryName.ToLower().StartsWith("memory") || cat.CategoryName.StartsWith("SQLServer:Memory Manager")).
            ////    SelectMany(c => c.GetCounters()).Select(cat => cat.CounterName).
            ////    ToArray<string>();
            ////foreach (var item in processorCategory1)
            ////{
            ////    Console.WriteLine(item);
            ////}
            //PerformanceCounter processorPerformanceCounter = countersInCategory.First(cnt => cnt.CounterName == "% Processor Time");
            //DisplayCounter(new PerformanceCounter[]{sqlPerformanceCounter, processorPerformanceCounter});

            Console.WriteLine("Recording performance metrics...");
            PerformanceTesterLibrary.PerformanceChecker pch = PerformanceTesterLibrary.PerformanceChecker.GetInstance(
                System.IO.Directory.GetCurrentDirectory(), Settings.ConnectionString, "SQL Farm N");
            pch.CollectCounter(DateTime.Now.AddSeconds(10));
            Console.WriteLine("Reading from file...");
            //pch.SaveReportAsPDF();

            //// test if it creates reports
            List <TimeSpan> statusCheckTimes      = new List <TimeSpan>();
            var             statusCheckTimesSplit = Settings.RunTime.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();

            if (statusCheckTimesSplit.Any())
            {
                statusCheckTimesSplit.Sort();

                foreach (string item in statusCheckTimesSplit)
                {
                    string[] parts   = item.Split(new char[] { ':' });
                    TimeSpan tsParts = new TimeSpan(Int32.Parse(parts[0]), Int32.Parse(parts[1]), 0);
                    statusCheckTimes.Add(tsParts);
                }
            }
            for (int i = 0; i < 5; i++)  //// get the report for 5 days. Later we will do the comparison for all seven days
            {
                pch.SaveReportAsPDF(DateTime.Now.Date.AddDays((-1) * i).Add(statusCheckTimes[0]),
                                    DateTime.Now.Date.AddDays((-1) * i).Add(statusCheckTimes[0]).AddMinutes(Settings.CheckInterval));
            }
        }
示例#4
0
        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 { }
             * }
             */
        }