adding additional status code metrics (#555)

This commit is contained in:
kevgliss 2016-12-02 13:02:59 -08:00 committed by GitHub
parent 7f823a04cd
commit 834814f867
3 changed files with 40 additions and 9 deletions

View File

@ -76,13 +76,16 @@ def configure_hook(app):
def after(response): def after(response):
return response return response
@app.after_request
def log_status(response):
metrics.send('status_code_{}'.format(response.status_code), 'counter', 1)
return response
@app.errorhandler(Exception) @app.errorhandler(Exception)
def handle_error(e): def handle_error(e):
code = 500 code = 500
if isinstance(e, HTTPException): if isinstance(e, HTTPException):
code = e.code code = e.code
metrics.send('{}_status_code'.format(code), 'counter', 1)
app.logger.exception(e) app.logger.exception(e)
return jsonify(error=str(e)), code return jsonify(error=str(e)), code

View File

@ -30,6 +30,18 @@ from lemur.plugins import lemur_digicert as digicert
from lemur.common.utils import validate_conf from lemur.common.utils import validate_conf
def log_status_code(r, *args, **kwargs):
"""
Is a request hook that logs all status codes to the digicert api.
:param r:
:param args:
:param kwargs:
:return:
"""
metrics.send('digicert_status_code_{}'.format(r.status_code))
def signature_hash(signing_algorithm): def signature_hash(signing_algorithm):
"""Converts Lemur's signing algorithm into a format DigiCert understands. """Converts Lemur's signing algorithm into a format DigiCert understands.
@ -160,8 +172,6 @@ def handle_response(response):
:param response: :param response:
:return: :return:
""" """
metrics.send('digicert_status_code_{0}'.format(response.status_code), 'counter', 1)
if response.status_code > 399: if response.status_code > 399:
raise Exception(response.json()['message']) raise Exception(response.json()['message'])
@ -174,8 +184,6 @@ def handle_cis_response(response):
:param response: :param response:
:return: :return:
""" """
metrics.send('digicert_cis_status_code_{0}'.format(response.status_code), 'counter', 1)
if response.status_code > 399: if response.status_code > 399:
raise Exception(response.json()['errors'][0]['message']) raise Exception(response.json()['errors'][0]['message'])
@ -188,7 +196,6 @@ def get_certificate_id(session, base_url, order_id):
order_url = "{0}/services/v2/order/certificate/{1}".format(base_url, order_id) order_url = "{0}/services/v2/order/certificate/{1}".format(base_url, order_id)
response_data = handle_response(session.get(order_url)) response_data = handle_response(session.get(order_url))
if response_data['status'] != 'issued': if response_data['status'] != 'issued':
metrics.send('digicert_retries', 'counter', 1)
raise Exception("Order not in issued state.") raise Exception("Order not in issued state.")
return response_data['certificate']['id'] return response_data['certificate']['id']
@ -204,7 +211,6 @@ def get_cis_certificate(session, base_url, order_id):
response = session.get(certificate_url) response = session.get(certificate_url)
if response.status_code == 404: if response.status_code == 404:
metrics.send('digicert_retries', 'counter', 1)
raise Exception("Order not in issued state.") raise Exception("Order not in issued state.")
return response.content return response.content
@ -239,6 +245,8 @@ class DigiCertSourcePlugin(SourcePlugin):
} }
) )
self.session.hooks = dict(response=log_status_code)
super(DigiCertSourcePlugin, self).__init__(*args, **kwargs) super(DigiCertSourcePlugin, self).__init__(*args, **kwargs)
def get_certificates(self): def get_certificates(self):
@ -276,6 +284,8 @@ class DigiCertIssuerPlugin(IssuerPlugin):
} }
) )
self.session.hooks = dict(response=log_status_code)
super(DigiCertIssuerPlugin, self).__init__(*args, **kwargs) super(DigiCertIssuerPlugin, self).__init__(*args, **kwargs)
def create_certificate(self, csr, issuer_options): def create_certificate(self, csr, issuer_options):
@ -349,6 +359,8 @@ class DigiCertCISIssuerPlugin(IssuerPlugin):
} }
) )
self.session.hooks = dict(response=log_status_code)
super(DigiCertCISIssuerPlugin, self).__init__(*args, **kwargs) super(DigiCertCISIssuerPlugin, self).__init__(*args, **kwargs)
def create_certificate(self, csr, issuer_options): def create_certificate(self, csr, issuer_options):

View File

@ -13,8 +13,11 @@ import xmltodict
from flask import current_app from flask import current_app
from lemur.plugins.bases import IssuerPlugin, SourcePlugin from lemur.extensions import metrics
from lemur.plugins import lemur_verisign as verisign from lemur.plugins import lemur_verisign as verisign
from lemur.plugins.bases import IssuerPlugin, SourcePlugin
from lemur.common.utils import get_psuedo_random_string from lemur.common.utils import get_psuedo_random_string
@ -61,6 +64,18 @@ VERISIGN_ERRORS = {
} }
def log_status_code(r, *args, **kwargs):
"""
Is a request hook that logs all status codes to the verisign api.
:param r:
:param args:
:param kwargs:
:return:
"""
metrics.send('symantec_status_code_{}'.format(r.status_code))
def process_options(options): def process_options(options):
""" """
Processes and maps the incoming issuer options to fields/options that Processes and maps the incoming issuer options to fields/options that
@ -141,6 +156,7 @@ class VerisignIssuerPlugin(IssuerPlugin):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.session = requests.Session() self.session = requests.Session()
self.session.cert = current_app.config.get('VERISIGN_PEM_PATH') self.session.cert = current_app.config.get('VERISIGN_PEM_PATH')
self.session.hooks = dict(response=log_status_code)
super(VerisignIssuerPlugin, self).__init__(*args, **kwargs) super(VerisignIssuerPlugin, self).__init__(*args, **kwargs)
def create_certificate(self, csr, issuer_options): def create_certificate(self, csr, issuer_options):