Merge pull request #746 from alphagov/record-user-agent

Statsd counter for user agents.
This commit is contained in:
minglis
2016-11-30 12:51:30 +00:00
committed by GitHub
2 changed files with 30 additions and 0 deletions

View File

@@ -118,12 +118,17 @@ def init_app(app):
url_for('status.show_delivery_status'),
url_for('spec.get_spec')
]
if request.path not in no_auth_req:
from app.authentication import auth
error = auth.requires_auth()
if error:
return error
@app.before_request
def record_user_agent():
statsd_client.incr("user-agent.{}".format(process_user_agent(request.headers.get('User-Agent', None))))
@app.before_request
def record_request_details():
g.start = monotonic()
@@ -151,3 +156,15 @@ def init_app(app):
def create_uuid():
return str(uuid.uuid4())
def process_user_agent(user_agent_string):
if user_agent_string and user_agent_string.lower().startswith("notify"):
components = user_agent_string.split("/")
client_name = components[0].lower()
client_version = components[1].replace(".", "-")
return "{}.{}".format(client_name, client_version)
elif user_agent_string and not user_agent_string.lower().startswith("notify"):
return "non-notify-user-agent"
else:
return "unknown"

View File

@@ -0,0 +1,13 @@
from app import process_user_agent
def test_can_process_notify_api_user_agent():
assert "notify-api-python-client.3-0-0" == process_user_agent("NOTIFY-API-PYTHON-CLIENT/3.0.0")
def test_can_handle_non_notify_api_user_agent():
assert "non-notify-user-agent" == process_user_agent("Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405") # noqa
def test_handles_null_user_agent():
assert "unknown" == process_user_agent(None)