Change the entry for the current month to include the date that reports are available to.
alter table ga_stat add column period_complete_day text;
- Makes sure that GA_Stat entries have the period_complete_day set
- Cleans up the template and moves the drop-down to the util template
--- a/ckanext/ga_report/download_analytics.py
+++ b/ckanext/ga_report/download_analytics.py
@@ -126,7 +126,7 @@
ga_model.update_publisher_stats(period_name) # about 30 seconds.
log.info('Downloading and storing analytics for site-wide stats')
- self.sitewide_stats( period_name )
+ self.sitewide_stats( period_name, period_complete_day )
log.info('Downloading and storing analytics for social networks')
self.update_social_info(period_name, start_date, end_date)
@@ -194,7 +194,7 @@
if 'url' in data:
ga_model.update_url_stats(period_name, period_complete_day, data['url'])
- def sitewide_stats(self, period_name):
+ def sitewide_stats(self, period_name, period_complete_day):
import calendar
year, month = period_name.split('-')
_, last_day_of_month = calendar.monthrange(int(year), int(month))
@@ -205,7 +205,7 @@
'_locale_stats', '_browser_stats', '_mobile_stats']
for f in funcs:
log.info('Downloading analytics for %s' % f.split('_')[1])
- getattr(self, f)(start_date, end_date, period_name)
+ getattr(self, f)(start_date, end_date, period_name, period_complete_day)
def _get_results(result_data, f):
data = {}
@@ -214,7 +214,7 @@
data[key] = data.get(key,0) + result[1]
return data
- def _totals_stats(self, start_date, end_date, period_name):
+ def _totals_stats(self, start_date, end_date, period_name, period_complete_day):
""" Fetches distinct totals, total pageviews etc """
results = self.service.data().ga().get(
ids='ga:' + self.profile_id,
@@ -224,7 +224,8 @@
max_results=10000,
end_date=end_date).execute()
result_data = results.get('rows')
- ga_model.update_sitewide_stats(period_name, "Totals", {'Total page views': result_data[0][0]})
+ ga_model.update_sitewide_stats(period_name, "Totals", {'Total page views': result_data[0][0]},
+ period_complete_day)
results = self.service.data().ga().get(
ids='ga:' + self.profile_id,
@@ -239,7 +240,7 @@
'New visits': result_data[0][2],
'Total visits': result_data[0][3],
}
- ga_model.update_sitewide_stats(period_name, "Totals", data)
+ ga_model.update_sitewide_stats(period_name, "Totals", data, period_complete_day)
# Bounces from / or another configurable page.
path = '/%s%s' % (config.get('googleanalytics.account'),
@@ -261,10 +262,11 @@
bounces, total = [float(x) for x in result_data[0][1:]]
pct = 100 * bounces/total
log.info('%d bounces from %d total == %s', bounces, total, pct)
- ga_model.update_sitewide_stats(period_name, "Totals", {'Bounce rate (home page)': pct})
-
-
- def _locale_stats(self, start_date, end_date, period_name):
+ ga_model.update_sitewide_stats(period_name, "Totals", {'Bounce rate (home page)': pct},
+ period_complete_day)
+
+
+ def _locale_stats(self, start_date, end_date, period_name, period_complete_day):
""" Fetches stats about language and country """
results = self.service.data().ga().get(
ids='ga:' + self.profile_id,
@@ -279,16 +281,16 @@
for result in result_data:
data[result[0]] = data.get(result[0], 0) + int(result[2])
self._filter_out_long_tail(data, MIN_VIEWS)
- ga_model.update_sitewide_stats(period_name, "Languages", data)
+ ga_model.update_sitewide_stats(period_name, "Languages", data, period_complete_day)
data = {}
for result in result_data:
data[result[1]] = data.get(result[1], 0) + int(result[2])
self._filter_out_long_tail(data, MIN_VIEWS)
- ga_model.update_sitewide_stats(period_name, "Country", data)
-
-
- def _social_stats(self, start_date, end_date, period_name):
+ ga_model.update_sitewide_stats(period_name, "Country", data, period_complete_day)
+
+
+ def _social_stats(self, start_date, end_date, period_name, period_complete_day):
""" Finds out which social sites people are referred from """
results = self.service.data().ga().get(
ids='ga:' + self.profile_id,
@@ -304,10 +306,10 @@
if not result[0] == '(not set)':
data[result[0]] = data.get(result[0], 0) + int(result[2])
self._filter_out_long_tail(data, 3)
- ga_model.update_sitewide_stats(period_name, "Social sources", data)
-
-
- def _os_stats(self, start_date, end_date, period_name):
+ ga_model.update_sitewide_stats(period_name, "Social sources", data, period_complete_day)
+
+
+ def _os_stats(self, start_date, end_date, period_name, period_complete_day):
""" Operating system stats """
results = self.service.data().ga().get(
ids='ga:' + self.profile_id,
@@ -322,17 +324,17 @@
for result in result_data:
data[result[0]] = data.get(result[0], 0) + int(result[2])
self._filter_out_long_tail(data, MIN_VIEWS)
- ga_model.update_sitewide_stats(period_name, "Operating Systems", data)
+ ga_model.update_sitewide_stats(period_name, "Operating Systems", data, period_complete_day)
data = {}
for result in result_data:
if int(result[2]) >= MIN_VIEWS:
key = "%s %s" % (result[0],result[1])
data[key] = result[2]
- ga_model.update_sitewide_stats(period_name, "Operating Systems versions", data)
-
-
- def _browser_stats(self, start_date, end_date, period_name):
+ ga_model.update_sitewide_stats(period_name, "Operating Systems versions", data, period_complete_day)
+
+
+ def _browser_stats(self, start_date, end_date, period_name, period_complete_day):
""" Information about browsers and browser versions """
results = self.service.data().ga().get(
ids='ga:' + self.profile_id,
@@ -349,14 +351,14 @@
for result in result_data:
data[result[0]] = data.get(result[0], 0) + int(result[2])
self._filter_out_long_tail(data, MIN_VIEWS)
- ga_model.update_sitewide_stats(period_name, "Browsers", data)
+ ga_model.update_sitewide_stats(period_name, "Browsers", data, period_complete_day)
data = {}
for result in result_data:
key = "%s %s" % (result[0], self._filter_browser_version(result[0], result[1]))
data[key] = data.get(key, 0) + int(result[2])
self._filter_out_long_tail(data, MIN_VIEWS)
- ga_model.update_sitewide_stats(period_name, "Browser versions", data)
+ ga_model.update_sitewide_stats(period_name, "Browser versions", data, period_complete_day)
@classmethod
def _filter_browser_version(cls, browser, version_str):
@@ -380,7 +382,7 @@
ver = ver[0] + ver[1] + 'X' * num_hidden_digits
return ver
- def _mobile_stats(self, start_date, end_date, period_name):
+ def _mobile_stats(self, start_date, end_date, period_name, period_complete_day):
""" Info about mobile devices """
results = self.service.data().ga().get(
@@ -397,13 +399,13 @@
for result in result_data:
data[result[0]] = data.get(result[0], 0) + int(result[2])
self._filter_out_long_tail(data, MIN_VIEWS)
- ga_model.update_sitewide_stats(period_name, "Mobile brands", data)
+ ga_model.update_sitewide_stats(period_name, "Mobile brands", data, period_complete_day)
data = {}
for result in result_data:
data[result[1]] = data.get(result[1], 0) + int(result[2])
self._filter_out_long_tail(data, MIN_VIEWS)
- ga_model.update_sitewide_stats(period_name, "Mobile devices", data)
+ ga_model.update_sitewide_stats(period_name, "Mobile devices", data, period_complete_day)
@classmethod
def _filter_out_long_tail(cls, data, threshold=10):
--- a/ckanext/ga_report/ga_model.py
+++ b/ckanext/ga_report/ga_model.py
@@ -47,6 +47,7 @@
Column('id', types.UnicodeText, primary_key=True,
default=make_uuid),
Column('period_name', types.UnicodeText),
+ Column('period_complete_day', types.UnicodeText),
Column('stat_name', types.UnicodeText),
Column('key', types.UnicodeText),
Column('value', types.UnicodeText), )
@@ -134,7 +135,7 @@
return None, publisher_match.groups()[0]
return None, None
-def update_sitewide_stats(period_name, stat_name, data):
+def update_sitewide_stats(period_name, stat_name, data, period_complete_day):
for k,v in data.iteritems():
item = model.Session.query(GA_Stat).\
filter(GA_Stat.period_name==period_name).\
@@ -144,11 +145,13 @@
item.period_name = period_name
item.key = k
item.value = v
+ item.period_complete_day = period_complete_day
model.Session.add(item)
else:
# create the row
values = {'id': make_uuid(),
'period_name': period_name,
+ 'period_complete_day': period_complete_day,
'key': k,
'value': v,
'stat_name': stat_name