From b070255d75948b1eab26d32db75a8edf31481ed3 Mon Sep 17 00:00:00 2001 From: patelh Date: Wed, 2 Dec 2015 15:49:29 -0800 Subject: [PATCH] Upgrade to Play 2.4.4 --- app/GlobalKafkaManager.scala | 29 ------- app/controllers/Application.scala | 10 +-- app/controllers/Cluster.scala | 8 +- app/controllers/Consumer.scala | 9 +- app/controllers/KMWebJarAssets.scala | 83 +++++++++++++++++++ app/controllers/KafkaManagerContext.scala | 16 ++-- app/controllers/Logkafka.scala | 17 ++-- .../PreferredReplicaElection.scala | 11 +-- app/controllers/ReassignPartitions.scala | 21 +++-- app/controllers/Topic.scala | 25 +++--- app/controllers/api/KafkaStateCheck.scala | 8 +- app/features/ApplicationFeature.scala | 5 -- app/loader/KafkaManagerLoader.scala | 50 +++++++++++ app/models/navigation/Menus.scala | 34 ++++---- app/views/broker/brokerList.scala.html | 5 +- app/views/broker/brokerListContent.scala.html | 2 +- app/views/broker/brokerView.scala.html | 5 +- app/views/broker/brokerViewContent.scala.html | 2 +- app/views/cluster/addCluster.scala.html | 4 +- app/views/cluster/clusterList.scala.html | 2 +- app/views/cluster/clusterView.scala.html | 5 +- .../cluster/clusterViewContent.scala.html | 2 +- .../cluster/pendingClusterList.scala.html | 2 +- app/views/cluster/updateCluster.scala.html | 5 +- app/views/common/brokerMetrics.scala.html | 2 +- .../common/expandedBrokerMetrics.scala.html | 2 +- app/views/common/resultOfCommand.scala.html | 2 +- app/views/common/resultsOfCommand.scala.html | 2 +- .../common/shortBrokerMetrics.scala.html | 2 +- .../consumer/consumedTopicView.scala.html | 5 +- .../consumedTopicViewContent.scala.html | 3 +- app/views/consumer/consumerList.scala.html | 5 +- .../consumer/consumerListContent.scala.html | 2 +- app/views/consumer/consumerView.scala.html | 5 +- .../consumer/consumerViewContent.scala.html | 2 +- app/views/index.scala.html | 4 +- app/views/logkafka/createLogkafka.scala.html | 5 +- app/views/logkafka/logkafkaList.scala.html | 5 +- .../logkafka/logkafkaListContent.scala.html | 3 +- app/views/logkafka/logkafkaView.scala.html | 5 +- .../logkafka/logkafkaViewContent.scala.html | 3 +- app/views/logkafka/updateConfig.scala.html | 5 +- app/views/main.scala.html | 10 +-- app/views/preferredReplicaElection.scala.html | 5 +- app/views/reassignPartitions.scala.html | 5 +- app/views/topic/addPartitions.scala.html | 5 +- .../addPartitionsToMultipleTopics.scala.html | 5 +- app/views/topic/confirmAssignment.scala.html | 5 +- .../confirmMultipleAssignments.scala.html | 5 +- app/views/topic/createTopic.scala.html | 5 +- app/views/topic/manualAssignments.scala.html | 5 +- .../topic/runMultipleAssignments.scala.html | 5 +- app/views/topic/topicList.scala.html | 5 +- app/views/topic/topicListContent.scala.html | 2 +- app/views/topic/topicView.scala.html | 5 +- app/views/topic/topicViewContent.scala.html | 2 +- app/views/topic/updateConfig.scala.html | 5 +- build.sbt | 22 ++--- conf/application.conf | 41 ++------- conf/routes | 2 +- project/plugins.sbt | 18 ++-- 61 files changed, 322 insertions(+), 257 deletions(-) delete mode 100644 app/GlobalKafkaManager.scala create mode 100644 app/controllers/KMWebJarAssets.scala create mode 100644 app/loader/KafkaManagerLoader.scala diff --git a/app/GlobalKafkaManager.scala b/app/GlobalKafkaManager.scala deleted file mode 100644 index c094cfdca..000000000 --- a/app/GlobalKafkaManager.scala +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 - * See accompanying LICENSE file. - */ - -import controllers.KafkaManagerContext -import kafka.manager.KafkaManager -import play.api._ - -/** - * @author hiral - */ -object GlobalKafkaManager extends GlobalSettings { - - private[this] var kafkaManager: KafkaManager = null - - override def beforeStart(app: Application): Unit = { - Logger.info("Init kafka manager...") - KafkaManagerContext.getKafkaManager - Thread.sleep(5000) - } - - override def onStop(app: Application) { - KafkaManagerContext.shutdown() - Logger.info("Application shutdown...") - } -} - - diff --git a/app/controllers/Application.scala b/app/controllers/Application.scala index bbf1c1a74..c0ca21ace 100644 --- a/app/controllers/Application.scala +++ b/app/controllers/Application.scala @@ -6,19 +6,19 @@ package controllers import features.ApplicationFeatures -import kafka.manager.features.ClusterFeatures +import models.navigation.Menus +import play.api.i18n.{MessagesApi, I18nSupport} import play.api.mvc._ /** * @author hiral */ -object Application extends Controller { +class Application (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { import play.api.libs.concurrent.Execution.Implicits.defaultContext - private[this] val kafkaManager = KafkaManagerContext.getKafkaManager - - private[this] implicit val af: ApplicationFeatures = ApplicationFeatures.features + private[this] val kafkaManager = kafkaManagerContext.getKafkaManager def index = Action.async { kafkaManager.getClusterList.map { errorOrClusterList => diff --git a/app/controllers/Cluster.scala b/app/controllers/Cluster.scala index fabe2ef8f..893663cb8 100644 --- a/app/controllers/Cluster.scala +++ b/app/controllers/Cluster.scala @@ -10,10 +10,12 @@ import kafka.manager.model.{KafkaVersion, ClusterConfig} import kafka.manager.ApiError import models.FollowLink import models.form._ +import models.navigation.Menus import play.api.data.Form import play.api.data.Forms._ import play.api.data.validation.{Valid, Invalid, Constraint} import play.api.data.validation.Constraints._ +import play.api.i18n.{I18nSupport, MessagesApi} import play.api.mvc._ import scala.concurrent.Future @@ -23,11 +25,11 @@ import scalaz.{-\/, \/-} /** * @author hiral */ -object Cluster extends Controller { +class Cluster (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { import play.api.libs.concurrent.Execution.Implicits.defaultContext - private[this] val kafkaManager = KafkaManagerContext.getKafkaManager - private[this] implicit val af: ApplicationFeatures = ApplicationFeatures.features + private[this] val kafkaManager = kafkaManagerContext.getKafkaManager val validateName : Constraint[String] = Constraint("validate name") { name => Try { diff --git a/app/controllers/Consumer.scala b/app/controllers/Consumer.scala index 5753acc33..298d3b3a6 100644 --- a/app/controllers/Consumer.scala +++ b/app/controllers/Consumer.scala @@ -6,16 +6,19 @@ package controllers import features.ApplicationFeatures +import models.navigation.Menus +import play.api.i18n.{I18nSupport, MessagesApi} import play.api.mvc._ /** * @author cvcal */ -object Consumer extends Controller{ +class Consumer (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { + import play.api.libs.concurrent.Execution.Implicits.defaultContext - private[this] val kafkaManager = KafkaManagerContext.getKafkaManager - private[this] implicit val af: ApplicationFeatures = ApplicationFeatures.features + private[this] val kafkaManager = kafkaManagerContext.getKafkaManager def consumers(cluster: String) = Action.async { kafkaManager.getConsumerListExtended(cluster).map { errorOrConsumerList => diff --git a/app/controllers/KMWebJarAssets.scala b/app/controllers/KMWebJarAssets.scala new file mode 100644 index 000000000..e4aca26aa --- /dev/null +++ b/app/controllers/KMWebJarAssets.scala @@ -0,0 +1,83 @@ +package controllers + +import play.api.http.{LazyHttpErrorHandler, HttpErrorHandler} +import play.api.mvc.Action +import play.api.mvc.AnyContent +import scala.util.matching.Regex +import play.api.{Configuration, Play} +import org.webjars.WebJarAssetLocator + +import javax.inject.{ Inject, Singleton } + +/** + * A Play framework controller that is able to resolve WebJar paths. + *

org.webjars.play.webJarFilterExpr can be used to declare a regex for the + * files that should be looked for when searching within WebJars. By default + * all files are searched for. + */ +@Singleton +class KMWebJarAssets @Inject() (errorHandler: HttpErrorHandler, configuration: Configuration) extends AssetsBuilder(errorHandler) { + + val WebjarFilterExprDefault = """.*""" + val WebjarFilterExprProp = "org.webjars.play.webJarFilterExpr" + + val webJarFilterExpr = configuration.getString(WebjarFilterExprProp).getOrElse(WebjarFilterExprDefault) + + import play.api.Play.current + lazy val webJarAssetLocator = new WebJarAssetLocator( + WebJarAssetLocator.getFullPathIndex( + new Regex(webJarFilterExpr).pattern, Play.application.classloader)) + + /** + * Controller Method to serve a WebJar asset + * + * @param file the file to serve + * @return the Action that serves the file + */ + def at(file: String): Action[AnyContent] = { + this.at("/" + WebJarAssetLocator.WEBJARS_PATH_PREFIX, file) + } + + /** + * Locate a file in a WebJar + * + * @example Passing in `jquery.min.js` will return `jquery/1.8.2/jquery.min.js` assuming the jquery WebJar version 1.8.2 is on the classpath + * + * @param file the file or partial path to find + * @return the path to the file (sans-the webjars prefix) + * + */ + def locate(file: String): String = { + webJarAssetLocator.getFullPath(file).stripPrefix(WebJarAssetLocator.WEBJARS_PATH_PREFIX + "/") + } + + /** + * Locate a file in a WebJar + * + * @param webjar the WebJar artifactId + * @param file the file or partial path to find + * @return the path to the file (sans-the webjars prefix) + * + */ + def locate(webjar: String, file: String): String = { + webJarAssetLocator.getFullPath(webjar, file).stripPrefix(WebJarAssetLocator.WEBJARS_PATH_PREFIX + "/") + } + + /** + * Get the full path to a file in a WebJar without validating that the file actually exists + * + * @example Calling fullPath("react", "react.js") will return the full path to the file in the WebJar because react.js exists at the root of the WebJar + * + * @param webjar the WebJar artifactId + * @param path the full path to a file in the WebJar + * @return the path to the file (sans-the webjars prefix) + * + */ + def fullPath(webjar: String, path: String): String = { + val version = webJarAssetLocator.getWebJars.get(webjar) + s"$webjar/$version/$path" + } + +} + +object KMWebJarAssets extends KMWebJarAssets(LazyHttpErrorHandler, play.api.Play.current.configuration) diff --git a/app/controllers/KafkaManagerContext.scala b/app/controllers/KafkaManagerContext.scala index 20478b8a8..3ccea6e6c 100644 --- a/app/controllers/KafkaManagerContext.scala +++ b/app/controllers/KafkaManagerContext.scala @@ -6,17 +6,21 @@ package controllers import kafka.manager.KafkaManager +import play.api.Configuration +import play.api.inject.ApplicationLifecycle + +import scala.concurrent.Future /** * @author hiral */ -object KafkaManagerContext { +class KafkaManagerContext (lifecycle: ApplicationLifecycle, configuration: Configuration) { - import play.api.Play.current + private[this] val kafkaManager : KafkaManager = new KafkaManager(configuration.underlying) + + lifecycle.addStopHook { () => + Future.successful(kafkaManager.shutdown()) + } - private[this] val kafkaManager : KafkaManager = new KafkaManager(play.api.Play.configuration.underlying) def getKafkaManager : KafkaManager = kafkaManager - def shutdown() : Unit = { - kafkaManager.shutdown() - } } diff --git a/app/controllers/Logkafka.scala b/app/controllers/Logkafka.scala index 70aada59f..6957199de 100644 --- a/app/controllers/Logkafka.scala +++ b/app/controllers/Logkafka.scala @@ -20,6 +20,7 @@ import play.api.data.Form import play.api.data.Forms._ import play.api.data.validation.{Valid, Invalid, Constraint} import play.api.data.validation.Constraints._ +import play.api.i18n.{I18nSupport, MessagesApi} import play.api.mvc._ import scala.concurrent.Future @@ -29,11 +30,11 @@ import scalaz.{\/-, -\/} /** * @author hiral */ -object Logkafka extends Controller{ +class Logkafka (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { import play.api.libs.concurrent.Execution.Implicits.defaultContext - implicit private[this] val kafkaManager = KafkaManagerContext.getKafkaManager - private[this] implicit val af: ApplicationFeatures = ApplicationFeatures.features + implicit private[this] val kafkaManager = kafkaManagerContext.getKafkaManager val validateLogkafkaId: Constraint[String] = Constraint("validate logkafka id") { id => Try { @@ -144,7 +145,7 @@ object Logkafka extends Controller{ cl.configs.filter(_.value.isDefined).foreach(c => props.setProperty(c.name, c.value.get)) kafkaManager.createLogkafka(clusterName, cl.logkafka_id, cl.log_path, props).map { errorOrSuccess => Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Logkafka", "Create", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Logkafka", "Create", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndCluster("Logkafkas", clusterName, "Create Logkafka"), errorOrSuccess, "Create Logkafka", @@ -170,7 +171,7 @@ object Logkafka extends Controller{ deleteLogkafka => { kafkaManager.deleteLogkafka(clusterName, deleteLogkafka.logkafka_id, deleteLogkafka.log_path).map { errorOrSuccess => Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndLogkafka("Logkafka View", clusterName, logkafka_id, log_path, "Delete Logkafka"), errorOrSuccess, "Delete Logkafka", @@ -226,7 +227,7 @@ object Logkafka extends Controller{ updateLogkafkaConfig.configs.filter(_.value.isDefined).foreach(c => props.setProperty(c.name, c.value.get)) kafkaManager.updateLogkafkaConfig(clusterName, updateLogkafkaConfig.logkafka_id, updateLogkafkaConfig.log_path, props).map { errorOrSuccess => Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndLogkafka("Logkafka View", clusterName, logkafka_id, log_path, "Update Config"), errorOrSuccess, "Update Config", @@ -246,7 +247,7 @@ object Logkafka extends Controller{ props.put("valid", true.toString); kafkaManager.updateLogkafkaConfig(clusterName, logkafka_id, log_path, props, false).map { errorOrSuccess => Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndLogkafka("Logkafka View", clusterName, logkafka_id, log_path, "Update Config"), errorOrSuccess, "Enable Config", @@ -264,7 +265,7 @@ object Logkafka extends Controller{ props.put("valid", false.toString); kafkaManager.updateLogkafkaConfig(clusterName, logkafka_id, log_path, props, false).map { errorOrSuccess => Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Logkafka", "Logkafka View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndLogkafka("Logkafka View", clusterName, logkafka_id, log_path, "Update Config"), errorOrSuccess, "Disable Config", diff --git a/app/controllers/PreferredReplicaElection.scala b/app/controllers/PreferredReplicaElection.scala index 937a0430e..dc18c7945 100644 --- a/app/controllers/PreferredReplicaElection.scala +++ b/app/controllers/PreferredReplicaElection.scala @@ -14,6 +14,7 @@ import models.form.{UnknownPREO, RunElection, PreferredReplicaElectionOperation} import play.api.data.Form import play.api.data.Forms._ import play.api.data.validation.{Valid, Invalid, Constraint} +import play.api.i18n.{I18nSupport, MessagesApi} import play.api.mvc._ import scala.concurrent.Future @@ -22,11 +23,11 @@ import scalaz.-\/ /** * @author hiral */ -object PreferredReplicaElection extends Controller{ +class PreferredReplicaElection (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { import play.api.libs.concurrent.Execution.Implicits.defaultContext - private[this] val kafkaManager = KafkaManagerContext.getKafkaManager - private[this] implicit val af: ApplicationFeatures = ApplicationFeatures.features + private[this] val kafkaManager = kafkaManagerContext.getKafkaManager private[this] implicit val cf: ClusterFeatures = ClusterFeatures.default @@ -63,7 +64,7 @@ object PreferredReplicaElection extends Controller{ } errorOrSuccessFuture.map { errorOrSuccess => Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(c, "Preferred Replica Election", "", navigation.Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, "Preferred Replica Election", "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withViewAndCluster("Run Election", c), errorOrSuccess, "Run Election", @@ -73,7 +74,7 @@ object PreferredReplicaElection extends Controller{ } case UnknownPREO(opString) => Future.successful(Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(c, "Preferred Replica Election", "", Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, "Preferred Replica Election", "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withNamedViewAndCluster("Preferred Replica Election", c, "Unknown Operation"), -\/(ApiError(s"Unknown operation $opString")), "Unknown Preferred Replica Election Operation", diff --git a/app/controllers/ReassignPartitions.scala b/app/controllers/ReassignPartitions.scala index d2dacdaaa..7023131df 100644 --- a/app/controllers/ReassignPartitions.scala +++ b/app/controllers/ReassignPartitions.scala @@ -15,21 +15,20 @@ import models.form._ import play.api.data.Form import play.api.data.Forms._ import play.api.data.validation.{Valid, Invalid, Constraint} +import play.api.i18n.{I18nSupport, MessagesApi} import play.api.mvc._ -import scala.collection.mutable - import scala.concurrent.Future import scalaz.{\/, \/-, -\/} /** * @author hiral */ -object ReassignPartitions extends Controller{ +class ReassignPartitions (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { import play.api.libs.concurrent.Execution.Implicits.defaultContext - private[this] implicit val kafkaManager = KafkaManagerContext.getKafkaManager - private[this] implicit val af: ApplicationFeatures = ApplicationFeatures.features + private[this] implicit val kafkaManager = kafkaManagerContext.getKafkaManager val validateOperation : Constraint[String] = Constraint("validate operation value") { case "confirm" => Valid @@ -273,7 +272,7 @@ object ReassignPartitions extends Controller{ Option(FollowLink("Try Again", routes.ReassignPartitions.manualAssignments(c, t).toString()))))) }, implicit clusterFeatures => { Future.successful(Ok(views.html.common.resultsOfCommand( - views.html.navigation.clusterMenu(c, title, "", Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, title, "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Manual Reassignment View", c, "", title), errorOrResult, title, @@ -319,7 +318,7 @@ object ReassignPartitions extends Controller{ kafkaManager.generatePartitionAssignments(c, Set(t), assignment.brokers.filter(_.selected).map(_.id)).map { errorOrSuccess => implicit val clusterFeatures = cc.clusterFeatures Ok(views.html.common.resultsOfCommand( - views.html.navigation.clusterMenu(c, "Reassign Partitions", "", Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, "Reassign Partitions", "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", c, t, "Generate Partition Assignments"), errorOrSuccess, s"Generate Partition Assignments - $t", @@ -347,7 +346,7 @@ object ReassignPartitions extends Controller{ kafkaManager.generatePartitionAssignments(c, assignment.topics.filter(_.selected).map(_.name).toSet, assignment.brokers.filter(_.selected).map(_.id)).map { errorOrSuccess => implicit val clusterFeatures = cc.clusterFeatures Ok(views.html.common.resultsOfCommand( - views.html.navigation.clusterMenu(c, "Reassign Partitions", "", Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, "Reassign Partitions", "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", c, "", "Generate Partition Assignments"), errorOrSuccess, s"Generate Partition Assignments", @@ -378,7 +377,7 @@ object ReassignPartitions extends Controller{ implicit val clusterFeatures = cc.clusterFeatures Ok( views.html.common.resultsOfCommand( - views.html.navigation.clusterMenu(c, "Reassign Partitions", "", navigation.Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, "Reassign Partitions", "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withNamedViewAndCluster("Topics", c, "Reassign Partitions"), errorOrSuccess, s"Run Reassign Partitions", @@ -407,7 +406,7 @@ object ReassignPartitions extends Controller{ implicit val clusterFeatures = cc.clusterFeatures kafkaManager.runReassignPartitions(c, Set(t)).map { errorOrSuccess => Ok(views.html.common.resultsOfCommand( - views.html.navigation.clusterMenu(c, "Reassign Partitions", "", navigation.Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, "Reassign Partitions", "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", c, t, "Run Reassign Partitions"), errorOrSuccess, s"Run Reassign Partitions - $t", @@ -418,7 +417,7 @@ object ReassignPartitions extends Controller{ case UnknownRPO(opString) => implicit val clusterFeatures = cc.clusterFeatures Future.successful(Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(c, "Reassign Partitions", "", navigation.Menus.clusterMenus(c)), + views.html.navigation.clusterMenu(c, "Reassign Partitions", "", menus.clusterMenus(c)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", c, t, "Unknown Reassign Partitions Operation"), -\/(ApiError(s"Unknown operation $opString")), "Unknown Reassign Partitions Operation", diff --git a/app/controllers/Topic.scala b/app/controllers/Topic.scala index 6c50cb86e..a7d106ba8 100644 --- a/app/controllers/Topic.scala +++ b/app/controllers/Topic.scala @@ -20,6 +20,7 @@ import play.api.data.Form import play.api.data.Forms._ import play.api.data.validation.{Valid, Invalid, Constraint} import play.api.data.validation.Constraints._ +import play.api.i18n.{I18nSupport, MessagesApi} import play.api.mvc._ import scala.concurrent.Future @@ -29,11 +30,11 @@ import scalaz.{\/-, -\/} /** * @author hiral */ -object Topic extends Controller{ +class Topic (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { import play.api.libs.concurrent.Execution.Implicits.defaultContext - private[this] val kafkaManager = KafkaManagerContext.getKafkaManager - private[this] implicit val af: ApplicationFeatures = ApplicationFeatures.features + private[this] val kafkaManager = kafkaManagerContext.getKafkaManager val validateName : Constraint[String] = Constraint("validate name") { name => Try { @@ -168,7 +169,7 @@ object Topic extends Controller{ case t => implicit val clusterFeatures = ClusterFeatures.default Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topic", "Create", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topic", "Create", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndCluster("Topics", clusterName, "Create Topic"), -\/(ApiError(s"Unknown error : ${t.getMessage}")), "Create Topic", @@ -183,7 +184,7 @@ object Topic extends Controller{ kafkaManager.createTopic(clusterName, ct.topic, ct.partitions, ct.replication, props).map { errorOrSuccess => implicit val clusterFeatures = errorOrSuccess.toOption.map(_.clusterFeatures).getOrElse(ClusterFeatures.default) Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topic", "Create", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topic", "Create", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndCluster("Topics", clusterName, "Create Topic"), errorOrSuccess, "Create Topic", @@ -210,7 +211,7 @@ object Topic extends Controller{ kafkaManager.deleteTopic(clusterName, deleteTopic.topic).map { errorOrSuccess => implicit val clusterFeatures = errorOrSuccess.toOption.map(_.clusterFeatures).getOrElse(ClusterFeatures.default) Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", clusterName, topic, "Delete Topic"), errorOrSuccess, "Delete Topic", @@ -274,7 +275,7 @@ object Topic extends Controller{ case t => implicit val clusterFeatures = ClusterFeatures.default Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", clusterName, topic, "Add Partitions"), -\/(ApiError(s"Unknown error : ${t.getMessage}")), "Add Partitions", @@ -287,7 +288,7 @@ object Topic extends Controller{ kafkaManager.addTopicPartitions(clusterName, addTopicPartitions.topic, addTopicPartitions.brokers.filter(_.selected).map(_.id), addTopicPartitions.partitions, addTopicPartitions.readVersion).map { errorOrSuccess => implicit val clusterFeatures = errorOrSuccess.toOption.map(_.clusterFeatures).getOrElse(ClusterFeatures.default) Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", clusterName, topic, "Add Partitions"), errorOrSuccess, "Add Partitions", @@ -310,7 +311,7 @@ object Topic extends Controller{ case t => implicit val clusterFeatures = ClusterFeatures.default Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topics", "Add Partitions to Multiple Topics", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topics", "Add Partitions to Multiple Topics", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndCluster("Topics", clusterName, "Add Partitions to Multiple Topics"), -\/(ApiError(s"Unknown error : ${t.getMessage}")), "Add Partitions to All Topics", @@ -326,7 +327,7 @@ object Topic extends Controller{ kafkaManager.addMultipleTopicsPartitions(clusterName, topics, brokers, addMultipleTopicsPartitions.partitions, readVersions).map { errorOrSuccess => implicit val clusterFeatures = errorOrSuccess.toOption.map(_.clusterFeatures).getOrElse(ClusterFeatures.default) Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topics", "Add Partitions to Multiple Topics", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topics", "Add Partitions to Multiple Topics", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndCluster("Topics", clusterName, "Add Partitions to Multiple Topics"), errorOrSuccess, "Add Partitions to All Topics", @@ -378,7 +379,7 @@ object Topic extends Controller{ case t => implicit val clusterFeatures = ClusterFeatures.default Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", clusterName, topic, "Update Config"), -\/(ApiError(s"Unknown error : ${t.getMessage}")), "Update Config", @@ -393,7 +394,7 @@ object Topic extends Controller{ kafkaManager.updateTopicConfig(clusterName, updateTopicConfig.topic, props, updateTopicConfig.readVersion).map { errorOrSuccess => implicit val clusterFeatures = errorOrSuccess.toOption.map(_.clusterFeatures).getOrElse(ClusterFeatures.default) Ok(views.html.common.resultOfCommand( - views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", Menus.clusterMenus(clusterName)), + views.html.navigation.clusterMenu(clusterName, "Topic", "Topic View", menus.clusterMenus(clusterName)), models.navigation.BreadCrumbs.withNamedViewAndClusterAndTopic("Topic View", clusterName, topic, "Update Config"), errorOrSuccess, "Update Config", diff --git a/app/controllers/api/KafkaStateCheck.scala b/app/controllers/api/KafkaStateCheck.scala index 1f0729476..b916ebb93 100644 --- a/app/controllers/api/KafkaStateCheck.scala +++ b/app/controllers/api/KafkaStateCheck.scala @@ -6,6 +6,9 @@ package controllers.api import controllers.KafkaManagerContext +import features.ApplicationFeatures +import models.navigation.Menus +import play.api.i18n.{I18nSupport, MessagesApi} import play.api.libs.json._ import play.api.mvc._ @@ -13,11 +16,12 @@ import play.api.mvc._ * @author jisookim0513 */ -object KafkaStateCheck extends Controller { +class KafkaStateCheck (val messagesApi: MessagesApi, val kafkaManagerContext: KafkaManagerContext) + (implicit af: ApplicationFeatures, menus: Menus) extends Controller with I18nSupport { import play.api.libs.concurrent.Execution.Implicits.defaultContext - private[this] val kafkaManager = KafkaManagerContext.getKafkaManager + private[this] val kafkaManager = kafkaManagerContext.getKafkaManager def brokers(c: String) = Action.async { implicit request => kafkaManager.getBrokerList(c).map { errorOrBrokerList => diff --git a/app/features/ApplicationFeature.scala b/app/features/ApplicationFeature.scala index a3055d0cf..cfad0acdd 100644 --- a/app/features/ApplicationFeature.scala +++ b/app/features/ApplicationFeature.scala @@ -48,7 +48,6 @@ object ApplicationFeature extends Logging { case class ApplicationFeatures(features: Set[ApplicationFeature]) object ApplicationFeatures extends Logging { - import play.api.Play.current lazy val default : List[String] = List( KMClusterManagerFeature, @@ -56,10 +55,6 @@ object ApplicationFeatures extends Logging { KMPreferredReplicaElectionFeature, KMReassignPartitionsFeature).map(_.getClass.getSimpleName) - lazy val features = { - getApplicationFeatures(play.api.Play.configuration.underlying) - } - def getApplicationFeatures(config: Config) : ApplicationFeatures = { import scala.collection.JavaConverters._ val configFeatures: Option[List[String]] = Try(config.getStringList("application.features").asScala.toList).toOption diff --git a/app/loader/KafkaManagerLoader.scala b/app/loader/KafkaManagerLoader.scala new file mode 100644 index 000000000..6ba5aae14 --- /dev/null +++ b/app/loader/KafkaManagerLoader.scala @@ -0,0 +1,50 @@ +package loader + +import controllers.{WebJarAssets, KafkaManagerContext} +import features.ApplicationFeatures +import models.navigation.Menus +import play.api.ApplicationLoader +import play.api.ApplicationLoader.Context +import play.api.BuiltInComponentsFromContext +import play.api.i18n.I18nComponents +import play.api.routing.Router +import router.Routes + +/** + * Created by hiral on 12/2/15. + */ +class KafkaManagerLoader extends ApplicationLoader { + def load(context: Context) = { + new ApplicationComponents(context).application + } +} + +class ApplicationComponents(context: Context) extends BuiltInComponentsFromContext(context) with I18nComponents { + private[this] implicit val applicationFeatures = ApplicationFeatures.getApplicationFeatures(context.initialConfiguration.underlying) + private[this] implicit val menus = new Menus + private[this] val kafkaManagerContext = new KafkaManagerContext(applicationLifecycle, context.initialConfiguration) + private[this] lazy val applicationC = new controllers.Application(messagesApi, kafkaManagerContext) + private[this] lazy val clusterC = new controllers.Cluster(messagesApi, kafkaManagerContext) + private[this] lazy val topicC = new controllers.Topic(messagesApi, kafkaManagerContext) + private[this] lazy val logKafkaC = new controllers.Logkafka(messagesApi, kafkaManagerContext) + private[this] lazy val consumerC = new controllers.Consumer(messagesApi, kafkaManagerContext) + private[this] lazy val preferredReplicaElectionC= new controllers.PreferredReplicaElection(messagesApi, kafkaManagerContext) + private[this] lazy val reassignPartitionsC = new controllers.ReassignPartitions(messagesApi, kafkaManagerContext) + private[this] lazy val kafkaStateCheckC = new controllers.api.KafkaStateCheck(messagesApi, kafkaManagerContext) + private[this] lazy val assetsC = new controllers.Assets(httpErrorHandler) + private[this] lazy val webJarsAssetsC = new controllers.KMWebJarAssets(httpErrorHandler, context.initialConfiguration) + + override val router: Router = new Routes( + httpErrorHandler, + applicationC, + clusterC, + topicC, + logKafkaC, + consumerC, + preferredReplicaElectionC, + reassignPartitionsC, + kafkaStateCheckC, + assetsC, + webJarsAssetsC + ) +} diff --git a/app/models/navigation/Menus.scala b/app/models/navigation/Menus.scala index b2cb34880..3d4ef2acc 100644 --- a/app/models/navigation/Menus.scala +++ b/app/models/navigation/Menus.scala @@ -11,10 +11,10 @@ import kafka.manager.features.{KMLogKafkaFeature, ClusterFeatures} /** * @author hiral */ -object Menus { +class Menus(implicit applicationFeatures: ApplicationFeatures) { import models.navigation.QuickRoutes._ - private[this] def clusterMenu(cluster: String, applicationFeatures: ApplicationFeatures) : Option[Menu] = { + private[this] def clusterMenu(cluster: String) : Option[Menu] = { val defaultItems = IndexedSeq("Summary".clusterRouteMenuItem(cluster), "List".baseRouteMenuItem) val items = { @@ -27,7 +27,7 @@ object Menus { Option(Menu("Cluster", items, None)) } - private[this] def topicMenu(cluster: String, applicationFeatures: ApplicationFeatures) : Option[Menu] = { + private[this] def topicMenu(cluster: String) : Option[Menu] = { val defaultItems = IndexedSeq("List".clusterRouteMenuItem(cluster)) val items = { @@ -40,24 +40,23 @@ object Menus { Option(Menu("Topic", items, None)) } - private[this] def brokersMenu(cluster: String, applicationFeatures: ApplicationFeatures) : Option[Menu] = { + private[this] def brokersMenu(cluster: String) : Option[Menu] = { Option("Brokers".clusterMenu(cluster)) } - private[this] def preferredReplicaElectionMenu(cluster: String, applicationFeatures: ApplicationFeatures) : Option[Menu] = { + private[this] def preferredReplicaElectionMenu(cluster: String) : Option[Menu] = { Option("Preferred Replica Election".clusterMenu(cluster)) } - private[this] def reassignPartitionsMenu(cluster: String, applicationFeatures: ApplicationFeatures) : Option[Menu] = { + private[this] def reassignPartitionsMenu(cluster: String) : Option[Menu] = { Option("Reassign Partitions".clusterMenu(cluster)) } - private[this] def consumersMenu(cluster: String, applicationFeatures: ApplicationFeatures) : Option[Menu] = { + private[this] def consumersMenu(cluster: String) : Option[Menu] = { Option("Consumers".clusterMenu(cluster)) } private[this] def logKafkaMenu(cluster: String, - applicationFeatures: ApplicationFeatures, clusterFeatures: ClusterFeatures) : Option[Menu] = { if (clusterFeatures.features(KMLogKafkaFeature)) { Option(Menu("Logkafka", IndexedSeq( @@ -68,23 +67,22 @@ object Menus { } def clusterMenus(cluster: String) - (implicit applicationFeatures: ApplicationFeatures, - clusterFeatures: ClusterFeatures) : IndexedSeq[Menu] = { + (implicit clusterFeatures: ClusterFeatures) : IndexedSeq[Menu] = { IndexedSeq( - clusterMenu(cluster, applicationFeatures), - brokersMenu(cluster, applicationFeatures), - topicMenu(cluster, applicationFeatures), - preferredReplicaElectionMenu(cluster, applicationFeatures), - reassignPartitionsMenu(cluster, applicationFeatures), - consumersMenu(cluster, applicationFeatures), - logKafkaMenu(cluster, applicationFeatures, clusterFeatures) + clusterMenu(cluster), + brokersMenu(cluster), + topicMenu(cluster), + preferredReplicaElectionMenu(cluster), + reassignPartitionsMenu(cluster), + consumersMenu(cluster), + logKafkaMenu(cluster, clusterFeatures) ).flatten } val indexMenu = { val defaultItems = IndexedSeq("List".baseRouteMenuItem) val items = { - if(ApplicationFeatures.features.features(KMClusterManagerFeature)) + if(applicationFeatures.features(KMClusterManagerFeature)) defaultItems.+:("Add Cluster".baseRouteMenuItem) else defaultItems diff --git a/app/views/broker/brokerList.scala.html b/app/views/broker/brokerList.scala.html index 737151e08..582a03d0c 100644 --- a/app/views/broker/brokerList.scala.html +++ b/app/views/broker/brokerList.scala.html @@ -5,11 +5,10 @@ @import kafka.manager.model.ActorModel.BrokerIdentity @import scalaz.{\/} @(cluster:String, errorOrBrokers: kafka.manager.ApiError \/ kafka.manager.BrokerListExtended -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Brokers","",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Brokers","",menus.clusterMenus(cluster)( errorOrBrokers.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/broker/brokerListContent.scala.html b/app/views/broker/brokerListContent.scala.html index adfd9a373..4ad5abdcf 100644 --- a/app/views/broker/brokerListContent.scala.html +++ b/app/views/broker/brokerListContent.scala.html @@ -3,7 +3,7 @@ * See accompanying LICENSE file. *@ @import kafka.manager.model.ActorModel.BrokerIdentity -@(cluster:String, brokerListExtended: kafka.manager.BrokerListExtended) +@(cluster:String, brokerListExtended: kafka.manager.BrokerListExtended)(implicit messages: play.api.i18n.Messages) diff --git a/app/views/broker/brokerView.scala.html b/app/views/broker/brokerView.scala.html index 4186b91f5..425a6f34d 100644 --- a/app/views/broker/brokerView.scala.html +++ b/app/views/broker/brokerView.scala.html @@ -4,11 +4,10 @@ *@ @import scalaz.{\/} @(cluster:String, brokerId: Int, errorOrBrokerView: kafka.manager.ApiError \/ kafka.manager.model.ActorModel.BVView -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Brokers","",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Brokers","",menus.clusterMenus(cluster)( errorOrBrokerView.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/broker/brokerViewContent.scala.html b/app/views/broker/brokerViewContent.scala.html index adc207d42..f3c6c98d8 100644 --- a/app/views/broker/brokerViewContent.scala.html +++ b/app/views/broker/brokerViewContent.scala.html @@ -2,7 +2,7 @@ * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ -@(cluster: String, brokerId: Int, brokerView :kafka.manager.model.ActorModel.BVView) +@(cluster: String, brokerId: Int, brokerView :kafka.manager.model.ActorModel.BVView)(implicit messages: play.api.i18n.Messages) @renderBrokerMetrics = { @if(brokerView.clusterContext.clusterFeatures.features(kafka.manager.features.KMJMXMetricsFeature)) { diff --git a/app/views/cluster/addCluster.scala.html b/app/views/cluster/addCluster.scala.html index 06ff7862c..f7e38282e 100644 --- a/app/views/cluster/addCluster.scala.html +++ b/app/views/cluster/addCluster.scala.html @@ -2,13 +2,13 @@ * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ -@(addClusterForm: Form[kafka.manager.model.ClusterConfig]) +@(addClusterForm: Form[kafka.manager.model.ClusterConfig])(implicit messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.defaultMenu(views.html.navigation.menuNav("Cluster","Add Cluster",models.navigation.Menus.indexMenu)) + @views.html.navigation.defaultMenu(views.html.navigation.menuNav("Cluster","Add Cluster",menus.indexMenu)) } @checkboxWithLink(field: play.api.data.Field) = { diff --git a/app/views/cluster/clusterList.scala.html b/app/views/cluster/clusterList.scala.html index 681b013be..4d92cd89c 100644 --- a/app/views/cluster/clusterList.scala.html +++ b/app/views/cluster/clusterList.scala.html @@ -2,7 +2,7 @@ * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ -@(clusters: IndexedSeq[kafka.manager.model.ClusterConfig])(implicit af: features.ApplicationFeatures) +@(clusters: IndexedSeq[kafka.manager.model.ClusterConfig])(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages) @import b3.vertical.fieldConstructor diff --git a/app/views/cluster/clusterView.scala.html b/app/views/cluster/clusterView.scala.html index 8b4c5ccb6..a370f8e77 100644 --- a/app/views/cluster/clusterView.scala.html +++ b/app/views/cluster/clusterView.scala.html @@ -4,11 +4,10 @@ *@ @import scalaz.{\/} @(cluster: String, errorOrClusterView: kafka.manager.ApiError \/ kafka.manager.model.ActorModel.CMView -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Cluster","Summary",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Cluster","Summary",menus.clusterMenus(cluster)( errorOrClusterView.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/cluster/clusterViewContent.scala.html b/app/views/cluster/clusterViewContent.scala.html index 33553a666..629d7436f 100644 --- a/app/views/cluster/clusterViewContent.scala.html +++ b/app/views/cluster/clusterViewContent.scala.html @@ -2,7 +2,7 @@ * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ -@(cluster: String, clusterView: kafka.manager.model.ActorModel.CMView) +@(cluster: String, clusterView: kafka.manager.model.ActorModel.CMView)(implicit messages: play.api.i18n.Messages)

Cluster Information

diff --git a/app/views/cluster/pendingClusterList.scala.html b/app/views/cluster/pendingClusterList.scala.html index fcb88a3f2..7a16d8de9 100644 --- a/app/views/cluster/pendingClusterList.scala.html +++ b/app/views/cluster/pendingClusterList.scala.html @@ -2,7 +2,7 @@ * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ -@(clusters: IndexedSeq[kafka.manager.model.ClusterConfig]) +@(clusters: IndexedSeq[kafka.manager.model.ClusterConfig])(implicit messages: play.api.i18n.Messages) @import b3.vertical.fieldConstructor diff --git a/app/views/cluster/updateCluster.scala.html b/app/views/cluster/updateCluster.scala.html index ad5a00ae5..efe0db572 100644 --- a/app/views/cluster/updateCluster.scala.html +++ b/app/views/cluster/updateCluster.scala.html @@ -3,13 +3,14 @@ * See accompanying LICENSE file. *@ @import scalaz.{\/} -@(clusterName: String, errorOrForm: kafka.manager.ApiError \/ Form[models.form.ClusterOperation])(implicit request: RequestHeader) +@(clusterName: String, errorOrForm: kafka.manager.ApiError \/ Form[models.form.ClusterOperation] +)(implicit request: RequestHeader, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.defaultMenu(views.html.navigation.menuNav("Cluster","Update Cluster",models.navigation.Menus.indexMenu)) + @views.html.navigation.defaultMenu(views.html.navigation.menuNav("Cluster","Update Cluster",menus.indexMenu)) } @checkboxWithLink(field: play.api.data.Field) = { diff --git a/app/views/common/brokerMetrics.scala.html b/app/views/common/brokerMetrics.scala.html index 186130636..310d27480 100644 --- a/app/views/common/brokerMetrics.scala.html +++ b/app/views/common/brokerMetrics.scala.html @@ -1,4 +1,4 @@ -@(brokerMetrics: Option[kafka.manager.model.ActorModel.BrokerMetrics]) +@(brokerMetrics: Option[kafka.manager.model.ActorModel.BrokerMetrics])(implicit messages: play.api.i18n.Messages)
diff --git a/app/views/common/expandedBrokerMetrics.scala.html b/app/views/common/expandedBrokerMetrics.scala.html index 085723848..b8c6e8402 100644 --- a/app/views/common/expandedBrokerMetrics.scala.html +++ b/app/views/common/expandedBrokerMetrics.scala.html @@ -1,4 +1,4 @@ -@(brokerMetrics: Option[kafka.manager.model.ActorModel.BrokerMetrics]) +@(brokerMetrics: Option[kafka.manager.model.ActorModel.BrokerMetrics])(implicit messages: play.api.i18n.Messages)
diff --git a/app/views/common/resultOfCommand.scala.html b/app/views/common/resultOfCommand.scala.html index 032331df6..38ff898aa 100644 --- a/app/views/common/resultOfCommand.scala.html +++ b/app/views/common/resultOfCommand.scala.html @@ -8,7 +8,7 @@ errorOrSuccess: kafka.manager.ApiError \/ Any, actionTitle: String, successLink: models.FollowLink, - errorLink: models.FollowLink) + errorLink: models.FollowLink)(implicit messages: play.api.i18n.Messages) @link(followLink: FollowLink) = { diff --git a/app/views/common/resultsOfCommand.scala.html b/app/views/common/resultsOfCommand.scala.html index 7ac04a5e2..0409bb705 100644 --- a/app/views/common/resultsOfCommand.scala.html +++ b/app/views/common/resultsOfCommand.scala.html @@ -8,7 +8,7 @@ errorOrSuccess: IndexedSeq[kafka.manager.ApiError] \/ Unit, actionTitle: String, successLink: models.FollowLink, - errorLink: models.FollowLink) + errorLink: models.FollowLink)(implicit messages: play.api.i18n.Messages) @link(followLink: FollowLink) = { diff --git a/app/views/common/shortBrokerMetrics.scala.html b/app/views/common/shortBrokerMetrics.scala.html index 0687b0dff..4c21b966c 100644 --- a/app/views/common/shortBrokerMetrics.scala.html +++ b/app/views/common/shortBrokerMetrics.scala.html @@ -1,6 +1,6 @@ @import kafka.manager.model.ActorModel.{TopicIdentity, BVView} -@(brokersViews: Seq[BVView]) +@(brokersViews: Seq[BVView])(implicit messages: play.api.i18n.Messages)
Rate
diff --git a/app/views/consumer/consumedTopicView.scala.html b/app/views/consumer/consumedTopicView.scala.html index 6d0aba3a1..f0edadf35 100644 --- a/app/views/consumer/consumedTopicView.scala.html +++ b/app/views/consumer/consumedTopicView.scala.html @@ -7,11 +7,10 @@ consumer: String, topic: String, errorOrConsumedTopicState: kafka.manager.ApiError \/ kafka.manager.model.ActorModel.ConsumedTopicState -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic Consumption","",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic Consumption","",menus.clusterMenus(cluster)( errorOrConsumedTopicState.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/consumer/consumedTopicViewContent.scala.html b/app/views/consumer/consumedTopicViewContent.scala.html index 731759b7d..413bc4547 100644 --- a/app/views/consumer/consumedTopicViewContent.scala.html +++ b/app/views/consumer/consumedTopicViewContent.scala.html @@ -3,7 +3,8 @@ * See accompanying LICENSE file. *@ @import b3.vertical.fieldConstructor -@(cluster:String, consumer: String, topic: String, state: kafka.manager.model.ActorModel.ConsumedTopicState) +@(cluster:String, consumer: String, topic: String, state: kafka.manager.model.ActorModel.ConsumedTopicState +)(implicit messages: play.api.i18n.Messages) @getTopicCoverage(percentage: Int) = { diff --git a/app/views/consumer/consumerList.scala.html b/app/views/consumer/consumerList.scala.html index 1581dd460..ad4dfd8a5 100644 --- a/app/views/consumer/consumerList.scala.html +++ b/app/views/consumer/consumerList.scala.html @@ -4,11 +4,10 @@ *@ @import scalaz.{\/} @(cluster:String, errorOrConsumers: kafka.manager.ApiError \/ kafka.manager.ConsumerListExtended -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Consumer","List",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Consumer","List",menus.clusterMenus(cluster)( errorOrConsumers.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/consumer/consumerListContent.scala.html b/app/views/consumer/consumerListContent.scala.html index 6ea6f46a1..3ac7484b0 100644 --- a/app/views/consumer/consumerListContent.scala.html +++ b/app/views/consumer/consumerListContent.scala.html @@ -2,7 +2,7 @@ * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ -@(cluster: String, consumers: IndexedSeq[(String, Option[kafka.manager.model.ActorModel.ConsumerIdentity])], clusterContext: kafka.manager.model.ClusterContext) +@(cluster: String, consumers: IndexedSeq[(String, Option[kafka.manager.model.ActorModel.ConsumerIdentity])], clusterContext: kafka.manager.model.ClusterContext)(implicit messages: play.api.i18n.Messages) @getConsumedTopicSummary(state: kafka.manager.model.ActorModel.ConsumedTopicState) = { @state.percentageCovered match { diff --git a/app/views/consumer/consumerView.scala.html b/app/views/consumer/consumerView.scala.html index dbf721b69..0e48e9233 100644 --- a/app/views/consumer/consumerView.scala.html +++ b/app/views/consumer/consumerView.scala.html @@ -6,11 +6,10 @@ @(cluster:String, consumer: String, errorOrConsumerIdentity: kafka.manager.ApiError \/ kafka.manager.model.ActorModel.ConsumerIdentity -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Consumer","",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Consumer","",menus.clusterMenus(cluster)( errorOrConsumerIdentity.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/consumer/consumerViewContent.scala.html b/app/views/consumer/consumerViewContent.scala.html index 606fa6656..c386ecce6 100644 --- a/app/views/consumer/consumerViewContent.scala.html +++ b/app/views/consumer/consumerViewContent.scala.html @@ -3,7 +3,7 @@ * See accompanying LICENSE file. *@ @import b3.vertical.fieldConstructor -@(cluster:String, consumer: String, consumerIdentity: kafka.manager.model.ActorModel.ConsumerIdentity) +@(cluster:String, consumer: String, consumerIdentity: kafka.manager.model.ActorModel.ConsumerIdentity)(implicit messages: play.api.i18n.Messages) @getTopicCoverage(percentage: Int) = { @percentage match { diff --git a/app/views/index.scala.html b/app/views/index.scala.html index e8b6bbbd8..e60514141 100644 --- a/app/views/index.scala.html +++ b/app/views/index.scala.html @@ -4,11 +4,11 @@ *@ @import scalaz.{\/} @(errorOrClusters: kafka.manager.ApiError \/ kafka.manager.model.ActorModel.KMClusterList -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @main( "Kafka Manager", - views.html.navigation.defaultMenu(views.html.navigation.menuNav("Cluster","List",models.navigation.Menus.indexMenu)), + views.html.navigation.defaultMenu(views.html.navigation.menuNav("Cluster","List",menus.indexMenu)), views.html.navigation.breadCrumbs(models.navigation.BreadCrumbs.withView("Clusters"))) {
diff --git a/app/views/logkafka/createLogkafka.scala.html b/app/views/logkafka/createLogkafka.scala.html index 4f990aa5c..02e7c1c2c 100644 --- a/app/views/logkafka/createLogkafka.scala.html +++ b/app/views/logkafka/createLogkafka.scala.html @@ -4,15 +4,14 @@ *@ @import scalaz.{\/} @(cluster: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.CreateLogkafka], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import helper._ @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Logkafka","Create",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Logkafka","Create",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/logkafka/logkafkaList.scala.html b/app/views/logkafka/logkafkaList.scala.html index c74bc1abf..763079370 100644 --- a/app/views/logkafka/logkafkaList.scala.html +++ b/app/views/logkafka/logkafkaList.scala.html @@ -4,11 +4,10 @@ *@ @import scalaz.{\/} @(cluster:String, errorOrLogkafkas: kafka.manager.ApiError \/ (kafka.manager.LogkafkaListExtended, kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Logkafka","List",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Logkafka","List",menus.clusterMenus(cluster)( errorOrLogkafkas.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/logkafka/logkafkaListContent.scala.html b/app/views/logkafka/logkafkaListContent.scala.html index 46032b308..ee2d1ab0e 100644 --- a/app/views/logkafka/logkafkaListContent.scala.html +++ b/app/views/logkafka/logkafkaListContent.scala.html @@ -2,7 +2,8 @@ * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ -@(cluster: String, logkafkas: IndexedSeq[((String, Option[kafka.manager.model.ActorModel.LogkafkaIdentity]),Boolean)]) +@(cluster: String, logkafkas: IndexedSeq[((String, Option[kafka.manager.model.ActorModel.LogkafkaIdentity]),Boolean)] +)(implicit messages: play.api.i18n.Messages) @import b3.vertical.fieldConstructor; var row_num = 0 diff --git a/app/views/logkafka/logkafkaView.scala.html b/app/views/logkafka/logkafkaView.scala.html index 60588ba19..8c40e8f10 100644 --- a/app/views/logkafka/logkafkaView.scala.html +++ b/app/views/logkafka/logkafkaView.scala.html @@ -7,11 +7,10 @@ logkafka_id: String, log_path: String, errorOrLogkafkaIdentity: kafka.manager.ApiError \/ (kafka.manager.model.ActorModel.LogkafkaIdentity, kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Logkafka","",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Logkafka","",menus.clusterMenus(cluster)( errorOrLogkafkaIdentity.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/logkafka/logkafkaViewContent.scala.html b/app/views/logkafka/logkafkaViewContent.scala.html index 9c23e26f5..a77e1d843 100644 --- a/app/views/logkafka/logkafkaViewContent.scala.html +++ b/app/views/logkafka/logkafkaViewContent.scala.html @@ -3,7 +3,8 @@ * See accompanying LICENSE file. *@ @import b3.vertical.fieldConstructor -@(cluster:String, logkafka_id: String, log_path: String, logkafkaIdentity: kafka.manager.model.ActorModel.LogkafkaIdentity) +@(cluster:String, logkafka_id: String, log_path: String, logkafkaIdentity: kafka.manager.model.ActorModel.LogkafkaIdentity +)(implicit messages: play.api.i18n.Messages)
diff --git a/app/views/logkafka/updateConfig.scala.html b/app/views/logkafka/updateConfig.scala.html index 24c1d0571..23cb05ec8 100644 --- a/app/views/logkafka/updateConfig.scala.html +++ b/app/views/logkafka/updateConfig.scala.html @@ -5,15 +5,14 @@ @import scalaz.{\/} @(cluster: String, logkafka_id: String, log_path: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.UpdateLogkafkaConfig], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import helper._ @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Logkafka","Update Config",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Logkafka","Update Config",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/main.scala.html b/app/views/main.scala.html index c1a2ae4d9..3a1998a07 100644 --- a/app/views/main.scala.html +++ b/app/views/main.scala.html @@ -9,15 +9,15 @@ @title - + @@ -30,8 +30,8 @@ @content
- - + + diff --git a/app/views/preferredReplicaElection.scala.html b/app/views/preferredReplicaElection.scala.html index 309eb39d9..4d995cb01 100644 --- a/app/views/preferredReplicaElection.scala.html +++ b/app/views/preferredReplicaElection.scala.html @@ -7,11 +7,10 @@ @(cluster:String, errorOrStatus: kafka.manager.ApiError \/ Option[kafka.manager.model.ActorModel.PreferredReplicaElection], operationForm: Form[models.form.PreferredReplicaElectionOperation] -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { -@views.html.navigation.clusterMenu(cluster,"Preferred Replica Election","",models.navigation.Menus.clusterMenus(cluster)( - af, +@views.html.navigation.clusterMenu(cluster,"Preferred Replica Election","",menus.clusterMenus(cluster)( errorOrStatus.toOption.flatten.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/reassignPartitions.scala.html b/app/views/reassignPartitions.scala.html index 9a4aabfcb..4b1e874a7 100644 --- a/app/views/reassignPartitions.scala.html +++ b/app/views/reassignPartitions.scala.html @@ -5,11 +5,10 @@ @import scalaz.{\/} @import b3.vertical.fieldConstructor @(cluster:String, errorOrStatus: kafka.manager.ApiError \/ Option[kafka.manager.model.ActorModel.ReassignPartitions] -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { -@views.html.navigation.clusterMenu(cluster,"Reassign Partitions","",models.navigation.Menus.clusterMenus(cluster)( - af, +@views.html.navigation.clusterMenu(cluster,"Reassign Partitions","",menus.clusterMenus(cluster)( errorOrStatus.toOption.flatten.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/addPartitions.scala.html b/app/views/topic/addPartitions.scala.html index 53e36c78b..c47048a27 100644 --- a/app/views/topic/addPartitions.scala.html +++ b/app/views/topic/addPartitions.scala.html @@ -4,15 +4,14 @@ *@ @import scalaz.{\/} @(cluster: String, topic: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.AddTopicPartitions], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import helper._ @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","Add Partitions",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","Add Partitions",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/addPartitionsToMultipleTopics.scala.html b/app/views/topic/addPartitionsToMultipleTopics.scala.html index cab6c55b9..76f7080c4 100644 --- a/app/views/topic/addPartitionsToMultipleTopics.scala.html +++ b/app/views/topic/addPartitionsToMultipleTopics.scala.html @@ -4,15 +4,14 @@ *@ @import scalaz.{\/} @(cluster: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.AddMultipleTopicsPartitions], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import helper._ @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topics","Add Partitions to Topics",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topics","Add Partitions to Topics",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/confirmAssignment.scala.html b/app/views/topic/confirmAssignment.scala.html index 1d44c2d97..ed637ca00 100644 --- a/app/views/topic/confirmAssignment.scala.html +++ b/app/views/topic/confirmAssignment.scala.html @@ -7,11 +7,10 @@ @(cluster: String, topic: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.GenerateAssignment], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","Confirm Assignment",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","Confirm Assignment",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/confirmMultipleAssignments.scala.html b/app/views/topic/confirmMultipleAssignments.scala.html index c2f6e2135..fed095982 100644 --- a/app/views/topic/confirmMultipleAssignments.scala.html +++ b/app/views/topic/confirmMultipleAssignments.scala.html @@ -6,11 +6,10 @@ @import b3.vertical.fieldConstructor @(cluster: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.GenerateMultipleAssignments], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","Confirm Assignments",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","Confirm Assignments",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/createTopic.scala.html b/app/views/topic/createTopic.scala.html index 82a378833..0e3bf192c 100644 --- a/app/views/topic/createTopic.scala.html +++ b/app/views/topic/createTopic.scala.html @@ -4,15 +4,14 @@ *@ @import scalaz.{\/} @(cluster: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.CreateTopic], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import helper._ @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","Create",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","Create",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/manualAssignments.scala.html b/app/views/topic/manualAssignments.scala.html index 8b20e8def..6ede3e4e4 100644 --- a/app/views/topic/manualAssignments.scala.html +++ b/app/views/topic/manualAssignments.scala.html @@ -17,10 +17,11 @@ brokers: BrokerListExtended, brokersViews: Map[Int, BVView], formErrors: Seq[FormError] -)(implicit af: features.ApplicationFeatures, cf: kafka.manager.features.ClusterFeatures) +)(implicit af: features.ApplicationFeatures, +cf: kafka.manager.features.ClusterFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { -@views.html.navigation.clusterMenu(cluster,"Topic","Manual Partition Assignments",models.navigation.Menus.clusterMenus(cluster)) +@views.html.navigation.clusterMenu(cluster,"Topic","Manual Partition Assignments",menus.clusterMenus(cluster)) } @color(brokerId: Int) = @{ java.security.MessageDigest.getInstance("MD5").digest("" + brokerId).map("%02X".format(_)).mkString.substring(0,6) diff --git a/app/views/topic/runMultipleAssignments.scala.html b/app/views/topic/runMultipleAssignments.scala.html index 51563c55c..eb7a0b458 100644 --- a/app/views/topic/runMultipleAssignments.scala.html +++ b/app/views/topic/runMultipleAssignments.scala.html @@ -6,11 +6,10 @@ @import b3.vertical.fieldConstructor @(cluster: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.RunMultipleAssignments], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","Confirm Assignments",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","Confirm Assignments",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/topicList.scala.html b/app/views/topic/topicList.scala.html index 1cb92a1d4..083cb3cb0 100644 --- a/app/views/topic/topicList.scala.html +++ b/app/views/topic/topicList.scala.html @@ -4,11 +4,10 @@ *@ @import scalaz.{\/} @(cluster:String, errorOrTopics: kafka.manager.ApiError \/ kafka.manager.TopicListExtended -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","List",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","List",menus.clusterMenus(cluster)( errorOrTopics.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/topicListContent.scala.html b/app/views/topic/topicListContent.scala.html index 39a113b69..0d0590113 100644 --- a/app/views/topic/topicListContent.scala.html +++ b/app/views/topic/topicListContent.scala.html @@ -7,7 +7,7 @@ topicsUnderReassignment: IndexedSeq[String], pollConsumers: Boolean, displayTopicSize: Boolean -) +)(implicit messages: play.api.i18n.Messages) @getDeletedLevel(deleted: Boolean) = { @deleted match { diff --git a/app/views/topic/topicView.scala.html b/app/views/topic/topicView.scala.html index 98d115b59..d4a38e7ce 100644 --- a/app/views/topic/topicView.scala.html +++ b/app/views/topic/topicView.scala.html @@ -7,11 +7,10 @@ topic: String, errorOrTopicIdentity: kafka.manager.ApiError \/ kafka.manager.model.ActorModel.TopicIdentity, optConsumerList: Option[Iterable[String]] -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","",menus.clusterMenus(cluster)( errorOrTopicIdentity.toOption.map(_.clusterContext.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/app/views/topic/topicViewContent.scala.html b/app/views/topic/topicViewContent.scala.html index e68a5de19..171ddfd3b 100644 --- a/app/views/topic/topicViewContent.scala.html +++ b/app/views/topic/topicViewContent.scala.html @@ -7,7 +7,7 @@ topic: String, topicIdentity: kafka.manager.model.ActorModel.TopicIdentity, consumerList: Iterable[String] -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages) @getUnderReplicatedLevel(percentage: Int) = { @percentage match { diff --git a/app/views/topic/updateConfig.scala.html b/app/views/topic/updateConfig.scala.html index 49ea86463..9054a0c99 100644 --- a/app/views/topic/updateConfig.scala.html +++ b/app/views/topic/updateConfig.scala.html @@ -4,15 +4,14 @@ *@ @import scalaz.{\/} @(cluster: String, topic: String, errorOrForm: kafka.manager.ApiError \/ (Form[models.form.UpdateTopicConfig], kafka.manager.model.ClusterContext) -)(implicit af: features.ApplicationFeatures) +)(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, menus: models.navigation.Menus) @import helper._ @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { - @views.html.navigation.clusterMenu(cluster,"Topic","Update Config",models.navigation.Menus.clusterMenus(cluster)( - af, + @views.html.navigation.clusterMenu(cluster,"Topic","Update Config",menus.clusterMenus(cluster)( errorOrForm.toOption.map(_._2.clusterFeatures).getOrElse(kafka.manager.features.ClusterFeatures.default))) } diff --git a/build.sbt b/build.sbt index 1a0ee4f86..0fa0307c9 100644 --- a/build.sbt +++ b/build.sbt @@ -22,26 +22,26 @@ libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.3.14", "com.typesafe.akka" %% "akka-slf4j" % "2.3.14", "com.google.code.findbugs" % "jsr305" % "2.0.1", - "org.webjars" %% "webjars-play" % "2.3.0-2", - "org.webjars" % "bootstrap" % "3.3.4", + "org.webjars" %% "webjars-play" % "2.4.0", + "org.webjars" % "bootstrap" % "3.3.5", "org.webjars" % "jquery" % "2.1.4", - "org.webjars" % "backbonejs" % "1.1.2-4", + "org.webjars" % "backbonejs" % "1.2.3", "org.webjars" % "underscorejs" % "1.8.3", "org.webjars" % "dustjs-linkedin" % "2.6.1", - "org.apache.curator" % "curator-framework" % "2.7.1" exclude("log4j","log4j") force(), - "org.apache.curator" % "curator-recipes" % "2.7.1" exclude("log4j","log4j") force(), + "org.apache.curator" % "curator-framework" % "2.9.1" exclude("log4j","log4j") force(), + "org.apache.curator" % "curator-recipes" % "2.9.1" exclude("log4j","log4j") force(), "org.json4s" %% "json4s-jackson" % "3.2.11", "org.json4s" %% "json4s-scalaz" % "3.2.11", - "org.slf4j" % "log4j-over-slf4j" % "1.7.7", - "com.adrianhurt" %% "play-bootstrap3" % "0.4", + "org.slf4j" % "log4j-over-slf4j" % "1.7.12", + "com.adrianhurt" %% "play-bootstrap3" % "0.4.5-P24", "org.clapper" %% "grizzled-slf4j" % "1.0.2", - "org.apache.kafka" %% "kafka" % "0.8.2.1" exclude("log4j","log4j") force(), + "org.apache.kafka" %% "kafka" % "0.8.2.2" exclude("log4j","log4j") force(), "org.scalatest" %% "scalatest" % "2.2.1" % "test", - "org.apache.curator" % "curator-test" % "2.7.1" % "test", + "org.apache.curator" % "curator-test" % "2.9.1" % "test", "com.yammer.metrics" % "metrics-core" % "2.1.2" force() ) -net.virtualvoid.sbt.graph.Plugin.graphSettings +routesGenerator := InjectedRoutesGenerator LessKeys.compress in Assets := true @@ -51,7 +51,7 @@ includeFilter in (Assets, LessKeys.less) := "*.less" lazy val root = (project in file(".")).enablePlugins(PlayScala) -ScoverageSbtPlugin.ScoverageKeys.coverageExcludedPackages := ";controllers.*;views.*;models.*" +coverageExcludedPackages := ";controllers.*;views.*;models.*" /* * Allow packaging as part of the build diff --git a/conf/application.conf b/conf/application.conf index 2582539fb..a84971d73 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -9,47 +9,16 @@ # ~~~~~ # The secret key is used to secure cryptographics functions. # If you deploy your application to several instances be sure to use the same key! -application.secret="changeme" -application.secret=${?APPLICATION_SECRET} +play.crypto.secret="^