def test_update_endpoint(self):
     """
         Test whether the function returns the right values.
     """
     from flask_monitoringdashboard.database.endpoint import get_endpoint_by_name, update_endpoint
     with session_scope() as db_session:
         current_value = get_endpoint_by_name(db_session, NAME).monitor_level
         new_value = 1 if current_value != 1 else 2
         update_endpoint(db_session, NAME, new_value)
         self.assertEqual(get_endpoint_by_name(db_session, NAME).monitor_level, new_value)
Esempio n. 2
0
def get_multi_version_data(session, endpoints, versions):
    """
    :param session: session for the database
    :param endpoints: a list of all endpoints for which the data must be
        collected (represented by their name)
    :param versions: a list of versions
    :return: a 2d list of data
    """
    endpoints = [get_endpoint_by_name(session, name) for name in endpoints]
    requests = [
        count_requests_group(session, Request.version_requested == v)
        for v in versions
    ]

    total_hits = numpy.zeros(len(versions))
    hits = numpy.zeros((len(endpoints), len(versions)))

    for i, _ in enumerate(versions):
        total_hits[i] = max(1, sum([value for key, value in requests[i]]))

    for j, _ in enumerate(endpoints):
        for i, _ in enumerate(versions):
            hits[j][i] = get_value(requests[i],
                                   endpoints[j].id) * 100 / total_hits[i]
    return hits.tolist()
Esempio n. 3
0
def init_measurement():
    """
    This should be added to the list of functions that are executed before the first request.
    This function is used in the config-method in __init__ of this folder
    It adds wrappers to the endpoints for tracking their performance and last access times.
    """
    with session_scope() as session:
        for rule in get_rules():
            endpoint = get_endpoint_by_name(session, rule.endpoint)
            add_decorator(endpoint)
Esempio n. 4
0
def get_api_performance(db_session, endpoints):
    """
    :param db_session: session for the database
    :param endpoints: a list of endpoints, encoded by their name
    :return: for every endpoint in endpoints, a list with the performance
    """
    db_endpoints = [get_endpoint_by_name(db_session, end) for end in endpoints]
    data = get_endpoint_data_grouped(db_session, lambda x: simplify(x, 10))
    return [
        {'name': end.name, 'values': get_value(data, end.id, default=[])} for end in db_endpoints
    ]
 def test_get_endpoint(self):
     """
         Test wheter the function returns the right values.
     """
     from flask_monitoringdashboard.database.endpoint import get_endpoint_by_name
     from flask_monitoringdashboard import config
     with session_scope() as db_session:
         endpoint = get_endpoint_by_name(db_session, NAME)
     self.assertEqual(endpoint.name, NAME)
     self.assertEqual(endpoint.monitor_level, 1)
     self.assertEqual(endpoint.version_added, config.version)
Esempio n. 6
0
 def test_add_request(self):
     """
         Test whether the function returns the right values.
     """
     from flask_monitoringdashboard.database.request import add_request
     name2 = 'main2'
     execution_time = 1234
     self.assertNotEqual(
         NAME, name2, 'Both cannot be equal, otherwise the test will fail')
     with session_scope() as db_session:
         endpoint = get_endpoint_by_name(db_session, name2)
         self.assertEqual(count_requests(db_session, endpoint.id), 0)
         add_request(db_session, execution_time, endpoint.id, ip=IP)
         self.assertEqual(count_requests(db_session, endpoint.id), 1)
def rules():
    """
    Renders a table with all rules from the user_app. The fmd_dashboard rules are excluded
    In case of the POST request, the data from the form is validated and processed, such that the required rules are
    monitored
    :return:
    """
    if request.method == 'POST':
        with session_scope() as db_session:
            endpoint_name = request.form['name']
            value = int(request.form['value'])
            update_endpoint(db_session, endpoint_name, value=value)

            # Remove wrapper
            original = getattr(user_app.view_functions[endpoint_name], 'original', None)
            if original:
                user_app.view_functions[endpoint_name] = original

        with session_scope() as db_session:
            add_decorator(get_endpoint_by_name(db_session, endpoint_name))

        return 'OK'

    with session_scope() as db_session:
        last_accessed = get_last_requested(db_session)
        all_rules = []
        for rule in get_rules():
            db_rule = get_endpoint_by_name(db_session, rule.endpoint)
            all_rules.append({
                'color': get_color(rule.endpoint),
                'rule': rule.rule,
                'endpoint': rule.endpoint,
                'methods': rule.methods,
                'last_accessed': get_value(last_accessed, rule.endpoint, default=None),
                'form': get_monitor_form(rule.endpoint, db_rule.monitor_level)
            })
    return render_template('fmd_rules.html', rules=all_rules, information=get_rules_info())
Esempio n. 8
0
def set_endpoint_rule(session, endpoint_name, monitor_level):
    """
    :param session: session for the database
    :param endpoint_name: name of the endpoint
    :param monitor_level: integer, representing the monitoring-level
    """
    update_endpoint(session, endpoint_name, value=monitor_level)

    # Remove wrapper
    original = getattr(config.app.view_functions[endpoint_name], 'original', None)
    if original:
        config.app.view_functions[endpoint_name] = original
    session.commit()

    add_decorator(get_endpoint_by_name(session, endpoint_name))
Esempio n. 9
0
def test_update_endpoint(session, endpoint):
    update_endpoint(session, endpoint.name, 2)
    assert get_endpoint_by_name(session, endpoint.name).monitor_level == 2
Esempio n. 10
0
def test_get_endpoint(session, endpoint):
    endpoint2 = get_endpoint_by_name(session, endpoint.name)
    assert endpoint.name == endpoint2.name
    assert endpoint.id == endpoint2.id