@* * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ @import kafka.manager.model.ActorModel.ConsumerType @import models.form.ReassignPartitionOperation @import models.form.ReassignPartitionOperation.ForceRunAssignment @import kafka.manager.utils.LongFormatted @(cluster:String , topic: String , topicIdentity: kafka.manager.model.ActorModel.TopicIdentity , consumerList: Iterable[(String, ConsumerType)] , reassignPartitionOperation: ReassignPartitionOperation )(implicit af: features.ApplicationFeatures, messages: play.api.i18n.Messages, request:RequestHeader) @getUnderReplicatedLevel(percentage: Int) = { @percentage match { case i if i > 50 => {table-danger} case i if i > 0 => {table-warning} case i => {} } } @getPreferredReplicasLevel(percentage: Int) = { @percentage match { case i if i > 50 && i<=75 => {table-warning} case i if i <= 50 => {table-danger} case i => {} } } @getBrokersSkewedLevel(percentage: Int) = { @percentage match { case i if i > 0 && i <= 33 => {table-warning} case i if i >= 34 => {table-danger} case i => {} } } @getBrokersLeaderSkewedLevel(percentage: Int) = { @percentage match { case i if i > 0 && i <= 33 => {table-warning} case i if i >= 34 => {table-danger} case i => {} } } @getBrokersSpreadLevel(percentage: Int) = { @percentage match { case i if i > 50 && i<=75 => {table-warning} case i if i <= 50 => {table-danger} case i => {} } } @getPartitionLeaderLevel(leader: Int) = { @leader match { case i if i < 0 => {table-danger} case i => {} } } @getIsUnderReplicatedLevel(underReplicated: Boolean) = { @underReplicated match { case true => {table-warning} case false => {} } } @getIsPreferredLeaderLevel(preferredReplica: Boolean) = { @preferredReplica match { case false => {table-warning} case true => {} } } @getBrokerIsSkewedLevel(isSkewed: Boolean) = { @isSkewed match { case true => {table-warning} case false => {} } } @renderTopicMetrics = { @if(topicIdentity.clusterContext.clusterFeatures.features(kafka.manager.features.KMJMXMetricsFeature)) { @views.html.common.brokerMetrics(topicIdentity.metrics) } else { } } @renderConsumerList = { @if(topicIdentity.clusterContext.config.pollConsumers){ @for((c:String, ct: ConsumerType) <- consumerList) { }
@c @ct.toString
} else { } }

Topic Summary

@if(topicIdentity.clusterContext.config.jmxEnabled && topicIdentity.clusterContext.config.displaySizeEnabled){ }
Replication @topicIdentity.replicationFactor
Number of Partitions @topicIdentity.partitions
Sum of partition offsets @topicIdentity.summedTopicOffsets.formattedAsDecimal
Total number of Brokers @topicIdentity.numBrokers
Number of Brokers for Topic @topicIdentity.topicBrokers
Preferred Replicas % @topicIdentity.preferredReplicasPercentage
Brokers Skewed % @topicIdentity.brokersSkewPercentage
Brokers Leader Skewed % @topicIdentity.brokersLeaderSkewPercentage
Brokers Spread % @topicIdentity.brokersSpreadPercentage
Under-replicated % @topicIdentity.underReplicatedPercentage
Leader Size @topicIdentity.size
@if(!topicIdentity.config.isEmpty) { @for( (k,v) <- topicIdentity.config) { }
ConfigValue
@k @v
}

Metrics

@renderTopicMetrics
@features.app(features.KMTopicManagerFeature) {

Operations

@if(topicIdentity.clusterContext.clusterFeatures.features(kafka.manager.features.KMDeleteTopicFeature)) { } @features.app(features.KMReassignPartitionsFeature) { } @features.app(features.KMReassignPartitionsFeature) { }
Delete Topic @b4.vertical.form(routes.ReassignPartitions.handleOperation(cluster,topic)) { implicit fc => @reassignPartitionOperation match { case ForceRunAssignment => {
@b4.submit('class -> "btn btn-primary btn-block"){ Force Reassign Partitions }
} case _ => {
@b4.submit('class -> "btn btn-primary btn-block"){ Reassign Partitions }
} } }
Generate Partition Assignments
Add Partitions Update Config Manual Partition Assignments
}

Partitions by Broker

@for(btp <- topicIdentity.partitionsByBroker) { }
Broker# of Partitions# as LeaderPartitionsSkewed?Leader Skewed?
@btp.id @btp.partitions.size @btp.leaders.size @btp.partitions.mkString("(",",",")") @btp.isSkewed @btp.isLeaderSkewed

Consumers consuming from this topic

@renderConsumerList

Partition Information

@if(topicIdentity.clusterContext.config.jmxEnabled && topicIdentity.clusterContext.config.displaySizeEnabled){ } @for((_,tpi) <- topicIdentity.partitionsIdentity.toIndexedSeq.sortBy(_._2.partNum)) { @if(topicIdentity.clusterContext.config.jmxEnabled && topicIdentity.clusterContext.config.displaySizeEnabled){ } }
Partition Latest Offset Leader Replicas In Sync Replicas Preferred Leader? Under Replicated?Leader Size
@tpi.partNum @tpi.latestOffset.map(_.formattedAsDecimal).getOrElse(" ") @tpi.leader @tpi.replicas.mkString("(", ",", ")") @tpi.isr.mkString("(", ",", ")") @tpi.isPreferredLeader @tpi.isUnderReplicated @tpi.size