Exemple #1
0
        /// <summary>
        /// Renders the specified report.
        /// </summary>
        /// <param name="report">The report.</param>
        /// <returns></returns>
        public string Render(VisitPerDateReport report)
        {
            StringBuilder builder = new StringBuilder();

            RenderHeader(builder, report);

            RenderBody(builder, report);

            RenderFooter(builder, report);

            return(builder.ToString());
        }
        /// <summary>
        /// Renders the specified report.
        /// </summary>
        /// <param name="report">The report.</param>
        /// <returns></returns>
        public string Render(VisitPerDateReport report)
        {
            StringBuilder builder = new StringBuilder();

            RenderHeader(builder, report);

            RenderBody(builder, report);

            RenderFooter(builder, report);

            return builder.ToString();
        }
Exemple #3
0
        /// <summary>
        /// Builds the visit per date report.
        /// </summary>
        /// <param name="start">The start.</param>
        /// <param name="end">The end.</param>
        /// <returns></returns>
        public VisitPerDateReport BuildVisitPerDateReport(DateTime start, DateTime end)
        {
            DataFeed feed = GetVisitPerDateDataFeed(start, end);

            if (feed.Entries.Count == 0)
            {
                throw new Exception("No entries found");
            }
            else
            {
                DataSource dataSource = feed.DataSource;

                VisitPerDateReport report = new VisitPerDateReport(
                    dataSource.TableName.TrimEnd('/'), start, end);

                foreach (DataEntry entry in feed.Entries)
                {
                    DateTime date      = DateTime.MinValue;
                    int      visits    = -1;
                    int      pageViews = -1;

                    Dimension dateDimension = entry.Dimensions.FirstOrDefault(
                        d => d.Name == Constants.Dimensions.Date);

                    if (dateDimension != null)
                    {
                        date = DateTime.ParseExact(dateDimension.Value,
                                                   "yyyyMMdd", CultureInfo.InvariantCulture);
                    }

                    Metric visitsMetric = entry.Metrics.FirstOrDefault(
                        m => m.Name == Constants.Metrics.Visits);

                    if (visitsMetric != null)
                    {
                        visits = Convert.ToInt32(visitsMetric.Value);
                    }

                    Metric pageViewsMetric = entry.Metrics.FirstOrDefault(
                        m => m.Name == Constants.Metrics.Pageviews);

                    if (pageViewsMetric != null)
                    {
                        pageViews = Convert.ToInt32(pageViewsMetric.Value);
                    }

                    report.AddRecord(date, visits, pageViews);
                }

                return(report);
            }
        }
        /// <summary>
        /// Renders the body.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="report">The report.</param>
        private void RenderBody(StringBuilder builder, VisitPerDateReport report)
        {
            builder.Append(
                @"<table class='report'>
                    <tr>
                        <td>Date&nbsp;&#9660;</td>
                        <td>Visits</td>
                        <td>Pageviews</td>
                        <td>% Pageviews</td>
                    </tr>");

            foreach (var record in report.Records)
            {
                builder.AppendFormat(
                    @"<tr>
                        <td class='leftJustify'>{0}</td>
                        <td>{1}</td>
                        <td>{2}</td>
                        <td>{3:P}</td>
                    </tr>",
                    GetFormattedDate(record.Date),
                    record.Visits,
                    record.Pageviews,
                    Convert.ToDecimal(record.Pageviews) / Convert.ToDecimal(report.TotalPageviews));
            }

            builder.AppendFormat(
                @"<tr>
                    <td></td>
                    <td>{0}</td>
                    <td>{1}</td>
                    <td>{2:P}</td>
                </tr>",
                report.TotalVisits,
                report.TotalPageviews,
                1);

            builder.Append(@"</table>");
        }
Exemple #5
0
        /// <summary>
        /// Renders the body.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="report">The report.</param>
        private void RenderBody(StringBuilder builder, VisitPerDateReport report)
        {
            builder.Append(
                @"<table class='report'>
                    <tr>
                        <td>Date&nbsp;&#9660;</td>
                        <td>Visits</td>
                        <td>Pageviews</td>
                        <td>% Pageviews</td>
                    </tr>");

            foreach (var record in report.Records)
            {
                builder.AppendFormat(
                    @"<tr>
                        <td class='leftJustify'>{0}</td>
                        <td>{1}</td>
                        <td>{2}</td>
                        <td>{3:P}</td>
                    </tr>",
                    GetFormattedDate(record.Date),
                    record.Visits,
                    record.Pageviews,
                    Convert.ToDecimal(record.Pageviews) / Convert.ToDecimal(report.TotalPageviews));
            }

            builder.AppendFormat(
                @"<tr>
                    <td></td>
                    <td>{0}</td>
                    <td>{1}</td>
                    <td>{2:P}</td>
                </tr>",
                report.TotalVisits,
                report.TotalPageviews,
                1);

            builder.Append(@"</table>");
        }
        /// <summary>
        /// Builds the visit per date report.
        /// </summary>
        /// <param name="start">The start.</param>
        /// <param name="end">The end.</param>
        /// <returns></returns>
        public VisitPerDateReport BuildVisitPerDateReport(DateTime start, DateTime end)
        {
            DataFeed feed = GetVisitPerDateDataFeed(start, end);

            if (feed.Entries.Count == 0)
            {
                throw new Exception("No entries found");
            }
            else
            {
                DataSource dataSource = feed.DataSource;

                VisitPerDateReport report = new VisitPerDateReport(
                    dataSource.TableName.TrimEnd('/'), start, end);

                foreach (DataEntry entry in feed.Entries)
                {
                    DateTime date = DateTime.MinValue;
                    int visits = -1;
                    int pageViews = -1;

                    Dimension dateDimension = entry.Dimensions.FirstOrDefault(
                        d => d.Name == Constants.Dimensions.Date);

                    if (dateDimension != null)
                    {
                        date = DateTime.ParseExact(dateDimension.Value,
                            "yyyyMMdd", CultureInfo.InvariantCulture);
                    }

                    Metric visitsMetric = entry.Metrics.FirstOrDefault(
                        m => m.Name == Constants.Metrics.Visits);

                    if (visitsMetric != null)
                    {
                        visits = Convert.ToInt32(visitsMetric.Value);
                    }

                    Metric pageViewsMetric = entry.Metrics.FirstOrDefault(
                        m => m.Name == Constants.Metrics.Pageviews);

                    if (pageViewsMetric != null)
                    {
                        pageViews = Convert.ToInt32(pageViewsMetric.Value);
                    }

                    report.AddRecord(date, visits, pageViews);
                }

                return report;
            }
        }
 /// <summary>
 /// Renders the header.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="report">The report.</param>
 private void RenderHeader(StringBuilder builder, VisitPerDateReport report)
 {
     builder.AppendFormat(
         "<span class='sectionHeader'>{0} (by visit date)</span><br /><br />",
         report.WebsiteName);
 }
 /// <summary>
 /// Renders the footer.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="report">The report.</param>
 private void RenderFooter(StringBuilder builder, VisitPerDateReport report)
 {
     builder.Append("<br />");
 }
Exemple #9
0
        public static void Main(String[] args)
        {
            try
            {
                DateTime start;

                if (string.IsNullOrEmpty(startDateString) ||
                    !DateTime.TryParse(startDateString, out start))
                {
                    start = DateTime.Now.AddDays(-7);    // assuming this app runs on Mondays
                }

                DateTime end;

                if (string.IsNullOrEmpty(endDateString) ||
                    !DateTime.TryParse(endDateString, out end))
                {
                    end = DateTime.Now.AddDays(-1);    // assuming this app runs on Mondays
                }

                string outputFileName = string.Format(@"{0}\VistorReport_{1:ddMMyyyy}.html",
                                                      outputFolderPath,
                                                      DateTime.Now);

                Trace.WriteLine(string.Format(
                                    "[{0}] Generating Site 1 & Site 2 visitor reports from {1:MM/dd/yyyy} to {2:MM/dd/yyyy}",
                                    DateTime.Now, start, end));

                StringBuilder htmlBody = new StringBuilder();

                VisitPerDateReportHtmlRenderer visitPerDateReportRenderer =
                    new VisitPerDateReportHtmlRenderer();

                VisitPerRegionHtmlReportRenderer visitPerRegionReportRenderer =
                    new VisitPerRegionHtmlReportRenderer();

                Trace.Indent();

                // Site 1 visit by date report
                Trace.WriteLine("Creating Site 1 report builder...");

                IReportBuilder site1ReportBuilder = new GoogleAnalyticsReportBuilder(
                    userName,
                    password,
                    site1TableId);

                Trace.WriteLine("Generating Site 1 visit by date report...");

                VisitPerDateReport site1VisitPerDateReport =
                    site1ReportBuilder.BuildVisitPerDateReport(
                        start, end);

                Trace.WriteLine("Rendering Site 1 visit by date report...");
                htmlBody.Append(visitPerDateReportRenderer.Render(site1VisitPerDateReport));

                // Site 1 visit by region report
                Trace.WriteLine("Generating Site 1 visit by region report...");

                VisitPerRegionReport site1VisitPerRegionReport =
                    site1ReportBuilder.BuildVisitPerRegionReport(
                        start, end);

                Trace.WriteLine("Rendering Site 1 visit by region report...");
                htmlBody.Append(visitPerRegionReportRenderer.Render(site1VisitPerRegionReport));

                // Site 2 visit by date report
                Trace.WriteLine("Creating Site 2 report builder...");

                IReportBuilder site2ReportBuilder = new GoogleAnalyticsReportBuilder(
                    userName,
                    password,
                    site2TableId);

                Trace.WriteLine("Generating Site 2 visit by date report...");

                VisitPerDateReport site2VisitPerDateReport =
                    site2ReportBuilder.BuildVisitPerDateReport(
                        start, end);

                Trace.WriteLine("Rendering Site 2 visit by date report...");
                htmlBody.Append(visitPerDateReportRenderer.Render(site2VisitPerDateReport));

                // Site 1 visit by region report
                Trace.WriteLine("Generating Site 2 visit by region report...");

                VisitPerRegionReport site2VisitPerRegionReport =
                    site2ReportBuilder.BuildVisitPerRegionReport(
                        start, end);

                Trace.WriteLine("Rendering Site 2 visit by region report...");
                htmlBody.Append(visitPerRegionReportRenderer.Render(site2VisitPerRegionReport));

                Trace.WriteLine("Adding styles to final output...");
                string html = HtmlReportsHelper.WrapStyles(htmlBody.ToString(), styleSheetPath);

                Trace.WriteLine(string.Format("Wrting output to file {0}", outputFileName));
                File.WriteAllText(outputFileName, html);

                Trace.Unindent();

                Trace.WriteLine(string.Format("[{0}] Report generation completed.", DateTime.Now));
                Trace.WriteLine(string.Empty);
            }
            catch (Exception ex)
            {
                Trace.WriteLine("Exception Caught!");
                Trace.WriteLine(string.Format("[{0}] {1}", DateTime.Now, ex.Message));
            }
        }
Exemple #10
0
 /// <summary>
 /// Renders the header.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="report">The report.</param>
 private void RenderHeader(StringBuilder builder, VisitPerDateReport report)
 {
     builder.AppendFormat(
         "<span class='sectionHeader'>{0} (by visit date)</span><br /><br />",
         report.WebsiteName);
 }
Exemple #11
0
 /// <summary>
 /// Renders the footer.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="report">The report.</param>
 private void RenderFooter(StringBuilder builder, VisitPerDateReport report)
 {
     builder.Append("<br />");
 }