def create_notification_channel(channel_name="test_notification_channel", host="127.0.0.1", port="8789"): url = "http://" + str(host) + ":" + str(port) + "/grafana_callback" channel_details = json.dumps({ "name": channel_name, "type": "webhook", "isDefault": True, "settings": { "httpMethod": "POST", "uploadImage": "False", "url": url } }) config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): response = post("http://{}:{}/api/alert-notifications".format( config.grafana_host, config.grafana_port), headers=HEADERS, auth=config.credentials, data=channel_details) return response else: raise exceptions.ConnectionFailedException
def create_notification_channel(): url = "http://" + str(NS.node_context.fqdn) + \ ":" + str(PORT) + "/grafana_callback" channel_details = json.dumps({ "name": NOTIFICATION_CHANNEL, "type": "webhook", "isDefault": True, "settings": { "httpMethod": "POST", "uploadImage": "False", "url": url } }) config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): response = post("http://{}:{}/api/alert-notifications".format( config.grafana_host, config.grafana_port), headers=constants.HEADERS, auth=config.credentials, data=channel_details) return response else: raise exceptions.ConnectionFailedException
def get_alert(alert_id): config = NS.config.data if utils.port_open( config["grafana_port"], config["grafana_host"] ): try: resp = get("http://{0}:{1}/api/alerts/" "{2}".format(config["grafana_host"], config["grafana_port"], alert_id), auth=config["credentials"]) except(ConnectionError, RequestException) as ex: logger.log( "error", NS.publisher_id, { "message": 'Unable to fetch alert from grafana ' + 'rule id: %s' % alert_id } ) raise ex else: logger.log( "error", NS.publisher_id, { "message": 'grafana connection error' } ) raise exceptions.ConnectionFailedException return resp.json()
def get_alert(alert_id): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): resp = get("http://{0}:{1}/api/alerts/{2}".format( config["grafana_host"], config["grafana_port"], alert_id), auth=config["credentials"]) else: raise exceptions.ConnectionFailedException return resp
def delete_dashboard(dashboard_name): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): resp = delete("http://{}:{}/api/dashboards/db/{}".format( config.grafana_host, config.grafana_port, dashboard_name), auth=config.credentials) else: raise exceptions.ConnectionFailedException return resp.json()
def get_all_dashboards(): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): resp = get("http://{}:{}/api/search/".format(config.grafana_host, config.grafana_port), auth=config.credentials) else: raise exceptions.ConnectionFailedException return resp.json()
def get_dashboard(dashboard_name): config = NS.conf if utils.port_open(config.grafana_port, config.grafana_host): resp = get("http://{}:{}/api/dashboards/" "db/{}".format(config.grafana_host, config.grafana_port, dashboard_name), auth=config.credentials) else: raise exceptions.ConnectionFailedException return resp.json()
def get_data_source(): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): resp = get("http://{}:{}/api/datasources/id/{}".format( config.grafana_host, config.grafana_port, config.datasource_name), auth=config.credentials) else: raise exceptions.ConnectionFailedException return resp
def _post_dashboard(dashboard_json): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): upload_str = json.dumps(dashboard_json) resp = post("http://{}:{}/api/dashboards/" "db".format(config.grafana_host, config.grafana_port), headers=HEADERS, auth=config.credentials, data=upload_str) else: raise exceptions.ConnectionFailedException return resp
def _post_datasource(datasource_json): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): resp = post("http://{}:{}/api/datasources".format( config.grafana_host, config.grafana_port), headers=HEADERS, auth=config.credentials, data=datasource_json) else: raise exceptions.ConnectionFailedException return resp
def get_auth_keys(): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): response = get( "http://{}:{}/api/auth/keys".format( config.grafana_host, config.grafana_port ), auth=config.credentials ) try: return json.loads(response.content) except KeyError: return None
def create_api_token(key_name, role): config = maps.NamedDict(NS.config.data) request_body = {"name": key_name, "role": role} if utils.port_open(config.grafana_port, config.grafana_host): response = post("http://{}:{}/api/auth/" "keys".format(config.grafana_host, config.grafana_port), headers=HEADERS, auth=config.credentials, data=json.dumps(request_body)) try: return json.loads(response.content)["key"] except KeyError: return None
def get_org_id(org_name): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): resp = get("http://{}:{}/api/orgs/name/" "{}".format(config.grafana_host, config.grafana_port, org_name), auth=config.credentials) try: return resp.content except (KeyError, AttributeError): return None else: raise exceptions.ConnectionFailedException
def set_home_dashboard(dash_id): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): resp = put('http://{}:{}/api/org/' 'preferences'.format(config.grafana_host, config.grafana_port), headers=HEADERS, auth=config.credentials, data=json.dumps({ "name": "Main Org.", "theme": "light", "homeDashboardId": dash_id })) else: raise exceptions.ConnectionFailedException return resp
def main(): monitoring_integration.MonitoringIntegrationNS() TendrlNS() grafana_conn_count = 0 while grafana_conn_count < 10: if not utils.port_open(NS.config.data["grafana_port"], NS.config.data["grafana_host"]): grafana_conn_count = grafana_conn_count + 1 time.sleep(4) else: break if grafana_conn_count == 10: logger.log("error", NS.get("publisher_id", None), {'message': "Cannot connect to Grafana"}) return NS.type = "monitoring" NS.publisher_id = "monitoring_integration" if NS.config.data.get("with_internal_profiling", False): from tendrl.commons import profiler profiler.start() NS.monitoring.config.save() NS.monitoring.definitions.save() NS.sync_thread = sync.MonitoringIntegrationSdsSyncThread() monitoring_integration_manager = MonitoringIntegrationManager() monitoring_integration_manager.start() complete = threading.Event() NS.node_context = NS.node_context.load() current_tags = list(NS.node_context.tags) current_tags += ["tendrl/integration/monitoring"] NS.node_context.tags = list(set(current_tags)) NS.node_context.save() def shutdown(signum, frame): complete.set() NS.sync_thread.stop() def reload_config(signum, frame): NS.monitoring.ns.setup_common_objects() signal.signal(signal.SIGTERM, shutdown) signal.signal(signal.SIGINT, shutdown) signal.signal(signal.SIGHUP, reload_config) while not complete.is_set(): complete.wait(timeout=1)
def create_org(org_name): config = maps.NamedDict(NS.config.data) upload_str = {"name": org_name} if utils.port_open(config.grafana_port, config.grafana_host): response = post("http://{}:{}/api" "/orgs".format(config.grafana_host, config.grafana_port), headers=HEADERS, auth=config.credentials, data=json.dumps(upload_str)) try: return json.loads(response.content)["orgId"] except KeyError: return None else: raise exceptions.ConnectionFailedException
def update_datasource(datasource_id): try: config = maps.NamedDict(NS.config.data) datasource_json = form_datasource_json() datasource_str = json.dumps(datasource_json) if utils.port_open(config.grafana_port, config.grafana_host): response = put("http://{}:{}/api/datasources/{}".format( config.grafana_host, config.grafana_port, datasource_id), headers=constants.HEADERS, auth=config.credentials, data=datasource_str) else: raise exceptions.ConnectionFailedException return response except exceptions.ConnectionFailedException as ex: logger.log("error", NS.get("publisher_id", None), {'message': str(ex)}) raise ex
def switch_context(org_id): config = maps.NamedDict(NS.config.data) upload_str = '' if utils.port_open(config.grafana_port, config.grafana_host): response = post("http://{}:{}/api/user/using" "/{}".format(config.grafana_host, config.grafana_port, org_id), headers=HEADERS, auth=config.credentials, data=upload_str) try: if "changed" in json.loads(response.content)["message"]: return True else: return False except KeyError: return False else: raise exceptions.ConnectionFailedException
def _post_dashboard(dashboard_json, authorization_key=None): config = maps.NamedDict(NS.config.data) if utils.port_open(config.grafana_port, config.grafana_host): upload_str = json.dumps(dashboard_json) if authorization_key: new_header = HEADERS new_header["Authorization"] = "Bearer " + str(authorization_key) response = post("http://{}:{}/api/dashboards/" "db".format(config.grafana_host, config.grafana_port), headers=new_header, data=upload_str) else: response = post("http://{}:{}/api/dashboards/" "db".format(config.grafana_host, config.grafana_port), headers=HEADERS, auth=config.credentials, data=upload_str) return response else: raise exceptions.ConnectionFailedException