def get(self, id): """Return global stats.""" n_pending_tasks = stats.n_total_tasks_site() - stats.n_task_runs_site() n_users = stats.n_auth_users() + stats.n_anon_users() n_projects = cached_apps.n_published() + cached_apps.n_draft() data = dict(n_projects=n_projects, n_users=n_users, n_task_runs=stats.n_task_runs_site(), n_pending_tasks=n_pending_tasks, categories=[]) # Add Categories categories = cached_categories.get_used() for c in categories: datum = dict() datum[c['short_name']] = cached_apps.n_count(c['short_name']) data['categories'].append(datum) # Add Featured datum = dict() datum['featured'] = cached_apps.n_featured() data['categories'].append(datum) # Add Draft datum = dict() datum['draft'] = cached_apps.n_draft() data['categories'].append(datum) return Response(json.dumps(data), 200, mimetype='application/json')
def index(): """Return Global Statistics for the site""" title = "Global Statistics" n_auth = n_auth_users() n_anon = n_anon_users() n_total_users = n_anon + n_auth n_published_apps = cached_apps.n_published() n_draft_apps = cached_apps.n_draft() n_total_apps = n_published_apps + n_draft_apps n_tasks = n_tasks_site() n_task_runs = n_task_runs_site() top5_apps_24_hours = get_top5_apps_24_hours() top5_users_24_hours = get_top5_users_24_hours() locs = get_locs() show_locs = False if len(locs) > 0: show_locs = True stats = dict(n_total_users=n_total_users, n_auth=n_auth, n_anon=n_anon, n_published_apps=n_published_apps, n_draft_apps=n_draft_apps, n_total_apps=n_total_apps, n_tasks=n_tasks, n_task_runs=n_task_runs) users = dict(label="User Statistics", values=[ dict(label='Anonymous', value=[0, n_anon]), dict(label='Authenticated', value=[0, n_auth])]) apps = dict(label="Apps Statistics", values=[ dict(label='Published', value=[0, n_published_apps]), dict(label='Draft', value=[0, n_draft_apps])]) tasks = dict(label="Task and Task Run Statistics", values=[ dict(label='Tasks', value=[0, n_tasks]), dict(label='Answers', value=[1, n_task_runs])]) return render_template('/stats/global.html', title=title, users=json.dumps(users), apps=json.dumps(apps), tasks=json.dumps(tasks), locs=json.dumps(locs), show_locs=show_locs, top5_users_24_hours=top5_users_24_hours, top5_apps_24_hours=top5_apps_24_hours, stats=stats)
def test_n_draft_with_drafts(self): """Test CACHE PROJECTS n_draft returns 2 if there are 2 draft projects""" # Here, we are suposing that a project is draft iff has no presenter AND has no tasks AppFactory.create_batch(2, info={}) number_of_drafts = cached_apps.n_draft() assert number_of_drafts == 2, number_of_drafts
def test_n_draft_no_drafts(self): """Test CACHE PROJECTS n_draft returns 0 if there are no draft projects""" # Here, we are suposing that a project is draft iff has no presenter AND has no tasks app = AppFactory.create(info={}) TaskFactory.create_batch(2, app=app) number_of_drafts = cached_apps.n_draft() assert number_of_drafts == 0, number_of_drafts
def index(): """Return Global Statistics for the site""" title = "Global Statistics" sql = text('''SELECT COUNT("user".id) AS n_auth FROM "user";''') results = db.engine.execute(sql) for row in results: n_auth = row.n_auth sql = text('''SELECT COUNT(DISTINCT(task_run.user_ip)) AS n_anon FROM task_run;''') results = db.engine.execute(sql) for row in results: n_anon = row.n_anon n_total_users = n_anon + n_auth n_published_apps = cached_apps.n_published() n_draft_apps = cached_apps.n_draft() n_total_apps = n_published_apps + n_draft_apps sql = text('''SELECT COUNT(task.id) AS n_tasks FROM task''') results = db.engine.execute(sql) for row in results: n_tasks = row.n_tasks sql = text('''SELECT COUNT(task_run.id) AS n_task_runs FROM task_run''') results = db.engine.execute(sql) for row in results: n_task_runs = row.n_task_runs # Top 5 Most active apps in last 24 hours sql = text('''SELECT app.id, app.name, app.short_name, app.info, COUNT(task_run.app_id) AS n_answers FROM app, task_run WHERE app.id=task_run.app_id AND DATE(task_run.finish_time) > NOW() - INTERVAL '24 hour' AND DATE(task_run.finish_time) <= NOW() GROUP BY app.id ORDER BY n_answers DESC LIMIT 5;''') results = db.engine.execute(sql, limit=5) top5_apps_24_hours = [] for row in results: tmp = dict(id=row.id, name=row.name, short_name=row.short_name, info=dict(json.loads(row.info)), n_answers=row.n_answers) top5_apps_24_hours.append(tmp) # Top 5 Most active users in last 24 hours sql = text('''SELECT "user".id, "user".fullname, "user".name, COUNT(task_run.app_id) AS n_answers FROM "user", task_run WHERE "user".id=task_run.user_id AND DATE(task_run.finish_time) > NOW() - INTERVAL '24 hour' AND DATE(task_run.finish_time) <= NOW() GROUP BY "user".id ORDER BY n_answers DESC LIMIT 5;''') results = db.engine.execute(sql, limit=5) top5_users_24_hours = [] for row in results: user = dict(id=row.id, fullname=row.fullname, name=row.name, n_answers=row.n_answers) top5_users_24_hours.append(user) stats = dict(n_total_users=n_total_users, n_auth=n_auth, n_anon=n_anon, n_published_apps=n_published_apps, n_draft_apps=n_draft_apps, n_total_apps=n_total_apps, n_tasks=n_tasks, n_task_runs=n_task_runs) users = dict(label="User Statistics", values=[ dict(label='Anonymous', value=[0, n_anon]), dict(label='Authenticated', value=[0, n_auth])]) apps = dict(label="Apps Statistics", values=[ dict(label='Published', value=[0, n_published_apps]), dict(label='Draft', value=[0, n_draft_apps])]) tasks = dict(label="Task and Task Run Statistics", values=[ dict(label='Tasks', value=[0, n_tasks]), dict(label='Answers', value=[1, n_task_runs])]) return render_template('/stats/global.html', title=title, users=json.dumps(users), apps=json.dumps(apps), tasks=json.dumps(tasks), top5_users_24_hours=top5_users_24_hours, top5_apps_24_hours=top5_apps_24_hours, stats=stats)
def index(): """Return Global Statistics for the site""" title = "Global Statistics" sql = text('''SELECT COUNT("user".id) AS n_auth FROM "user";''') results = db.engine.execute(sql) for row in results: n_auth = row.n_auth sql = text('''SELECT COUNT(DISTINCT(task_run.user_ip)) AS n_anon FROM task_run;''') results = db.engine.execute(sql) for row in results: n_anon = row.n_anon n_total_users = n_anon + n_auth n_published_apps = cached_apps.n_published() n_draft_apps = cached_apps.n_draft() n_total_apps = n_published_apps + n_draft_apps sql = text('''SELECT COUNT(task.id) AS n_tasks FROM task''') results = db.engine.execute(sql) for row in results: n_tasks = row.n_tasks sql = text('''SELECT COUNT(task_run.id) AS n_task_runs FROM task_run''') results = db.engine.execute(sql) for row in results: n_task_runs = row.n_task_runs # Top 5 Most active apps in last 24 hours sql = text('''SELECT app.id, app.name, app.short_name, app.info, COUNT(task_run.app_id) AS n_answers FROM app, task_run WHERE app.id=task_run.app_id AND app.hidden=0 AND DATE(task_run.finish_time) > NOW() - INTERVAL '24 hour' AND DATE(task_run.finish_time) <= NOW() GROUP BY app.id ORDER BY n_answers DESC LIMIT 5;''') results = db.engine.execute(sql, limit=5) top5_apps_24_hours = [] for row in results: tmp = dict(id=row.id, name=row.name, short_name=row.short_name, info=dict(json.loads(row.info)), n_answers=row.n_answers) top5_apps_24_hours.append(tmp) # Top 5 Most active users in last 24 hours sql = text('''SELECT "user".id, "user".fullname, "user".name, COUNT(task_run.app_id) AS n_answers FROM "user", task_run WHERE "user".id=task_run.user_id AND DATE(task_run.finish_time) > NOW() - INTERVAL '24 hour' AND DATE(task_run.finish_time) <= NOW() GROUP BY "user".id ORDER BY n_answers DESC LIMIT 5;''') results = db.engine.execute(sql, limit=5) top5_users_24_hours = [] for row in results: user = dict(id=row.id, fullname=row.fullname, name=row.name, n_answers=row.n_answers) top5_users_24_hours.append(user) # All IP addresses from anonymous users to create a map locs = [] if current_app.config['GEO']: sql = '''SELECT DISTINCT(user_ip) from task_run WHERE user_ip IS NOT NULL;''' results = db.engine.execute(sql) geolite = current_app.root_path + '/../dat/GeoLiteCity.dat' gic = pygeoip.GeoIP(geolite) for row in results: loc = gic.record_by_addr(row.user_ip) if loc is None: loc = {} if (len(loc.keys()) == 0): loc['latitude'] = 0 loc['longitude'] = 0 locs.append(dict(loc=loc)) show_locs = False if len(locs) > 0: show_locs = True stats = dict(n_total_users=n_total_users, n_auth=n_auth, n_anon=n_anon, n_published_apps=n_published_apps, n_draft_apps=n_draft_apps, n_total_apps=n_total_apps, n_tasks=n_tasks, n_task_runs=n_task_runs) users = dict(label="User Statistics", values=[ dict(label='Anonymous', value=[0, n_anon]), dict(label='Authenticated', value=[0, n_auth])]) apps = dict(label="Apps Statistics", values=[ dict(label='Published', value=[0, n_published_apps]), dict(label='Draft', value=[0, n_draft_apps])]) tasks = dict(label="Task and Task Run Statistics", values=[ dict(label='Tasks', value=[0, n_tasks]), dict(label='Answers', value=[1, n_task_runs])]) return render_template('/stats/global.html', title=title, users=json.dumps(users), apps=json.dumps(apps), tasks=json.dumps(tasks), locs=json.dumps(locs), show_locs=show_locs, top5_users_24_hours=top5_users_24_hours, top5_apps_24_hours=top5_apps_24_hours, stats=stats)
def index(): """Return Global Statistics for the site""" title = "Global Statistics" sql = text('''SELECT COUNT("user".id) AS n_auth FROM "user";''') results = db.engine.execute(sql) for row in results: n_auth = row.n_auth sql = text('''SELECT COUNT(DISTINCT(task_run.user_ip)) AS n_anon FROM task_run;''') results = db.engine.execute(sql) for row in results: n_anon = row.n_anon n_total_users = n_anon + n_auth n_published_apps = cached_apps.n_published() n_draft_apps = cached_apps.n_draft() n_total_apps = n_published_apps + n_draft_apps sql = text('''SELECT COUNT(task.id) AS n_tasks FROM task''') results = db.engine.execute(sql) for row in results: n_tasks = row.n_tasks sql = text('''SELECT COUNT(task_run.id) AS n_task_runs FROM task_run''') results = db.engine.execute(sql) for row in results: n_task_runs = row.n_task_runs # Top 5 Most active apps in last 24 hours sql = text('''SELECT app.id, app.name, app.short_name, app.info, COUNT(task_run.app_id) AS n_answers FROM app, task_run WHERE app.id=task_run.app_id AND DATE(task_run.finish_time) > NOW() - INTERVAL '24 hour' AND DATE(task_run.finish_time) <= NOW() GROUP BY app.id ORDER BY n_answers DESC;''') results = db.engine.execute(sql, limit=5) top5_apps_24_hours = [] for row in results: tmp = dict(id=row.id, name=row.name, short_name=row.short_name, info=dict(json.loads(row.info)), n_answers=row.n_answers) top5_apps_24_hours.append(tmp) # Top 5 Most active users in last 24 hours sql = text('''SELECT "user".id, "user".fullname, COUNT(task_run.app_id) AS n_answers FROM "user", task_run WHERE "user".id=task_run.user_id AND DATE(task_run.finish_time) > NOW() - INTERVAL '24 hour' AND DATE(task_run.finish_time) <= NOW() GROUP BY "user".id ORDER BY n_answers DESC;''') results = db.engine.execute(sql, limit=5) top5_users_24_hours = [] for row in results: user = dict(id=row.id, fullname=row.fullname, n_answers=row.n_answers) top5_users_24_hours.append(user) stats = dict(n_total_users=n_total_users, n_auth=n_auth, n_anon=n_anon, n_published_apps=n_published_apps, n_draft_apps=n_draft_apps, n_total_apps=n_total_apps, n_tasks=n_tasks, n_task_runs=n_task_runs) users = dict(label="User Statistics", values=[ dict(label='Anonymous', value=[0, n_anon]), dict(label='Authenticated', value=[0, n_auth]) ]) apps = dict(label="Apps Statistics", values=[ dict(label='Published', value=[0, n_published_apps]), dict(label='Draft', value=[0, n_draft_apps]) ]) tasks = dict(label="Task and Task Run Statistics", values=[ dict(label='Tasks', value=[0, n_tasks]), dict(label='Answers', value=[1, n_task_runs]) ]) return render_template('/stats/global.html', title=title, users=json.dumps(users), apps=json.dumps(apps), tasks=json.dumps(tasks), top5_users_24_hours=top5_users_24_hours, top5_apps_24_hours=top5_apps_24_hours, stats=stats)