Commit 3d22bb9c authored by Leonardo Menezes's avatar Leonardo Menezes
Browse files

only notify cluster changes if cluster name hasn't changed

parent 5c8a90dc
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
package controllers

import models.ElasticServer
import models.commons.{Indices, Nodes}
import play.api.libs.json.Json

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

class ClusterChangesController extends BaseController {

  def get = process { (request, client) =>
    Future.sequence(Seq(
      client.getIndices(ElasticServer(request.host, request.authentication)),
      client.getNodes(ElasticServer(request.host, request.authentication)),
      client.main(ElasticServer(request.host, request.authentication))
    )).map { responses =>
      Json.obj(
        "indices" -> Indices(responses(0).body),
        "nodes" -> Nodes(responses(1).body),
        "cluster_name" -> (responses(2).body \ "cluster_name").as[String]
      )
    }.map(Ok(_))
  }
}
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ POST /analysis/fields @controllers.AnalysisContr
POST        /analysis/analyze/analyzer                @controllers.AnalysisController.analyzeByAnalyzer
POST        /analysis/analyze/field                   @controllers.AnalysisController.analyzeByField

# Cluster Changes Controller
POST        /cluster_changes                          @controllers.ClusterChangesController.get

# Commons
POST        /commons/indices                          @controllers.CommonsController.indices
POST        /commons/nodes                            @controllers.CommonsController.nodes
+45 −35
Original line number Diff line number Diff line
@@ -1660,39 +1660,48 @@ angular.module('cerebro').factory('ClusterChangesService', [
  '$rootScope', 'AlertService', 'RefreshService', 'DataService',
  function($rootScope, AlertService, RefreshService, DataService) {

    var indices;
    var nodes;
    var current = {
      indices: undefined,
      noeds: undefined,
      clusterName: undefined
    };

    var process = function() {
      var successIndices = function(currentIndices) {
        if (indices) {
          var created = difference(currentIndices, indices);
          var deleted = difference(indices, currentIndices);
    var processNodeChanges = function(nodes) {
      var joined = difference(nodes, current.nodes);
      var left = difference(current.nodes, nodes);
      if (joined.length > 0) {
        info(joined, ' nodes joined the cluster');
      }
      if (left.length > 0) {
        warn(left, ' nodes left the cluster');
      }
      current.nodes = nodes;
    };

    var processIndicesChanges = function(indices) {
      var created = difference(indices, current.indices);
      var deleted = difference(current.indices, indices);
      if (created.length > 0) {
        info(created, ' indices created');
      }
      if (deleted.length > 0) {
        warn(deleted, ' indices deleted');
      }
        }
        indices = currentIndices;
      current.indices = indices;
    };
      DataService.getIndices(successIndices, angular.noop);

      var successNodes = function(currentNodes) {
        if (nodes) {
          var joined = difference(currentNodes, nodes);
          var left = difference(nodes, currentNodes);
          if (joined.length > 0) {
            info(joined, ' nodes joined the cluster');
          }
          if (left.length > 0) {
            warn(left, ' nodes left the cluster');
          }
    var process = function() {
      var success = function(data) {
        if (current.clusterName === data.cluster_name) {
          processNodeChanges(data.nodes);
          processIndicesChanges(data.indices);
        } else {
          current.clusterName = data.cluster_name;
          current.indices = data.indices;
          current.nodes = data.nodes;
        }
        nodes = currentNodes;
      };
      DataService.getNodes(successNodes, angular.noop);
      DataService.clusterChanges(success, angular.noop);
    };

    var difference = function(set1, set2) {
@@ -1710,12 +1719,8 @@ angular.module('cerebro').factory('ClusterChangesService', [
    };

    $rootScope.$watch(
      function() {
        return RefreshService.lastUpdate();
      },
      function() {
        process();
      },
      function() { return RefreshService.lastUpdate(); },
      function() { process(); },
      true
    );

@@ -1874,6 +1879,11 @@ angular.module('cerebro').factory('DataService', ['$rootScope', '$timeout',
      request('/aliases/update_aliases', {changes: changes}, success, error);
    };

    // ---------- Cluster State Changes ----------
    this.clusterChanges = function(success, error) {
      request('/cluster_changes', {}, success, error);
    };

    // ---------- Connect ----------
    this.getHosts = function(success, error) {
      var config = {
+40 −35
Original line number Diff line number Diff line
@@ -2,39 +2,48 @@ angular.module('cerebro').factory('ClusterChangesService', [
  '$rootScope', 'AlertService', 'RefreshService', 'DataService',
  function($rootScope, AlertService, RefreshService, DataService) {

    var indices;
    var nodes;
    var current = {
      indices: undefined,
      noeds: undefined,
      clusterName: undefined
    };

    var process = function() {
      var successIndices = function(currentIndices) {
        if (indices) {
          var created = difference(currentIndices, indices);
          var deleted = difference(indices, currentIndices);
    var processNodeChanges = function(nodes) {
      var joined = difference(nodes, current.nodes);
      var left = difference(current.nodes, nodes);
      if (joined.length > 0) {
        info(joined, ' nodes joined the cluster');
      }
      if (left.length > 0) {
        warn(left, ' nodes left the cluster');
      }
      current.nodes = nodes;
    };

    var processIndicesChanges = function(indices) {
      var created = difference(indices, current.indices);
      var deleted = difference(current.indices, indices);
      if (created.length > 0) {
        info(created, ' indices created');
      }
      if (deleted.length > 0) {
        warn(deleted, ' indices deleted');
      }
        }
        indices = currentIndices;
      current.indices = indices;
    };
      DataService.getIndices(successIndices, angular.noop);

      var successNodes = function(currentNodes) {
        if (nodes) {
          var joined = difference(currentNodes, nodes);
          var left = difference(nodes, currentNodes);
          if (joined.length > 0) {
            info(joined, ' nodes joined the cluster');
          }
          if (left.length > 0) {
            warn(left, ' nodes left the cluster');
          }
    var process = function() {
      var success = function(data) {
        if (current.clusterName === data.cluster_name) {
          processNodeChanges(data.nodes);
          processIndicesChanges(data.indices);
        } else {
          current.clusterName = data.cluster_name;
          current.indices = data.indices;
          current.nodes = data.nodes;
        }
        nodes = currentNodes;
      };
      DataService.getNodes(successNodes, angular.noop);
      DataService.clusterChanges(success, angular.noop);
    };

    var difference = function(set1, set2) {
@@ -52,12 +61,8 @@ angular.module('cerebro').factory('ClusterChangesService', [
    };

    $rootScope.$watch(
      function() {
        return RefreshService.lastUpdate();
      },
      function() {
        process();
      },
      function() { return RefreshService.lastUpdate(); },
      function() { process(); },
      true
    );

+5 −0
Original line number Diff line number Diff line
@@ -147,6 +147,11 @@ angular.module('cerebro').factory('DataService', ['$rootScope', '$timeout',
      request('/aliases/update_aliases', {changes: changes}, success, error);
    };

    // ---------- Cluster State Changes ----------
    this.clusterChanges = function(success, error) {
      request('/cluster_changes', {}, success, error);
    };

    // ---------- Connect ----------
    this.getHosts = function(success, error) {
      var config = {
Loading