Ejemplo n.º 1
0
 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')
Ejemplo n.º 2
0
def featured(app_id=None):
    """List featured apps of PyBossa"""
    n_published = cached_apps.n_published()
    if request.method == 'GET':
        apps, n_published = cached_apps.get_published(page=1, per_page=n_published)
        return render_template('/admin/applications.html', apps=apps)
    if request.method == 'POST':
        cached_apps.reset()
        f = model.Featured()
        f.app_id = app_id
        # Check if the app is already in this table
        tmp = db.session.query(model.Featured)\
                .filter(model.Featured.app_id == app_id)\
                .first()
        if (tmp is None):
            db.session.add(f)
            db.session.commit()
            return json.dumps(f.dictize())
        else:
            return json.dumps({'error': 'App.id %s already in Featured table'
                               % app_id})
    if request.method == 'DELETE':
        cached_apps.reset()
        f = db.session.query(model.Featured)\
              .filter(model.Featured.app_id == app_id)\
              .first()
        if (f):
            db.session.delete(f)
            db.session.commit()
            return "", 204
        else:
            return json.dumps({'error': 'App.id %s is not in Featured table'
                               % app_id})
Ejemplo n.º 3
0
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_count('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)
Ejemplo n.º 4
0
 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')
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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)