Example #1
0
        /// <summary>
        /// Gets an instance of <var>AnalyticsDataResponse</var> from the specified
        /// <var>JsonObject</var>.
        /// </summary>
        /// <param name="obj">The instance of <var>JsonObject</var> to parse.</param>
        public static AnalyticsDataResponse Parse(JsonObject obj)
        {
            // Check whether "obj" is NULL
            if (obj == null)
            {
                return(null);
            }

            // Check for any API errors
            if (obj.HasValue("error"))
            {
                JsonObject error = obj.GetObject("error");
                throw new GoogleApiException(error.GetInt32("code"), error.GetString("message"));
            }

            // Get the column headers
            AnalyticsDataColumnHeader[] columns = obj.GetArray("columnHeaders", AnalyticsDataColumnHeader.Parse);

            // Initialize and return the response object
            return(new AnalyticsDataResponse {
                JsonObject = obj,
                Query = obj.GetObject("query", AnalyticsDataQuery.Parse),
                ColumnHeaders = columns,
                Rows = AnalyticsDataRow.Parse(columns, obj.GetArray("rows"))
            });
        }
        /// <summary>
        /// Gets an instance of <var>AnalyticsRealtimeDataResponse</var> from the specified
        /// <var>JsonObject</var>.
        /// </summary>
        /// <param name="obj">The instance of <var>JsonObject</var> to parse.</param>
        public static AnalyticsRealtimeDataResponse Parse(JsonObject obj)
        {
            // Check whether "obj" is NULL
            if (obj == null)
            {
                return(null);
            }

            // Check for any API errors
            if (obj.HasValue("error"))
            {
                JsonObject error = obj.GetObject("error");
                throw new GoogleApiException(error.GetInt32("code"), error.GetString("message"));
            }

            // Get the column headers
            AnalyticsDataColumnHeader[] columns = obj.GetArray("columnHeaders", AnalyticsDataColumnHeader.Parse);

            // Initialize the response object
            AnalyticsRealtimeDataResponse response = new AnalyticsRealtimeDataResponse {
                JsonObject    = obj,
                Query         = obj.GetObject("query", AnalyticsRealtimeDataQuery.Parse),
                TotalResults  = obj.GetInt32("totalResults"),
                ColumnHeaders = columns,
                Rows          = AnalyticsDataRow.Parse(columns, obj.GetArray("rows"))
            };

            // Get total result values
            foreach (KeyValuePair <string, object> pair in obj.GetObject("totalsForAllResults").Dictionary)
            {
                response._totalsForAllResults.Add(pair.Key, pair.Value.ToString());
            }

            return(response);
        }
Example #3
0
        internal object FormatVisitDataDouble(IAnalyticsField field, AnalyticsDataRow row1, AnalyticsDataRow row2)
        {
            string key = field.Name.Substring(3);

            double valueOld = (row1 == null ? 0 : row1.GetDouble(field));
            double valueNew = (row2 == null ? 0 : row2.GetDouble(field));

            double change = valueNew - valueOld;

            double percent = change / valueOld * 100;

            return(new OmgDataRow {
                Alias = key,
                Label = Context.Translate(field),
                Value = new { raw = valueNew, text = Context.Format(valueNew) },
                OldValue = new { raw = valueOld, text = Context.Format(valueOld) },
                Change = new {
                    raw = change,
                    text = FormatChange(change),
                    percent = new {
                        raw = Double.IsInfinity(percent) ? null : (object)percent,
                        text = Double.IsInfinity(percent) ? null : FormatChange(percent)
                    }
                },
            });
        }
Example #4
0
        internal object FormatDouble(IAnalyticsField field, AnalyticsDataRow row)
        {
            string key = field.Name.Substring(3);

            double value = (row == null ? 0 : row.GetDouble(field));

            return(new OmgDataRow {
                Alias = key,
                Label = Context.Translate(field),
                Value = new { raw = value, text = Context.Format(value) }
            });
        }
        internal object FormatVisitDataDouble(IAnalyticsField field, AnalyticsDataRow row1, AnalyticsDataRow row2) {

            string key = field.Name.Substring(3);

            double valueOld = (row1 == null ? 0 : row1.GetDouble(field));
            double valueNew = (row2 == null ? 0 : row2.GetDouble(field));

            double change = valueNew - valueOld;

            return new OmgDataRow {
                Alias = key,
                Label = Context.Translate(field),
                Value = new { raw = valueNew, text = Context.Format(valueNew) },
                Change = new { raw = change, text = Context.Format(change) },
            };

        }
        internal object FormatDouble(IAnalyticsField field, AnalyticsDataRow row) {

            string key = field.Name.Substring(3);

            double value = (row == null ? 0 : row.GetDouble(field));

            return new OmgDataRow {
                Alias = key,
                Label = Context.Translate(field),
                Value = new { raw = value, text = Context.Format(value) }
            };

        }
 public static bool TryGetValue(this AnalyticsDataRow row, AnalyticsMetric key, out string value)
 {
     value = row.GetString(key);
     return(String.IsNullOrWhiteSpace(value) == false);
 }
        public static LineChartBlock GetBlock(DataQuery query)
        {
            // Declare the data options
            AnalyticsDataOptions options = new AnalyticsDataOptions {
                StartDate = query.CurrentStartDate,
                EndDate   = query.CurrentEndDate,
                Metrics   = AnalyticsMetric.Visits + AnalyticsMetric.Pageviews
            };

            if (query.Days <= 1)
            {
                options.Dimensions = AnalyticsDimension.Hour;
            }
            else if (query.Days <= 31)
            {
                options.Dimensions = AnalyticsDimension.Date;
                //options.Sorting = new AnalyticsSortOptions().AddAscending(AnalyticsDimension.Date);
            }
            else
            {
                options.Dimensions = AnalyticsDimension.YearWeek;
            }

            // Add any extra options?
            switch (query.Type)
            {
            case DataQueryType.Page:
                options.Filters = query.CreateFilterOptionsFromPageUrls();
                break;
            }

            // Fetch the data
            AnalyticsDataResponse data;

            try {
                data = query.GetCachedData("LineChart", options);
            } catch (Exception ex) {
                throw new DashboardException(ex.Message + " (Unable to fetch data for period from " + query.PreviousStartDate.ToString("yyyy-MM-dd") + " to " + query.PreviousEndDate.ToString("yyyy-MM-dd") + " for block \"LineChart\")");
            }

            object ddata;

            if (data.Rows.Length == 0)
            {
                ddata = new {
                    columns = new object[0],
                    rows    = new object[0]
                };
            }
            else
            {
                object[] columns = new object[data.ColumnHeaders.Length];
                object[] rows    = new object[data.Rows.Length];

                for (int i = 0; i < data.ColumnHeaders.Length; i++)
                {
                    var column = data.ColumnHeaders[i];
                    columns[i] = new {
                        alias = column.Name.Substring(3),
                        label = query.Context.Translate(column.Name)
                    };
                }

                for (int i = 0; i < data.Rows.Length; i++)
                {
                    AnalyticsDataRow row = data.Rows[i];

                    object[] rowdata = new object[row.Cells.Length];

                    for (int j = 0; j < row.Cells.Length; j++)
                    {
                        rowdata[j] = GetCellData(row.Cells[j], query);
                    }

                    rows[i] = rowdata;
                }

                ddata = new { columns, rows };
            }

            var datasets = new object[] {
                new {
                    label       = DashboardContext.Current.Translate(AnalyticsMetric.Pageviews),
                    fillColor   = "#35353d",
                    strokeColor = "#35353d"
                },
                new  {
                    label       = DashboardContext.Current.Translate(AnalyticsMetric.Visits),
                    fillColor   = "red", //"rgba(141, 146, 157, 1)",
                    strokeColor = "red"  //"rgba(141, 146, 157, 1)"
                }
            };

            object[] items = (
                from row in data.Rows
                let first = row.Cells[0]
                            select(object) new {
                label = query.FormatCell(first),
                visits = query.FormatInt32(AnalyticsMetric.Visits, row),
                pageviews = query.FormatInt32(AnalyticsMetric.Pageviews, row)
            }
                ).ToArray();

            return(new LineChartBlock {
                HasData = data.Rows.Any(x => x.GetInt32(AnalyticsMetric.Visits) > 0),
                Data = ddata,
                Datasets = datasets,
                Items = items.ToArray(),
                Debug = new {
                    query = data.Query.ToJson(),
                    days = query.Days
                }
            });
        }
Example #9
0
        internal object FormatVisitDataTime(IAnalyticsField field, AnalyticsDataRow row1, AnalyticsDataRow row2)
        {
            string key = field.Name.Substring(3);

            double valueOld = (row1 == null ? 0 : row1.GetDouble(field));
            double valueNew = (row2 == null ? 0 : row2.GetDouble(field));

            double change = valueNew - valueOld;

            double percent = change / valueOld * 100;

            TimeSpan ts1 = TimeSpan.FromSeconds(valueOld);
            TimeSpan ts2 = TimeSpan.FromSeconds(valueNew);
            TimeSpan ts3 = TimeSpan.FromSeconds(change);

            List <string> text1 = new List <string>();
            List <string> text2 = new List <string>();
            List <string> text3 = new List <string>();


            if (ts1.TotalSeconds < 10)
            {
                text1.Add(ts1.TotalSeconds.ToString("0.00") + "s");
            }
            else
            {
                if (ts1.Hours > 0)
                {
                    text1.Add(ts1.Hours + "t");
                }
                if (ts1.Minutes > 0)
                {
                    text1.Add(ts1.Minutes + "m");
                }
                if (ts1.Seconds > 0)
                {
                    text1.Add(ts1.Seconds + "s");
                }
            }

            if (ts2.TotalSeconds < 10)
            {
                text2.Add(ts2.TotalSeconds.ToString("0.00") + "s");
            }
            else
            {
                if (ts2.Hours > 0)
                {
                    text2.Add(ts2.Hours + "t");
                }
                if (ts2.Minutes > 0)
                {
                    text2.Add(ts2.Minutes + "m");
                }
                if (ts2.Seconds > 0)
                {
                    text2.Add(ts2.Seconds + "s");
                }
            }

            if (Math.Abs(ts3.TotalSeconds) < 10)
            {
                text3.Add(ts3.TotalSeconds.ToString("0.00") + "s");
            }
            else
            {
                if (Math.Abs(ts3.Hours) > 0)
                {
                    text3.Add(ts3.Hours + "t");
                }
                if (Math.Abs(ts3.Minutes) > 0)
                {
                    text3.Add(ts3.Minutes + "m");
                }
                if (Math.Abs(ts3.Seconds) > 0)
                {
                    text3.Add(ts3.Seconds + "s");
                }
            }

            return(new OmgDataRow {
                Alias = key,
                Label = Context.Translate(field),
                OldValue = new { raw = valueOld, text = String.Join(" og ", text1) },
                Value = new { raw = valueNew, text = String.Join(" og ", text2) },
                Change = new {
                    raw = change,
                    text = (ts3.Ticks > 0 ? "+" : "") + String.Join(" og ", text3),
                    percent = new {
                        raw = Double.IsInfinity(percent) ? null : (object)percent,
                        text = Double.IsInfinity(percent) ? null : FormatChange(percent)
                    }
                },
            });
        }