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)
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()
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)
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)
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())
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))
def test_update_endpoint(session, endpoint): update_endpoint(session, endpoint.name, 2) assert get_endpoint_by_name(session, endpoint.name).monitor_level == 2
def test_get_endpoint(session, endpoint): endpoint2 = get_endpoint_by_name(session, endpoint.name) assert endpoint.name == endpoint2.name assert endpoint.id == endpoint2.id