Source code for elastichq.service.ClusterService

"""
.. module:: ClusterService

.. moduleauthor:: Roy Russo <royrusso.gmail.com>
"""

import jmespath

from elastichq.globals import REQUEST_TIMEOUT
from .ConnectionService import ConnectionService
from .NodeService import NodeService


[docs]class ClusterService: """ cc """ def get_cluster_health(self, cluster_name): connection = ConnectionService().get_connection(cluster_name) return connection.cluster.health(request_timeout=REQUEST_TIMEOUT) def get_cluster_state(self, cluster_name, metric=None, indices=None): connection = ConnectionService().get_connection(cluster_name) return connection.cluster.state(metric=metric, index=indices, request_timeout=REQUEST_TIMEOUT) def get_cluster_status(self, cluster_name): connection = ConnectionService().get_connection(cluster_name) return connection.info(request_timeout=REQUEST_TIMEOUT) def get_cluster_stats(self, cluster_name): connection = ConnectionService().get_connection(cluster_name) return connection.cluster.stats(request_timeout=REQUEST_TIMEOUT) def get_cluster_pending_tasks(self, cluster_name): connection = ConnectionService().get_connection(cluster_name) return connection.cluster.pending_tasks(request_timeout=REQUEST_TIMEOUT) def get_cluster_settings(self, cluster_name): connection = ConnectionService().get_connection(cluster_name) return connection.cluster.get_settings(include_defaults=True, request_timeout=REQUEST_TIMEOUT) def put_cluster_settings(self, settings, cluster_name): connection = ConnectionService().get_connection(cluster_name) return connection.cluster.put_settings(body=settings, request_timeout=REQUEST_TIMEOUT) def get_clusters(self, create_if_missing=True): clusters = ConnectionService().get_connections(create_if_missing=create_if_missing) for cluster in clusters: if cluster.cluster_connected is True: cluster.cluster_health = self.get_cluster_health(cluster_name=cluster.cluster_name) return clusters
[docs] def get_cluster_summary(self, cluster_name): """ Returns a high-level view of the cluster using several existing endpoints from ES. :param cluster_name: :return: """ connection = ConnectionService().get_connection(cluster_name) summary = connection.cluster.health(request_timeout=REQUEST_TIMEOUT) summary['version'] = connection.version stats = connection.cluster.stats(request_timeout=REQUEST_TIMEOUT) summary['indices_size_in_bytes'] = jmespath.search("indices.store.size_in_bytes", stats) summary['indices_count'] = jmespath.search("indices.count", stats) summary['number_of_documents'] = jmespath.search("indices.docs.count", stats) nodes = NodeService().get_node_summary(cluster_name) summary['nodes'] = nodes return summary
def get_cluster_tasks(self, cluster_name): connection = ConnectionService().get_connection(cluster_name) return connection.cluster.pending_tasks(request_timeout=REQUEST_TIMEOUT)