def perform_grafana_post_call(url, payload, server):
    import params

    response = None
    data = None
    userAndPass = b64encode('{0}:{1}'.format(server.user, server.password))
    Logger.debug('POST payload: %s' % payload)
    headers = {
        "Content-Type": "application/json",
        "Content-Length": len(payload),
        'Authorization': 'Basic %s' % userAndPass
    }
    grafana_https_enabled = server.protocol.lower() == 'https'

    ca_certs = None
    if grafana_https_enabled:
        ca_certs = params.ams_grafana_ca_cert

    for i in xrange(0, params.grafana_connect_attempts):
        try:
            Logger.info("Connecting (POST) to %s:%s%s" %
                        (server.host, server.port, url))
            conn = network.get_http_connection(
                server.host,
                int(server.port),
                grafana_https_enabled,
                ca_certs,
                ssl_version=Script.get_force_https_protocol_value())

            conn.request("POST", url, payload, headers)

            response = conn.getresponse()
            Logger.info("Http response: %s %s" %
                        (response.status, response.reason))
            if response.status == 401:  #Intermittent error thrown from Grafana
                if i < params.grafana_connect_attempts - 1:
                    Logger.info(
                        "Connection to Grafana failed. Next retry in %s seconds."
                        % (params.grafana_connect_retry_delay))
                    time.sleep(params.grafana_connect_retry_delay)
                    continue
            data = response.read()
            Logger.info("Http data: %s" % data)
            conn.close()
            break
        except (httplib.HTTPException, socket.error) as ex:
            if i < params.grafana_connect_attempts - 1:
                Logger.info(
                    "Connection to Grafana failed. Next retry in %s seconds." %
                    (params.grafana_connect_retry_delay))
                time.sleep(params.grafana_connect_retry_delay)
                continue
            else:
                raise Fail("Ambari Metrics Grafana update failed due to: %s" %
                           str(ex))
            pass

    return (response, data)
def perform_grafana_delete_call(url, server):
    import params

    grafana_https_enabled = server.protocol.lower() == 'https'
    response = None

    ca_certs = None
    if grafana_https_enabled:
        ca_certs = params.ams_grafana_ca_cert

    for i in xrange(0, params.grafana_connect_attempts):
        try:
            conn = network.get_http_connection(
                server.host,
                int(server.port),
                grafana_https_enabled,
                ca_certs,
                ssl_version=Script.get_force_https_protocol_value())

            userAndPass = b64encode('{0}:{1}'.format(server.user,
                                                     server.password))
            headers = {'Authorization': 'Basic %s' % userAndPass}

            Logger.info("Connecting (DELETE) to %s:%s%s" %
                        (server.host, server.port, url))

            conn.request("DELETE", url, headers=headers)
            response = conn.getresponse()
            Logger.info("Http response: %s %s" %
                        (response.status, response.reason))
            break
        except (httplib.HTTPException, socket.error) as ex:
            if i < params.grafana_connect_attempts - 1:
                Logger.info(
                    "Connection to Grafana failed. Next retry in %s seconds." %
                    (params.grafana_connect_retry_delay))
                time.sleep(params.grafana_connect_retry_delay)
                continue
            else:
                raise Fail("Ambari Metrics Grafana update failed due to: %s" %
                           str(ex))
            pass

    return response
Exemplo n.º 3
0
def perform_grafana_put_call(url, id, payload, server):
    response = None
    data = None
    userAndPass = b64encode('{0}:{1}'.format(server.user, server.password))
    headers = {
        "Content-Type": "application/json",
        'Authorization': 'Basic %s' % userAndPass
    }
    grafana_https_enabled = server.protocol.lower() == 'https'

    ca_certs = None
    if grafana_https_enabled:
        import params
        ca_certs = params.ams_grafana_ca_cert

    for i in xrange(0, GRAFANA_CONNECT_TRIES):
        try:
            conn = network.get_http_connection(
                server.host,
                int(server.port),
                grafana_https_enabled,
                ca_certs,
                ssl_version=Script.get_force_https_protocol_value())
            conn.request("PUT", url + "/" + str(id), payload, headers)
            response = conn.getresponse()
            data = response.read()
            Logger.info("Http data: %s" % data)
            conn.close()
            break
        except (httplib.HTTPException, socket.error) as ex:
            if i < GRAFANA_CONNECT_TRIES - 1:
                time.sleep(GRAFANA_CONNECT_TIMEOUT)
                Logger.info(
                    "Connection to Grafana failed. Next retry in %s seconds." %
                    (GRAFANA_CONNECT_TIMEOUT))
                continue
            else:
                raise Fail("Ambari Metrics Grafana update failed due to: %s" %
                           str(ex))
            pass

    return (response, data)