mirror of
https://github.com/apache/rocketmq-dashboard.git
synced 2025-09-10 11:40:01 +08:00
* fix:Fixed the issue that normal messages in version v4 are not showed * feat:support retryMaxTimes args set --------- Co-authored-by: yuanziwei <yuanziwei@xiaomi.com> Co-authored-by: yuanziwei.akai <yuanziwei.akai@bytedance.com>
571 lines
31 KiB
HTML
571 lines
31 KiB
HTML
<!--
|
|
~ Licensed to the Apache Software Foundation (ASF) under one or more
|
|
~ contributor license agreements. See the NOTICE file distributed with
|
|
~ this work for additional information regarding copyright ownership.
|
|
~ The ASF licenses this file to You under the Apache License, Version 2.0
|
|
~ (the "License"); you may not use this file except in compliance with
|
|
~ the License. You may obtain a copy of the License at
|
|
~
|
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
|
~
|
|
~ Unless required by applicable law or agreed to in writing, software
|
|
~ distributed under the License is distributed on an "AS IS" BASIS,
|
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
~ See the License for the specific language governing permissions and
|
|
~ limitations under the License.
|
|
-->
|
|
<div class="container-fluid" id="deployHistoryList">
|
|
<div class="modal-body">
|
|
<div class="myloader centered" id="loaderConsumer">
|
|
</div>
|
|
<div class="row">
|
|
<form class="form-inline pull-left col-sm-10">
|
|
<div class="form-group form-group-sm">
|
|
<label>{{ 'SUBSCRIPTION_GROUP' | translate}}:</label>
|
|
<input type="text" class="form-control" ng-model="filterStr">
|
|
</div>
|
|
<md-checkbox aria-label="Checkbox" ng-model="filterNormal" class="md-primary">{{'NORMAL' | translate}}
|
|
</md-checkbox>
|
|
<md-checkbox aria-label="Checkbox" ng-show="rmqVersion" ng-model="filterFIFO" class="md-primary">{{'FIFO' | translate}}
|
|
</md-checkbox>
|
|
<md-checkbox aria-label="Checkbox" ng-model="filterSystem" class="md-primary">{{'SYSTEM' | translate}}
|
|
</md-checkbox>
|
|
<button class="btn btn-raised btn-sm btn-primary" type="button" ng-show="{{writeOperationEnabled}}"
|
|
ng-click="openAddDialog()">{{'ADD' | translate}}/ {{'UPDATE' | translate}}
|
|
</button>
|
|
<button class="btn btn-raised btn-sm btn-primary" type="button" ng-click="refreshConsumerData()">
|
|
{{'REFRESH' | translate}}
|
|
</button>
|
|
<md-switch class="md-primary" md-no-ink aria-label="Switch No Ink" ng-model="intervalProcessSwitch">
|
|
{{'AUTO_REFRESH' | translate}}
|
|
</md-switch>
|
|
</form>
|
|
</div>
|
|
<br>
|
|
<div>
|
|
<div id="deployList" class="row">
|
|
<table class="table table-bordered text-middle">
|
|
<tr>
|
|
<th class="text-center"><a ng-click="sortByKey('group')">{{ 'SUBSCRIPTION_GROUP' | translate}}</a></th>
|
|
<th class="text-center"><a ng-click="sortByKey('count')">{{ 'QUANTITY' | translate}}</a></th>
|
|
<th class="text-center">{{ 'VERSION' | translate}}</th>
|
|
<th class="text-center">{{ 'TYPE' | translate}}</th>
|
|
<th class="text-center">{{ 'MODE' | translate}}</th>
|
|
<th class="text-center"><a ng-click="sortByKey('consumeTps')">TPS</a></th>
|
|
<th class="text-center"><a ng-click="sortByKey('diffTotal')">{{ 'DELAY' | translate}}</a></th>
|
|
<th class="text-center">{{ 'OPERATION' | translate}}</th>
|
|
</tr>
|
|
<tr ng-repeat="consumerGroup in consumerGroupShowList"
|
|
ng-init="sysFlag = consumerGroup.group.startsWith('%SYS%')">
|
|
<td class="text-center"><font color={{sysFlag?"red":""}}>
|
|
{{sysFlag?consumerGroup.group.substring(5):consumerGroup.group}}</font></td>
|
|
<td class="text-center">{{consumerGroup.count}}</td>
|
|
<td class="text-center">{{consumerGroup.version}}</td>
|
|
<td class="text-center">{{consumerGroup.consumeType}}</td>
|
|
<td class="text-center">{{consumerGroup.messageModel}}</td>
|
|
<td class="text-center">{{consumerGroup.consumeTps}}</td>
|
|
<td class="text-center">{{consumerGroup.diffTotal}}</td>
|
|
<td class="text-left">
|
|
<button name="client" ng-click="client(consumerGroup.group, consumerGroup.address)"
|
|
class="btn btn-raised btn-sm btn-primary"
|
|
type="button">{{'CLIENT' | translate}}
|
|
</button>
|
|
<button name="client" ng-click="detail(consumerGroup.group, consumerGroup.address)"
|
|
class="btn btn-raised btn-sm btn-primary"
|
|
type="button">{{'CONSUME_DETAIL' | translate}}
|
|
</button>
|
|
<button name="client" ng-click="updateConfigDialog(consumerGroup.group)"
|
|
class="btn btn-raised btn-sm btn-primary" type="button">{{'CONFIG' | translate}}
|
|
</button>
|
|
<!--<button name="client" ng-click="monitor(consumerGroup.group)"-->
|
|
<!--class="btn btn-sm btn-primary" type="button">Monitor Config-->
|
|
<!--</button>-->
|
|
<button name="client" ng-click="delete(consumerGroup.group)"
|
|
class="btn btn-raised btn-sm btn-danger"
|
|
ng-show="{{!sysFlag && writeOperationEnabled}}"
|
|
type="button">{{'DELETE' | translate}}
|
|
</button>
|
|
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<tm-pagination conf="paginationConf"></tm-pagination>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="modal consumerClientModal fade" role="dialog" tabindex="-1" aria-hidden="true"
|
|
aria-labelledby="config-modal-label">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button class="close" type="button" data-dismiss="modal">×</button>
|
|
<h4 id="config-modal-label" class="modal-title">
|
|
consumerClientInfo
|
|
</h4>
|
|
</div>
|
|
<div class="modal-body limit_height">
|
|
<table class="table table-bordered">
|
|
<tr ng-repeat="(key, value) in consumerClientInfo.properties">
|
|
<td>{{key}}</td>
|
|
<td>{{value}}</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<div class="col-md-12 text-center">
|
|
<button type="button" class="btn btn-raised" data-dismiss="modal">{{ 'CLOSE' | translate }}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/ng-template" id="consumerClientDialog">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">{{ngDialogData.clientId}}</h4>
|
|
</div>
|
|
<div class="modal-body ">
|
|
<table class="table table-bordered" style="table-layout: fixed">
|
|
<tr ng-repeat="(key, value) in ngDialogData.consumerClientInfo.properties">
|
|
<td style="word-wrap: break-word">{{key}}</td>
|
|
<td style="word-wrap: break-word">{{value}}</td>
|
|
</tr>
|
|
</table>
|
|
<table class="table table-bordered " style="table-layout: fixed">
|
|
<tr ng-repeat="(key, value) in ngDialogData.consumerClientInfo.statusTable">
|
|
<td style="word-wrap: break-word">{{key}}</td>
|
|
<td style="word-wrap: break-word">{{value}}</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<div class="ngdialog-buttons">
|
|
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
ng-click="closeThisDialog('Cancel')">{{ 'CLOSE' | translate }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
|
|
<!--消费(订阅)者详情-->
|
|
<script type="text/ng-template" id="clientInfoDialog">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">[{{ngDialogData.consumerGroupName}}]{{'CLIENT'|translate}}</h4>
|
|
</div>
|
|
<div class="modal-body ">
|
|
<form class="form-horizontal" novalidate>
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<th class="text-center">ClientId</th>
|
|
<th class="text-center">ClientAddr</th>
|
|
<th class="text-center">Language</th>
|
|
<th class="text-center">Version</th>
|
|
</tr>
|
|
<tr ng-repeat="conn in ngDialogData.data.connectionSet">
|
|
<td class="text-center">{{conn.clientId}}</td>
|
|
<td class="text-center">{{conn.clientAddr}}</td>
|
|
<td class="text-center">{{conn.language}}</td>
|
|
<td class="text-center">{{conn.versionDesc}}</td>
|
|
</tr>
|
|
</table>
|
|
<p>Below is subscription:</p>
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<th class="text-center">Topic</th>
|
|
<th class="text-center">SubExpression</th>
|
|
</tr>
|
|
<tr ng-repeat="(topic,topicDetail) in ngDialogData.data.subscriptionTable">
|
|
<td class="text-center">{{topic}}</td>
|
|
<td class="text-center">{{topicDetail.subString}}</td>
|
|
</tr>
|
|
</table>
|
|
<p>ConsumeType: {{ngDialogData.data.consumeType}}</p>
|
|
<p>MessageModel: {{ngDialogData.data.messageModel}}</p>
|
|
<p>ConsumeFromWhere: {{ngDialogData.data.consumeFromWhere}}</p>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<div class="ngdialog-buttons">
|
|
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
ng-click="closeThisDialog('Cancel')">{{ 'CLOSE' | translate }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<!--变更 消费(订阅)者配置-->
|
|
<script type="text/ng-template" id="consumerModifyDialog">
|
|
<div>
|
|
<div>
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">{{'SUBSCRIPTION_CHANGE'|translate}}</h4>
|
|
</div>
|
|
<div class="modal-body " ng-repeat="item in ngDialogData.consumerRequestList">
|
|
<form id="addAppForm" name="addAppForm" class="form-horizontal" novalidate>
|
|
<div class="form-group" ng-hide="ngDialogData.bIsUpdate">
|
|
<label class="control-label col-sm-3">clusterName:</label>
|
|
<div class="col-sm-9">
|
|
<select name="mySelectClusterNameList" multiple chosen
|
|
ng-model="item.clusterNameList"
|
|
ng-options="clusterNameItem for clusterNameItem in ngDialogData.allClusterNameList">
|
|
<option value=""></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">brokerName:</label>
|
|
<div class="col-sm-9">
|
|
<select name="mySelectBrokerNameList" multiple chosen
|
|
ng-disabled="ngDialogData.bIsUpdate"
|
|
ng-model="item.brokerNameList"
|
|
ng-options="brokerNameItem for brokerNameItem in ngDialogData.allBrokerNameList">
|
|
<option value=""></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">groupName:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.groupName" type="text"
|
|
ng-disabled="ngDialogData.bIsUpdate" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">consumeEnable:</label>
|
|
<div class="col-sm-9">
|
|
<md-switch class="md-primary" ng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
aria-label="Switch No Ink" ng-model="item.subscriptionGroupConfig.consumeEnable">
|
|
</md-switch>
|
|
<!--<input class="form-control" ng-model="item.subscriptionGroupConfig.consumeEnable"-->
|
|
<!--type="text"-->
|
|
<!--required/>-->
|
|
<!--<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>-->
|
|
</div>
|
|
</div>
|
|
<!--<div class="form-group">-->
|
|
<!--<label class="control-label col-sm-4">consumeFromMinEnable:</label>-->
|
|
<!--<div class="col-sm-8">-->
|
|
<!--<md-switch class="md-primary" md-no-ink aria-label="Switch No Ink" ng-model="item.subscriptionGroupConfig.consumeFromMinEnable">-->
|
|
<!--</md-switch>-->
|
|
<!--</div>-->
|
|
<!--</div>-->
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">consumeBroadcastEnable:</label>
|
|
<div class="col-sm-9">
|
|
<md-switch class="md-primary" ng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
aria-label="Switch No Ink"
|
|
ng-model="item.subscriptionGroupConfig.consumeBroadcastEnable">
|
|
</md-switch>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">retryQueueNums:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.retryQueueNums"
|
|
type="text" ng-disabled="{{!ngDialogData.writeOperationEnabled}}"
|
|
required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">brokerId:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.brokerId" type="text"
|
|
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">retryMaxTimes:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.retryMaxTimes" type="text"
|
|
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">whichBrokerWhenConsumeSlowly:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control"
|
|
ng-model="item.subscriptionGroupConfig.whichBrokerWhenConsumeSlowly" type="text"
|
|
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<div class="modal-footer">
|
|
<div class="ngdialog-buttons">
|
|
<button type="button" class="ngdialog-button ngdialog-button-primary"
|
|
ng-disabled="addAppForm.$invalid"
|
|
ng-show="{{ngDialogData.writeOperationEnabled}}"
|
|
ng-click="postConsumerRequest(item)">{{ 'COMMIT' | translate }}
|
|
</button>
|
|
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
ng-click="closeThisDialog('Cancel')">{{ 'CLOSE' | translate }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/ng-template" id="consumerModifyDialogForV5">
|
|
<div>
|
|
<div>
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">{{'SUBSCRIPTION_CHANGE'|translate}}</h4>
|
|
</div>
|
|
<div class="modal-body " ng-repeat="item in ngDialogData.consumerRequestList">
|
|
<form id="addAppForm1" name="addAppForm" class="form-horizontal" novalidate>
|
|
<div class="form-group" ng-hide="ngDialogData.bIsUpdate">
|
|
<label class="control-label col-sm-3">clusterName:</label>
|
|
<div class="col-sm-9">
|
|
<select name="mySelectClusterNameList" multiple chosen
|
|
ng-model="item.clusterNameList"
|
|
ng-options="clusterNameItem for clusterNameItem in ngDialogData.allClusterNameList">
|
|
<option value=""></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">brokerName:</label>
|
|
<div class="col-sm-9">
|
|
<select name="mySelectBrokerNameList" multiple chosen
|
|
ng-disabled="ngDialogData.bIsUpdate"
|
|
ng-model="item.brokerNameList"
|
|
ng-options="brokerNameItem for brokerNameItem in ngDialogData.allBrokerNameList">
|
|
<option value=""></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">groupName:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.groupName" type="text"
|
|
ng-disabled="ngDialogData.bIsUpdate" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">consumeEnable:</label>
|
|
<div class="col-sm-9">
|
|
<md-switch class="md-primary" ng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
aria-label="Switch No Ink" ng-model="item.subscriptionGroupConfig.consumeEnable">
|
|
</md-switch>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">consumeOrderlyEnable:</label>
|
|
<div class="col-sm-9">
|
|
<md-switch class="md-primary custom-md-switch" eng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
aria-label="Switch No Ink" ng-model="item.subscriptionGroupConfig.consumeMessageOrderly">
|
|
</md-switch>
|
|
<span style="font-size: 12px;">[Pay Attention: FIFO ConsumerGroup Need Open 'consumeOrderlyEnable' Option]</span>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">consumeBroadcastEnable:</label>
|
|
<div class="col-sm-9">
|
|
<md-switch class="md-primary" ng-disabled="{{!ngDialogData.writeOperationEnabled}}" md-no-ink
|
|
aria-label="Switch No Ink"
|
|
ng-model="item.subscriptionGroupConfig.consumeBroadcastEnable">
|
|
</md-switch>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">retryQueueNums:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.retryQueueNums"
|
|
type="text" ng-disabled="{{!ngDialogData.writeOperationEnabled}}"
|
|
required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">brokerId:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.brokerId" type="text"
|
|
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">retryMaxTimes:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control" ng-model="item.subscriptionGroupConfig.retryMaxTimes" type="text"
|
|
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-3">whichBrokerWhenConsumeSlowly:</label>
|
|
<div class="col-sm-9">
|
|
<input class="form-control"
|
|
ng-model="item.subscriptionGroupConfig.whichBrokerWhenConsumeSlowly" type="text"
|
|
ng-disabled="{{!ngDialogData.writeOperationEnabled}}" required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<div class="modal-footer">
|
|
<div class="ngdialog-buttons">
|
|
<button type="button" class="ngdialog-button ngdialog-button-primary"
|
|
ng-disabled="addAppForm.$invalid"
|
|
ng-show="{{ngDialogData.writeOperationEnabled}}"
|
|
ng-click="postConsumerRequest(item)">{{ 'COMMIT' | translate }}
|
|
</button>
|
|
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
ng-click="closeThisDialog('Cancel')">{{ 'CLOSE' | translate }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</script>
|
|
|
|
<!--consumer monitor config-->
|
|
<script type="text/ng-template" id="consumerMonitorDialog">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">[{{ngDialogData.consumerGroupName}}]Monitor</h4>
|
|
</div>
|
|
<div class="modal-body ">
|
|
<form id="addConsumerConfigForm" name="addAppForm" class="form-horizontal" novalidate>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-4">minCount:</label>
|
|
<div class="col-sm-8">
|
|
<input class="form-control" ng-model="ngDialogData.data.minCount" type="text"
|
|
required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="control-label col-sm-4">maxDiffTotal:</label>
|
|
<div class="col-sm-8">
|
|
<input class="form-control" ng-model="ngDialogData.data.maxDiffTotal" type="text"
|
|
required/>
|
|
<span class="text-danger" ng-show="addAppForm.name.$error.required">编号不能为空.</span>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<div class="modal-footer">
|
|
<div class="ngdialog-buttons">
|
|
<button type="button" class="btn btn-primary"
|
|
ng-click="createOrUpdateConsumerMonitor()">更新
|
|
</button>
|
|
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
ng-click="closeThisDialog('Cancel')">关闭
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<!--删除 消费(订阅)者-->
|
|
<script type="text/ng-template" id="deleteConsumerDialog">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">[{{ngDialogData.consumerGroupName}}]Delete</h4>
|
|
</div>
|
|
<div class="modal-body ">
|
|
<div class="row">
|
|
<md-card-content class="active">
|
|
<label>broker:</label>
|
|
<select name="mySelect" multiple chosen
|
|
ng-model="selectedBrokerNameList"
|
|
ng-options="item for item in ngDialogData.allBrokerNameList"
|
|
required>
|
|
<option value=""></option>
|
|
</select>
|
|
</md-card-content>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<div class="ngdialog-buttons">
|
|
<button type="button" class="ngdialog-button ngdialog-button-primary"
|
|
ng-click="delete()">{{ 'DELETE' | translate }}
|
|
</button>
|
|
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
ng-click="closeThisDialog('Cancel')">{{ 'CLOSE' | translate }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
|
|
<!--消费(订阅)详情-->
|
|
<script type="text/ng-template" id="consumerTopicViewDialog">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">[{{ngDialogData.consumerGroupName}}]{{'CONSUME_DETAIL' | translate}}</h4>
|
|
</div>
|
|
<div class="modal-body " style="overflow: auto">
|
|
<table class="table table-bordered table-hover" ng-repeat="consumeDetail in ngDialogData.data">
|
|
<tbody>
|
|
<tr>
|
|
<td>
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<td><label>{{ 'TOPIC' | translate }}</label></td>
|
|
<td>{{consumeDetail.topic}}</td>
|
|
<td><label>{{ 'DELAY' | translate }}</label></td>
|
|
<td>{{consumeDetail.diffTotal}}</td>
|
|
<td><label>{{ 'LAST_CONSUME_TIME' | translate }}</label></td>
|
|
<td>{{(consumeDetail.lastTimestamp == 0)?"N/A":consumeDetail.lastTimestamp |
|
|
date:'yyyy-MM-dd HH:mm:ss'}}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<th class="text-center">broker</th>
|
|
<th class="text-center">queue</th>
|
|
<th class="text-center">consumerClient</th>
|
|
<th class="text-center">brokerOffset</th>
|
|
<th class="text-center">consumerOffset</th>
|
|
<th class="text-center">diffTotal</th>
|
|
<th class="text-center">lastTimestamp</th>
|
|
</tr>
|
|
<tr ng-repeat="item in consumeDetail.queueStatInfoList">
|
|
<td class="text-center">{{item.brokerName}}</td>
|
|
<td class="text-center">{{item.queueId}}</td>
|
|
<td class="text-center"><a
|
|
ng-click="consumerRunningInfo(ngDialogData.consumerGroupName,item.clientInfo,false)">
|
|
{{item.clientInfo}}</a></td>
|
|
<td class="text-center">{{item.brokerOffset}}</td>
|
|
<td class="text-center">{{item.consumerOffset}}</td>
|
|
<td class="text-center">{{item.brokerOffset-item.consumerOffset}}</td>
|
|
<td class="text-center">{{(item.lastTimestamp == 0)?"N/A":item.lastTimestamp | date:'yyyy-MM-dd HH:mm:ss'}}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="modal-footer">
|
|
<div class="ngdialog-buttons">
|
|
<button type="button" class="ngdialog-button ngdialog-button-secondary"
|
|
ng-click="closeThisDialog('Cancel')">{{ 'CLOSE' | translate }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script> |