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
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
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()
Exemplo n.º 7
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 14
0
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
Exemplo n.º 15
0
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
Exemplo n.º 19
0
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