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
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)