89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
import pytest
|
|
|
|
from prometheus_client.parser import text_string_to_metric_families
|
|
from awx.main import models
|
|
from awx.main.analytics.metrics import metrics
|
|
from awx.api.versioning import reverse
|
|
from awx.main.models.rbac import Role
|
|
|
|
EXPECTED_VALUES = {
|
|
'awx_system_info':1.0,
|
|
'awx_organizations_total':1.0,
|
|
'awx_users_total':1.0,
|
|
'awx_teams_total':1.0,
|
|
'awx_inventories_total':1.0,
|
|
'awx_projects_total':1.0,
|
|
'awx_job_templates_total':1.0,
|
|
'awx_workflow_job_templates_total':1.0,
|
|
'awx_hosts_total':1.0,
|
|
'awx_hosts_total':1.0,
|
|
'awx_schedules_total':1.0,
|
|
'awx_inventory_scripts_total':1.0,
|
|
'awx_sessions_total':0.0,
|
|
'awx_sessions_total':0.0,
|
|
'awx_sessions_total':0.0,
|
|
'awx_custom_virtualenvs_total':0.0,
|
|
'awx_running_jobs_total':0.0,
|
|
'awx_instance_capacity':100.0,
|
|
'awx_instance_consumed_capacity':0.0,
|
|
'awx_instance_remaining_capacity':100.0,
|
|
'awx_instance_cpu':0.0,
|
|
'awx_instance_memory':0.0,
|
|
'awx_instance_info':1.0,
|
|
'awx_license_instance_total':0,
|
|
'awx_license_instance_free':0,
|
|
'awx_pending_jobs_total':0,
|
|
}
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_metrics_counts(organization_factory, job_template_factory, workflow_job_template_factory):
|
|
objs = organization_factory('org', superusers=['admin'])
|
|
jt = job_template_factory(
|
|
'test', organization=objs.organization,
|
|
inventory='test_inv', project='test_project',
|
|
credential='test_cred'
|
|
)
|
|
workflow_job_template_factory('test')
|
|
models.Team(organization=objs.organization).save()
|
|
models.Host(inventory=jt.inventory).save()
|
|
models.Schedule(
|
|
rrule='DTSTART;TZID=America/New_York:20300504T150000',
|
|
unified_job_template=jt.job_template
|
|
).save()
|
|
models.CustomInventoryScript(organization=objs.organization).save()
|
|
|
|
output = metrics()
|
|
gauges = text_string_to_metric_families(output.decode('UTF-8'))
|
|
|
|
for gauge in gauges:
|
|
for sample in gauge.samples:
|
|
# name, label, value, timestamp, exemplar
|
|
name, _, value, _, _ = sample
|
|
assert EXPECTED_VALUES[name] == value
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_metrics_permissions(get, admin, org_admin, alice, bob, organization):
|
|
assert get(reverse('api:metrics_view'), user=admin).status_code == 200
|
|
assert get(reverse('api:metrics_view'), user=org_admin).status_code == 403
|
|
assert get(reverse('api:metrics_view'), user=alice).status_code == 403
|
|
assert get(reverse('api:metrics_view'), user=bob).status_code == 403
|
|
organization.auditor_role.members.add(bob)
|
|
assert get(reverse('api:metrics_view'), user=bob).status_code == 403
|
|
|
|
Role.singleton('system_auditor').members.add(bob)
|
|
bob.is_system_auditor = True
|
|
assert get(reverse('api:metrics_view'), user=bob).status_code == 200
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_metrics_http_methods(get, post, patch, put, options, admin):
|
|
assert get(reverse('api:metrics_view'), user=admin).status_code == 200
|
|
assert put(reverse('api:metrics_view'), user=admin).status_code == 405
|
|
assert patch(reverse('api:metrics_view'), user=admin).status_code == 405
|
|
assert post(reverse('api:metrics_view'), user=admin).status_code == 405
|
|
assert options(reverse('api:metrics_view'), user=admin).status_code == 200
|
|
|
|
|