Beispiel #1
0
def change_dashboard_ordering():
    dashboard_id_list = request.get_json()['dashboard_id_list']

    check_access(lambda: auth.access_profile())

    dashboards.change_dashboards_ordering(auth.logged_owner_id(), dashboard_id_list)
    return success()
Beispiel #2
0
def profile_dashboard(dashboard_id_str=None, dashboard_name=None):
    if not auth.access_profile():
        return redirect(url_for('bp_mqe.login', next='dashboard'))
    
    g.profile_page = 'dashboard'

    dbs = dashboards.OwnerDashboards(auth.logged_owner_id())
    if dashboard_id_str is None:
        active_db_id = dbs.dashboards[0].dashboard_id
    else:
        try:
            active_db_id = uuid.UUID(dashboard_id_str)
        except ValueError:
            abort(404)
        if active_db_id not in dbs.dashboard_by_id:
            abort(404)

    layout = Layout.select(auth.logged_owner_id(), active_db_id)

    if not reports.owner_has_reports(auth.logged_owner_id()):
        onboarding = True
    else:
        onboarding = False

    return render_template('profile_dashboard.html',
                   onboarding=onboarding,
                   dashboards=dbs,
                   active_db_id=active_db_id,
                   active_db_layout_id=layout.layout_id,
                   active_db_layout_dict=layout.layout_dict)
Beispiel #3
0
def reissue_api_key():
    check_access(lambda: auth.access_profile())

    stoken_check()

    users.assign_new_api_key(auth.logged_owner_id())
    flash('New API key has been issued')

    return redirect(url_for('bp_mqe.profile_settings', settings_page='preferences'))
Beispiel #4
0
def fetch_report_list():
    filter_s = request.get_json().get('filter_s')
    last_report_id = request.get_json().get('last_report_id')

    check_access(lambda: auth.access_profile())

    report_list = _report_list(filter_s, last_report_id)
    html = get_template_attribute('m.html', 'reports_list_page')(report_list, filter_s, len(report_list) == REPORTS_PER_PAGE)
    return success(result=dict(html=html))
Beispiel #5
0
def render_recent_reports():
    check_access(lambda: auth.access_profile())

    report_list = reports.fetch_reports_by_name(auth.logged_owner_id(), limit=RECENT_REPORTS_LIMIT)
    report_names = [report.report_name for report in report_list]

    html = get_template_attribute('m.html', 'recent_reports')(report_names)

    return success(result=dict(html=html))
Beispiel #6
0
def profile_settings(settings_page=None):
    if not auth.access_profile():
        return redirect(url_for('bp_mqe.login', next='settings'))
    g.profile_page = 'settings'

    if not settings_page:
        return redirect(url_for('bp_mqe.profile_settings', settings_page='preferences'))

    g.settings_page = settings_page
    return globals()['profile_settings_%s' % settings_page]()
Beispiel #7
0
def autocomplete_report_name():
    term = request.get_json()['term']

    check_access(lambda: auth.access_profile())

    report_list = reports.fetch_reports_by_name(auth.logged_owner_id(), term, None,
                                                AUTOCOMPLETE_REPORT_NAME_LIMIT)
    report_names = [report.report_name for report in report_list]

    return success(result=dict(data=report_names))
Beispiel #8
0
def report_instances_days():
    report_name = request.get_json()['report_name']
    tags = request.get_json().get('tags')

    check_access(lambda: auth.access_profile())

    report = Report.select_by_name(auth.logged_owner_id(), report_name)
    days_dts = report.fetch_days(tags)
    days = [dt.strftime('%Y-%m-%d') for dt in days_dts]

    return success(result=dict(days=days))
Beispiel #9
0
def profile_reports():
    if not auth.access_profile():
        return redirect(url_for('bp_mqe.login', next='dashboard'))

    g.profile_page = 'reports'

    check_access(lambda: auth.access_profile())

    filter_s = request.args.get('filter_s')
    last_report_id = request.args.get('last_report_id')

    if last_report_id:
        last_report_id = uuid.UUID(last_report_id)

    report_list = _report_list(filter_s, last_report_id)

    return render_template('profile_reports.html',
                           report_list=report_list,
                           filter_s=None,
                           has_next=len(report_list) == REPORTS_PER_PAGE)
Beispiel #10
0
def profile_settings_preferences():
    check_access(lambda: auth.access_profile())

    if request.method == 'GET':
        api_key = users.select_api_key(auth.logged_owner_id()) or ''

        used_report_instances = reports.report_instance_count_for_owner(auth.logged_owner_id())
        used_diskspace = reports.report_instance_diskspace_for_owner(auth.logged_owner_id())

        selected_timezone = session['tz']

        selected_dt_format = session.get('dt_format', ALL_DT_FORMATS[0][0])

        user_row = User.select(auth.logged_owner_id())

        return render_template('profile_settings_preferences.html',
                               user_row=user_row,
                               api_key=api_key,
                               used_report_instances=used_report_instances,
                               used_diskspace=used_diskspace,
                               all_timezones=pytz.common_timezones,
                               selected_timezone=selected_timezone,
                               all_dt_formats=ALL_DT_FORMATS,
                               selected_dt_format=selected_dt_format)

    stoken_check()

    user = User.select(auth.logged_owner_id())

    d = {}

    timezone = request.form['timezone']
    if timezone and timezone in pytz.common_timezones:
        d['chosen_timezone'] = timezone
        session['tz'] = timezone

    dt_format = request.form['dt_format']
    if dt_format and dt_format in {x[0] for x in ALL_DT_FORMATS}:
        d['dt_format'] = dt_format
        session['dt_format'] = dt_format

    user.update_user_data(d)
    flash('Preferences updated')

    log.info('Updated user preferences with %s', d)

    return redirect(url_for('bp_mqe.profile_settings', settings_page='preferences'))
Beispiel #11
0
def report_instance_for_viewer():
    report_name = request.get_json()['report_name']
    tags = request.get_json().get('tags')
    curr_report_instance_id = request.get_json()['curr_report_instance_id']
    direction = request.get_json().get('direction')
    search_date = request.get_json().get('search_date')

    check_access(lambda: auth.access_profile())

    report = Report.select_by_name(auth.logged_owner_id(), report_name)

    if not curr_report_instance_id:
        curr_report_instance_id = report.fetch_latest_instance_id(tags)
        if not curr_report_instance_id:
            return error()
    if not direction:
        if search_date is not None:
            ri = report.find_report_instance_by_dt(search_date, tags)
        else:
            ri = report.fetch_single_instance(curr_report_instance_id)
    elif direction == 'next':
        ri = report.fetch_next_instance(curr_report_instance_id, tags)
    elif direction == 'prev':
        ri = report.fetch_prev_instance(curr_report_instance_id, tags)
    else:
        return error('Wrong direction')
    res = {}
    res['report_id'] = report.report_id
    res['report_has_tags'] = report.has_tags()
    if ri:
        res['html_newest_table'] = get_template_attribute('m.html', 'table_as_html_table')(ri.table)
        res['created_raw'] = datetime_from_uuid1(ri.report_instance_id)
        res['created'] = format_datetime(datetime_from_uuid1(ri.report_instance_id))
        res['tags'] = Markup(' '.join('<span class="selected-tag-name clickable">%s</span>' % tag for tag in ri.all_tags))
        res['curr_report_instance_id'] = ri.report_instance_id
        res['has_next'] = report.fetch_next_instance(ri.report_instance_id, tags) is not None
        res['has_prev'] = report.fetch_prev_instance(ri.report_instance_id, tags) is not None
    else:
        res['html_newest_table'] = ''
        res['created_raw'] = ''
        res['created'] = ''
        res['tags'] = ''
        res['curr_report_instance_id'] = None
        res['has_next'] = False
        res['has_prev'] = False

    return success(result=res)
Beispiel #12
0
def add_dashboard():
    name = request.get_json()['name'].strip()

    check_access(lambda: auth.access_profile())
    
    if not name:
        return error('Empty name')
    for invalid_char in ('/', '\\'):
        if invalid_char in name:
            return error('Invalid character "%s"' % invalid_char)

    dbs = dashboards.OwnerDashboards(auth.logged_owner_id())
    if name in {db.dashboard_name for db in dbs.dashboards}:
        return error('A dashboard with this name is already created')
    new_db = dbs.insert_dashboard(name, {})
    html = get_template_attribute('m.html', 'db_tab')(new_db, False, True)
    return success(result=dict(html=html))
Beispiel #13
0
def add_report_name_entered():
    report_name = request.get_json()['report_name']

    check_access(lambda: auth.access_profile())

    report = Report.select_by_name(auth.logged_owner_id(), report_name)
    if not report:
        return error(message='Incomplete report name')
    latest_instance_id = report.fetch_latest_instance_id()
    if not latest_instance_id:
        return error()
    ri = report.fetch_single_instance(latest_instance_id)
    tags = report.fetch_tags_sample('', TAGS_SAMPLE_LIMIT)

    res = {}
    res['has_tags'] = bool(tags)
    res['tag_sample'] = get_template_attribute('m.html', 'tag_sample')(tags)
    res['html_newest_table'] = get_template_attribute('m.html', 'table_as_html_table')(ri.table)
    res['report_id'] = report.report_id
    res['latest_instance_id'] = latest_instance_id
    res['latest_instance_tags'] = ri.all_tags
    return success(result=res)