Loading README.md 0 → 100644 +20 −0 Original line number Diff line number Diff line cerebro ======================= cerebro is an open source(MIT License) elasticsearch web admin tool. Installation ------------ - Download from ... - Extract files - Run bin/cerebro on unix, of bin/cerebro.bar on Windows - Access on http://localhost:9000 Screenshots ------------ #### cluster overview  ####REST Client  app/controllers/GetAliasesController.scala 0 → 100644 +15 −0 Original line number Diff line number Diff line package controllers import models.{Aliases, ElasticServer} import scala.concurrent.ExecutionContext.Implicits.global class GetAliasesController extends BaseController { def processRequest = (request, client) => { client.getAliases(ElasticServer(request.host, request.authentication)).map { aliases => Status(aliases.status)(Aliases(aliases.body)) } } } app/controllers/UpdateAliasesController.scala 0 → 100644 +17 −0 Original line number Diff line number Diff line package controllers import models.ElasticServer import play.api.libs.json.JsArray import scala.concurrent.ExecutionContext.Implicits.global class UpdateAliasesController extends BaseController { def processRequest = (request, client) => { val changes = request.getOptArray("changes").getOrElse(JsArray()).value client.updateAliases(changes, ElasticServer(request.host, request.authentication)).map { aliases => Status(aliases.status)(aliases.body) } } } app/elastic/ElasticClient.scala +14 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ package elastic import models.{ESAuth, ElasticServer} import play.api.Play.current import play.api.libs.json.{JsArray, JsObject, JsValue, Json} import play.api.libs.ws.{WS, WSAuthScheme} import scala.concurrent.ExecutionContext.Implicits.global Loading Loading @@ -121,8 +122,19 @@ trait ElasticClient { execute(s"${target.host}$path", "GET", None, target.authentication) } def executeRequest(method: String, path: String, data: Option[String], target: ElasticServer) = execute(s"${target.host}/$path", method, data, target.authentication) def getAliases(target: ElasticServer) = { val path = "/_aliases" execute(s"${target.host}$path", "GET", None, target.authentication) } def updateAliases(changes: Seq[JsValue], target: ElasticServer) = { val path = "/_aliases" val body = Json.obj("actions" -> JsArray(changes)) execute(s"${target.host}$path", "POST", Some(body.toString), target.authentication) } def executeRequest(method: String, path: String, data: Option[JsValue], target: ElasticServer) = execute(s"${target.host}/$path", method, data.map(_.toString), target.authentication) private def execute[T](url: String, method: String, body: Option[String] = None, authentication: Option[ESAuth] = None) = { val request = authentication.foldLeft(WS.url(url).withMethod(method)) { Loading app/models/Aliases.scala 0 → 100644 +27 −0 Original line number Diff line number Diff line package models import play.api.libs.json._ object Aliases { def apply(json: JsValue): JsValue = { val indices = json.as[JsObject].keys.filter { index => (json \ index \ "aliases").as[JsObject].keys.nonEmpty } JsArray(indices.flatMap { index => flattenIndexAliases(index, (json \ index \ "aliases").as[JsObject]) }.toSeq) } private def flattenIndexAliases(index: String, aliases: JsObject) = aliases.keys.map { alias => buildAlias(index, alias, (aliases \ alias).get) } private def buildAlias(index: String, alias: String, properties: JsValue): JsValue = Json.obj( "alias" -> JsString(alias), "index" -> JsString(index), "filter" -> (properties \ "filter").asOpt[JsValue], "search_routing" -> (properties \ "search_routing").asOpt[JsValue], "index_routing" -> (properties \ "index_routing").asOpt[JsValue] ) } Loading
README.md 0 → 100644 +20 −0 Original line number Diff line number Diff line cerebro ======================= cerebro is an open source(MIT License) elasticsearch web admin tool. Installation ------------ - Download from ... - Extract files - Run bin/cerebro on unix, of bin/cerebro.bar on Windows - Access on http://localhost:9000 Screenshots ------------ #### cluster overview  ####REST Client 
app/controllers/GetAliasesController.scala 0 → 100644 +15 −0 Original line number Diff line number Diff line package controllers import models.{Aliases, ElasticServer} import scala.concurrent.ExecutionContext.Implicits.global class GetAliasesController extends BaseController { def processRequest = (request, client) => { client.getAliases(ElasticServer(request.host, request.authentication)).map { aliases => Status(aliases.status)(Aliases(aliases.body)) } } }
app/controllers/UpdateAliasesController.scala 0 → 100644 +17 −0 Original line number Diff line number Diff line package controllers import models.ElasticServer import play.api.libs.json.JsArray import scala.concurrent.ExecutionContext.Implicits.global class UpdateAliasesController extends BaseController { def processRequest = (request, client) => { val changes = request.getOptArray("changes").getOrElse(JsArray()).value client.updateAliases(changes, ElasticServer(request.host, request.authentication)).map { aliases => Status(aliases.status)(aliases.body) } } }
app/elastic/ElasticClient.scala +14 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ package elastic import models.{ESAuth, ElasticServer} import play.api.Play.current import play.api.libs.json.{JsArray, JsObject, JsValue, Json} import play.api.libs.ws.{WS, WSAuthScheme} import scala.concurrent.ExecutionContext.Implicits.global Loading Loading @@ -121,8 +122,19 @@ trait ElasticClient { execute(s"${target.host}$path", "GET", None, target.authentication) } def executeRequest(method: String, path: String, data: Option[String], target: ElasticServer) = execute(s"${target.host}/$path", method, data, target.authentication) def getAliases(target: ElasticServer) = { val path = "/_aliases" execute(s"${target.host}$path", "GET", None, target.authentication) } def updateAliases(changes: Seq[JsValue], target: ElasticServer) = { val path = "/_aliases" val body = Json.obj("actions" -> JsArray(changes)) execute(s"${target.host}$path", "POST", Some(body.toString), target.authentication) } def executeRequest(method: String, path: String, data: Option[JsValue], target: ElasticServer) = execute(s"${target.host}/$path", method, data.map(_.toString), target.authentication) private def execute[T](url: String, method: String, body: Option[String] = None, authentication: Option[ESAuth] = None) = { val request = authentication.foldLeft(WS.url(url).withMethod(method)) { Loading
app/models/Aliases.scala 0 → 100644 +27 −0 Original line number Diff line number Diff line package models import play.api.libs.json._ object Aliases { def apply(json: JsValue): JsValue = { val indices = json.as[JsObject].keys.filter { index => (json \ index \ "aliases").as[JsObject].keys.nonEmpty } JsArray(indices.flatMap { index => flattenIndexAliases(index, (json \ index \ "aliases").as[JsObject]) }.toSeq) } private def flattenIndexAliases(index: String, aliases: JsObject) = aliases.keys.map { alias => buildAlias(index, alias, (aliases \ alias).get) } private def buildAlias(index: String, alias: String, properties: JsValue): JsValue = Json.obj( "alias" -> JsString(alias), "index" -> JsString(index), "filter" -> (properties \ "filter").asOpt[JsValue], "search_routing" -> (properties \ "search_routing").asOpt[JsValue], "index_routing" -> (properties \ "index_routing").asOpt[JsValue] ) }