/// <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); }
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) } }, }); }
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 } }); }
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) } }, }); }