diff --git a/app/models/commons/NodeRoles.scala b/app/models/commons/NodeRoles.scala index 11619330524709fb6cdaf438eae0256d6271442d..9cd27a38a2c0d0be20a38cd25a2de8f46d2f57d8 100644 --- a/app/models/commons/NodeRoles.scala +++ b/app/models/commons/NodeRoles.scala @@ -6,6 +6,19 @@ case class NodeRoles(master: Boolean, data: Boolean, ingest: Boolean) { def coordinating: Boolean = !master && !data && !ingest + def toEsString = { + val builder = StringBuilder.newBuilder + if (master) + builder.append("m") + if (data) + builder.append("d") + if (ingest) + builder.append("i") + if (builder.isEmpty) + builder.append("-") + builder.toString() + } + } object NodeRoles { diff --git a/app/models/nodes/Node.scala b/app/models/nodes/Node.scala index 58270d424de0ca699912405868d3d0bd9418ed64..ce734444910dc2a0883beb17c81cb57525781b9f 100644 --- a/app/models/nodes/Node.scala +++ b/app/models/nodes/Node.scala @@ -7,6 +7,7 @@ object Node { def apply(id: String, currentMaster: Boolean, info: JsValue, stats: JsValue): JsValue = { val jvmVersion = (info \ "jvm" \ "version").asOpt[JsString].getOrElse(JsNull) + val nodeRoles = NodeRoles(info) Json.obj( "id" -> JsString(id), @@ -17,12 +18,12 @@ object Node { "cpu" -> cpu(stats), "uptime" -> (stats \ "jvm" \ "uptime_in_millis").as[JsValue], "jvm" -> jvmVersion, - "version" -> (info \ "version").as[JsValue] - ) ++ roles(info) + "version" -> (info \ "version").as[JsValue], + "node.role" -> JsString(nodeRoles.toEsString) + ) ++ roles(nodeRoles) } - private def roles(info: JsValue): JsObject = { - val roles = NodeRoles(info) + private def roles(roles: NodeRoles): JsObject = { Json.obj( "master" -> JsBoolean(roles.master), "coordinating" -> JsBoolean(roles.coordinating), diff --git a/test/models/nodes/NodeSpec.scala b/test/models/nodes/NodeSpec.scala index 9ca6c5936a44e3820aefe4a970c1362516e5dde1..a79410d3e620f9e68c3bf8c96ede0fe998aff129 100644 --- a/test/models/nodes/NodeSpec.scala +++ b/test/models/nodes/NodeSpec.scala @@ -41,7 +41,8 @@ object NodeSpec extends Specification { | "master": true, | "name": "-qkZcMt", | "uptime": 109228, - | "version": "5.1.1" + | "version": "5.1.1", + | "node.role":"mdi" |} """.stripMargin ) @@ -77,7 +78,8 @@ object NodeSpec extends Specification { | "master": true, | "name": "007ywNv", | "uptime": 492790575, - | "version": "5.1.1" + | "version": "5.1.1", + | "node.role":"mdi" |} """.stripMargin ) diff --git a/tests/components/nodes/controller.tests.js b/tests/components/nodes/controller.tests.js index d399d76bd6441d24a555175d081a1bb05178e1f8..b8802a94f26c29538715f0ec749c215f2d14f122 100644 --- a/tests/components/nodes/controller.tests.js +++ b/tests/components/nodes/controller.tests.js @@ -116,8 +116,8 @@ describe('NodesController', function() { it('refresh list of visible nodes by applying the filter to the complete list', function() { var nodes = [ - {name: 'a', master: true, data: true, client: false}, - {name: 'b', master: true, data: true, client: false} + {name: 'a', master: true, data: true, client: false, 'node.role': 'md'}, + {name: 'b', master: true, data: true, client: false, 'node.role': 'md'} ]; this.scope.filter.name = 'b'; this.scope._nodes = nodes;