Commit 6a3d0621 authored by Leonardo Menezes's avatar Leonardo Menezes
Browse files

support to create index

parent ccb5bcba
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
package controllers

import models.ElasticServer
import play.api.libs.json.Json

import scala.concurrent.ExecutionContext.Implicits.global

class CreateIndexController extends BaseController {

  def processRequest = (request, client) => {
    client.createIndex(request.get("index"), request.getOpt("metadata").getOrElse(Json.obj()), ElasticServer(request.host, request.authentication)).map { response =>
      Status(response.status)(response.body)
    }
  }

}
+14 −0
Original line number Diff line number Diff line
package controllers


import models.{ElasticServer, IndexMetadata}

import scala.concurrent.ExecutionContext.Implicits.global

class GetIndexMetadataController extends BaseController {

  def processRequest = (request, client) => client.getIndexMetadata(request.get("index"), ElasticServer(request.host, request.authentication)).map { response =>
    Ok(IndexMetadata(response.body))
  }

}
+10 −0
Original line number Diff line number Diff line
@@ -133,6 +133,16 @@ trait ElasticClient {
    execute(s"${target.host}$path", "POST", Some(body.toString), target.authentication)
  }

  def getIndexMetadata(index: String, target: ElasticServer) = {
    val path = s"/_cluster/state/metadata/$index?human=true"
    execute(s"${target.host}$path", "GET", None, target.authentication)
  }

  def createIndex(index: String, metadata: JsValue, target: ElasticServer) = {
    val path = s"/$index"
    execute(s"${target.host}$path", "POST", Some(metadata.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)

+12 −0
Original line number Diff line number Diff line
package models

import play.api.libs.json.{JsValue, Json}

object IndexMetadata {

  def apply(metadata: JsValue) = Json.obj(
    "mappings" -> (metadata \\ "mappings").head,
    "settings" -> (metadata \\ "settings").head
  )

}
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ POST /apis/rest @controllers.RestController.execute
POST       /apis/get_cluster_mapping         @controllers.GetClusterMappingController.execute
POST       /apis/get_aliases                 @controllers.GetAliasesController.execute
POST       /apis/update_aliases              @controllers.UpdateAliasesController.execute
POST       /apis/get_index_metadata          @controllers.GetIndexMetadataController.execute
POST       /apis/create_index                @controllers.CreateIndexController.execute

GET        /apis/hosts                       @controllers.HostsController.index

Loading