Loading app/models/overview/ClusterOverview.scala +14 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ object ClusterOverview { clusterSettings: JsValue, aliases: JsValue, clusterHealth: JsValue, nodesInfo: JsValue, main: JsValue): JsValue = { val indices = Indices(clusterState, indicesStats, aliases) val indices = buildIndices(clusterState, indicesStats, aliases) val masterNodeId = (clusterState \ "master_node").as[String] Loading Loading @@ -47,4 +47,17 @@ object ClusterOverview { }.toSeq ) def buildIndices(clusterState: JsValue, indicesStats: JsValue, aliases: JsValue): Seq[JsValue] = { val routingTable = (clusterState \ "routing_table" \ "indices").as[JsObject] val openIndices = routingTable.value.map { case (index, shards) => val indexStats = (indicesStats \ "indices" \ index).asOpt[JsObject].getOrElse(Json.obj()) val indexAliases = (aliases \ index \ "aliases").asOpt[JsObject].getOrElse(Json.obj()) // 1.4 < does not return aliases obj Index(index, indexStats, shards, indexAliases) }.toSeq val closedIndices = ClosedIndices(clusterState) openIndices ++ closedIndices } } app/models/overview/Index.scala 0 → 100644 +43 −0 Original line number Diff line number Diff line package models.overview import play.api.libs.json._ object Index { def apply(name: String, stats: JsValue, shards: JsValue, aliases: JsObject): JsValue = { val shardsAllocation = (shards \ "shards").as[JsObject].values.flatMap { case JsArray(shards) => shards.map { shard => (shard \ "node").asOpt[String].getOrElse("unassigned") -> shard } case _ => Nil }.groupBy(_._1).mapValues { shards => JsArray(shards.map(_._2).toSeq) }.toSeq val numShards = (shards \ "shards").as[JsObject].keys.size val numReplicas = (shards \ "shards" \ "0").as[JsArray].value.size - 1 val special = name.startsWith(".") JsObject(Seq( "name" -> JsString(name), "closed" -> JsBoolean(false), "special" -> JsBoolean(special), "unhealthy" -> JsBoolean(unhealthyIndex(shardsAllocation)), "doc_count" -> (stats \ "primaries" \ "docs" \ "count").asOpt[JsNumber].getOrElse(JsNumber(0)), "deleted_docs" -> (stats \ "primaries" \ "docs" \ "deleted").asOpt[JsNumber].getOrElse(JsNumber(0)), "size_in_bytes" -> (stats \ "primaries" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "total_size_in_bytes" -> (stats \ "total" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "aliases" -> JsArray(aliases.keys.map(JsString(_)).toSeq), // 1.4 < does not return aliases obj "num_shards" -> JsNumber(numShards), "num_replicas" -> JsNumber(numReplicas), "shards" -> JsObject(shardsAllocation) )) } private def unhealthyIndex(shardAllocation: Seq[(String, JsArray)]): Boolean = shardAllocation.exists { case ("unassigned", _) => true case (_, JsArray(shards)) => shards.exists(!_.\("state").as[String].equals("STARTED")) } } app/models/overview/Indices.scaladeleted 100644 → 0 +0 −42 Original line number Diff line number Diff line package models.overview import play.api.libs.json._ object Indices { def apply(clusterState: JsValue, indicesStats: JsValue, aliases: JsValue) = { val routingTable = (clusterState \ "routing_table" \ "indices").as[JsObject] val openIndices = routingTable.value.map { case (index, shards) => val stats = (indicesStats \ "indices" \ index).asOpt[JsObject].getOrElse(Json.obj()) val indexShards = (shards \ "shards").as[JsObject].values.flatMap { case shards => shards.as[JsArray].value.map { instance => (instance \ "node").asOpt[String].getOrElse("unassigned") -> instance } }.groupBy(_._1).mapValues { shards => JsArray(shards.map(_._2).toSeq) }.toSeq val numShards = (shards \ "shards").as[JsObject].keys.size val numReplicas = (shards \ "shards" \ "0").as[JsArray].value.size - 1 val unhealthy = indexShards.find(_._1.equals("unassigned")).isDefined val special = index.startsWith(".") JsObject(Seq( "name" -> JsString(index), "closed" -> JsBoolean(false), "special" -> JsBoolean(special), "unhealthy" -> JsBoolean(unhealthy), "doc_count" -> (stats \ "primaries" \ "docs" \ "count").asOpt[JsNumber].getOrElse(JsNumber(0)), "deleted_docs" -> (stats \ "primaries" \ "docs" \ "deleted").asOpt[JsNumber].getOrElse(JsNumber(0)), "size_in_bytes" -> (stats \ "primaries" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "total_size_in_bytes" -> (stats \ "total" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "aliases" -> JsArray((aliases \ index \ "aliases").asOpt[JsObject].getOrElse(Json.obj()).keys.map(JsString(_)).toSeq), // 1.4 < does not return aliases obj "num_shards" -> JsNumber(numShards), "num_replicas" -> JsNumber(numReplicas), "shards" -> JsObject(indexShards) )) }.toSeq openIndices ++ ClosedIndices(clusterState) } } public/overview.html +1 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ <i class="fa fa-spinner fa-spin"> </i> {{initializing_shards}} initializing shards </div> <div> <span class="normal-action" ng-show="indices_filter.healthy" ng-click="indices_filter.healthy = false"><i><small>show only unhealthy indices</small></i></span> <span class="normal-action" ng-show="indices_filter.healthy" ng-click="indices_filter.healthy = false"><i><small>show only affected indices</small></i></span> <span class="normal-action" ng-hide="indices_filter.healthy" ng-click="indices_filter.healthy = true"><i><small>show all indices</small></i></span> </div> </td> Loading Loading
app/models/overview/ClusterOverview.scala +14 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ object ClusterOverview { clusterSettings: JsValue, aliases: JsValue, clusterHealth: JsValue, nodesInfo: JsValue, main: JsValue): JsValue = { val indices = Indices(clusterState, indicesStats, aliases) val indices = buildIndices(clusterState, indicesStats, aliases) val masterNodeId = (clusterState \ "master_node").as[String] Loading Loading @@ -47,4 +47,17 @@ object ClusterOverview { }.toSeq ) def buildIndices(clusterState: JsValue, indicesStats: JsValue, aliases: JsValue): Seq[JsValue] = { val routingTable = (clusterState \ "routing_table" \ "indices").as[JsObject] val openIndices = routingTable.value.map { case (index, shards) => val indexStats = (indicesStats \ "indices" \ index).asOpt[JsObject].getOrElse(Json.obj()) val indexAliases = (aliases \ index \ "aliases").asOpt[JsObject].getOrElse(Json.obj()) // 1.4 < does not return aliases obj Index(index, indexStats, shards, indexAliases) }.toSeq val closedIndices = ClosedIndices(clusterState) openIndices ++ closedIndices } }
app/models/overview/Index.scala 0 → 100644 +43 −0 Original line number Diff line number Diff line package models.overview import play.api.libs.json._ object Index { def apply(name: String, stats: JsValue, shards: JsValue, aliases: JsObject): JsValue = { val shardsAllocation = (shards \ "shards").as[JsObject].values.flatMap { case JsArray(shards) => shards.map { shard => (shard \ "node").asOpt[String].getOrElse("unassigned") -> shard } case _ => Nil }.groupBy(_._1).mapValues { shards => JsArray(shards.map(_._2).toSeq) }.toSeq val numShards = (shards \ "shards").as[JsObject].keys.size val numReplicas = (shards \ "shards" \ "0").as[JsArray].value.size - 1 val special = name.startsWith(".") JsObject(Seq( "name" -> JsString(name), "closed" -> JsBoolean(false), "special" -> JsBoolean(special), "unhealthy" -> JsBoolean(unhealthyIndex(shardsAllocation)), "doc_count" -> (stats \ "primaries" \ "docs" \ "count").asOpt[JsNumber].getOrElse(JsNumber(0)), "deleted_docs" -> (stats \ "primaries" \ "docs" \ "deleted").asOpt[JsNumber].getOrElse(JsNumber(0)), "size_in_bytes" -> (stats \ "primaries" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "total_size_in_bytes" -> (stats \ "total" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "aliases" -> JsArray(aliases.keys.map(JsString(_)).toSeq), // 1.4 < does not return aliases obj "num_shards" -> JsNumber(numShards), "num_replicas" -> JsNumber(numReplicas), "shards" -> JsObject(shardsAllocation) )) } private def unhealthyIndex(shardAllocation: Seq[(String, JsArray)]): Boolean = shardAllocation.exists { case ("unassigned", _) => true case (_, JsArray(shards)) => shards.exists(!_.\("state").as[String].equals("STARTED")) } }
app/models/overview/Indices.scaladeleted 100644 → 0 +0 −42 Original line number Diff line number Diff line package models.overview import play.api.libs.json._ object Indices { def apply(clusterState: JsValue, indicesStats: JsValue, aliases: JsValue) = { val routingTable = (clusterState \ "routing_table" \ "indices").as[JsObject] val openIndices = routingTable.value.map { case (index, shards) => val stats = (indicesStats \ "indices" \ index).asOpt[JsObject].getOrElse(Json.obj()) val indexShards = (shards \ "shards").as[JsObject].values.flatMap { case shards => shards.as[JsArray].value.map { instance => (instance \ "node").asOpt[String].getOrElse("unassigned") -> instance } }.groupBy(_._1).mapValues { shards => JsArray(shards.map(_._2).toSeq) }.toSeq val numShards = (shards \ "shards").as[JsObject].keys.size val numReplicas = (shards \ "shards" \ "0").as[JsArray].value.size - 1 val unhealthy = indexShards.find(_._1.equals("unassigned")).isDefined val special = index.startsWith(".") JsObject(Seq( "name" -> JsString(index), "closed" -> JsBoolean(false), "special" -> JsBoolean(special), "unhealthy" -> JsBoolean(unhealthy), "doc_count" -> (stats \ "primaries" \ "docs" \ "count").asOpt[JsNumber].getOrElse(JsNumber(0)), "deleted_docs" -> (stats \ "primaries" \ "docs" \ "deleted").asOpt[JsNumber].getOrElse(JsNumber(0)), "size_in_bytes" -> (stats \ "primaries" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "total_size_in_bytes" -> (stats \ "total" \ "store" \ "size_in_bytes").asOpt[JsNumber].getOrElse(JsNumber(0)), "aliases" -> JsArray((aliases \ index \ "aliases").asOpt[JsObject].getOrElse(Json.obj()).keys.map(JsString(_)).toSeq), // 1.4 < does not return aliases obj "num_shards" -> JsNumber(numShards), "num_replicas" -> JsNumber(numReplicas), "shards" -> JsObject(indexShards) )) }.toSeq openIndices ++ ClosedIndices(clusterState) } }
public/overview.html +1 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,7 @@ <i class="fa fa-spinner fa-spin"> </i> {{initializing_shards}} initializing shards </div> <div> <span class="normal-action" ng-show="indices_filter.healthy" ng-click="indices_filter.healthy = false"><i><small>show only unhealthy indices</small></i></span> <span class="normal-action" ng-show="indices_filter.healthy" ng-click="indices_filter.healthy = false"><i><small>show only affected indices</small></i></span> <span class="normal-action" ng-hide="indices_filter.healthy" ng-click="indices_filter.healthy = true"><i><small>show all indices</small></i></span> </div> </td> Loading