inlong-tubemq/resources/assets/scripts/topicDetail.js (414 lines of code) (raw):
/**
* 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.
*/
(function () {
var page = {
init: function () {
var self = this;
var topicName = self.topicName = $.getUrlParam('topicName');
self.dialogInstance = new Dialog({
successHook: $.proxy(self.showDetail, self)
});
self.checkBoxInstance = new CheckBox();
self.$brokerDataTable = null;
self.$consumerTable = null;
self.initEvent();
self.showNav(topicName);
self.showDetail();
},
initEvent: function () {
var self = this;
var topicName = self.topicName;
$('body').on('click', '.js_reload_one', function () {
self.dialogInstance.confirmBrokerInfo('reload', [$(this).attr('data-brokerId')]);
}).on('click', '.js_delete_one', function () {
var brokerId = $(this).attr('data-brokerId');
self.dialogInstance.confirmTopicInfo('delete', topicName, [brokerId]);
}).on('click', '.js_mod_one', function () {
self.dialogInstance.addTopicInfo('mod', topicName, $('#modTopic').data('topic'));
}).on('click', '.js_delete_consumer_one', function () {
var groupName = $(this).attr('data-groupName');
self.dialogInstance.confirm('确认 <span class="hl">删除</span> 该消费组吗?',
function (passwd, formData) {
$.getJSON(G_CONFIG.HOST
+ '?type=op_modify&method=admin_delete_allowed_consumer_group_info&topicName='
+ topicName + '&groupName=' + groupName
+ '&confModAuthToken=' + passwd
+ '&callback=?').done(function (data) {
if (data.errCode === 0) {
self.dialogInstance.showTips('操作成功');
self.dialogInstance.successHook
&& self.dialogInstance.successHook();
} else {
self.dialogInstance.showTips(data.errMsg);
}
});
});
}).on('click', '.js_add_consumer_one', function () {
self.dialogInstance.addConsumerGroup('add', topicName);
}).on('click', '.js_toggle_auth', function () { // 切换订阅开关
var $this = $(this);
self.checkBoxInstance.process('setTopicAuth', $this, self.dialogInstance,
topicName);
}).on('click', '.js_toggle_pub', function () { // 切换发布开关
var $this = $(this);
var checkedClass = 'checked';
var state = $this.hasClass(checkedClass);
var type = ['allowPub', 'disPub'][+state];
self.dialogInstance.confirmTopicInfo(type, topicName);
}).on('click', '.js_toggle_sub', function () { // 切换发布开关
var $this = $(this);
var checkedClass = 'checked';
var state = $this.hasClass(checkedClass);
var type = ['allowSub', 'disSub'][+state];
self.dialogInstance.confirmTopicInfo(type, topicName);
});
},
showNav: function (consumeGroup) {
$('#topicNav').html(consumeGroup)
},
showDetail: function () {
this.showTopicDetail(this.topicName);
this.showConsumeGroupDetail(this.topicName);
},
showTopicDetail: function (topicName) {
var self = this;
var url = G_CONFIG.HOST + "?type=op_query&method=admin_query_topic_info&topicName="
+ topicName + "&callback=?";
$.getJSON(url)
.done(function (res) {
if (res.errCode === 0) {
var data = res.data[0];
self.renderCommonInfo(data);
self.renderDefInfo(data.topicInfo[0]);
self.initBrokerTable(data.topicInfo);
}
});
},
showConsumeGroupDetail: function (topicName) {
var self = this;
var url = G_CONFIG.HOST
+ "?type=op_query&method=admin_query_topic_authorize_control&topicName="
+ topicName + "&callback=?";
$.getJSON(url)
.done(function (res) {
if (res.errCode === 0) {
var data = res.data[0] || {};
self.initConsumerTable(data.authConsumeGroup);
$('#totalAuthControlCount').html(data.authConsumeGroup.length);
}
});
},
renderDefInfo: function (dataSet) {
var html = '<div class="form-wp sep-2">' +
' <div class="row">' +
' <div class="tit">acceptPublish:</div>' +
' <div class="cnt">' + dataSet.acceptPublish + '</div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">unflushThreshold:</div>' +
' <div class="cnt">' + dataSet.unflushThreshold + '</div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">numPartitions:</div>' +
' <div class="cnt">' + dataSet.numPartitions + '</div>' +
' </div>' +
'</div>' +
'<div class="form-wp sep-2">' +
' <div class="row">' +
' <div class="tit">acceptSubscribe:</div>' +
' <div class="cnt">' + dataSet.acceptSubscribe + '</div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">unflushInterval:</div>' +
' <div class="cnt">' + dataSet.unflushInterval + '</div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">deletePolicy:</div>' +
' <div class="cnt">' + dataSet.deletePolicy + '</div>' +
' </div>' +
'</div>';
var emptyHtml = '<div class="form-wp sep-2">' +
' <div class="row">' +
' 暂无记录' +
' </div>' +
'</div>';
$('#defInfo').html(dataSet ? html : emptyHtml);
$('#modTopic').data('topic', dataSet);
},
renderCommonInfo: function (dataSet) {
var translation2Boolean = {
'true': '是',
'false': '否',
'-': '-'
};
var getChecked = function (data) {
var checked = data === true ? '是' : '否';
return checked;
};
var getCheckBox = function (data, className) {
var checked = data === true ? ' checked' : '';
className = className || '';
return '<span class="switch' + checked + ' ' + className
+ '"><input type="checkbox" checked></span>';
};
var getAuthBox = function (data, className) {
var checked = data === true ? ' checked' : '';
className = className || '';
return '<span class="switch' + checked + ' ' + className
+ '"><input type="checkbox" checked></span>';
};
var data = dataSet.BrokerSyncStatusInfo || '';
dataSet.currBrokerConfId = data.currBrokerConfId || '-';
dataSet.lastPushBrokerConfId = data.lastPushBrokerConfId || '-';
dataSet.reportedBrokerConfId = data.reportedBrokerConfId || '-';
var html = '<div class="form-wp sep-2">' +
' <div class="row">' +
' <div class="tit">topicName:</div>' +
' <div class="cnt">' + dataSet.topicName +
' </div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">配置分区数:</div>' +
' <div class="cnt">' + dataSet.totalCfgNumPart +
' </div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">可发布:</div>' +
' <div class="cnt">' +
getCheckBox(dataSet.isSrvAcceptPublish, 'js_toggle_pub') +
' </div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">权限受控:</div>' +
' <div class="cnt">' + getAuthBox(dataSet.authData.enableAuthControl,
'js_toggle_auth') +
' </div>' +
' </div>' +
'</div>' +
'<div class="form-wp sep-2">' +
' <div class="row">' +
' <div class="tit">配置Broker数:</div>' +
' <div class="cnt">' + dataSet.infoCount +
' </div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">运行分区数:</div>' +
' <div class="cnt">' + dataSet.totalRunNumPartCount +
' </div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">可订阅:</div>' +
' <div class="cnt">' +
getCheckBox(dataSet.isSrvAcceptSubscribe, 'js_toggle_pub') +
' </div>' +
' </div>' +
' <div class="row">' +
' <div class="tit">授权消费组个数:</div>' +
' <div class="cnt" id="totalAuthControlCount">0' +
' </div>' +
' </div>' +
'</div>';
$('#commonInfo').html(html);
},
initBrokerTable: function (dataSet) {
var translation2Boolean = {
'true': '是',
'false': '否',
'-': '-'
};
if (!this.$brokerDataTable) {
var dataTable = this.$brokerDataTable = $('#brokerTable').DataTable({
data: dataSet,
columns: [{
"data": "brokerId",
"render": function (data,
type,
full,
meta) {
return full.brokerId
+ '#'
+ full.brokerIp
+ ':'
+ full.brokerPort;
}
}, {
"data": "runInfo.acceptPublish",
"orderable": false,
"render": function (data,
type,
full,
meta) {
return translation2Boolean[data];
}
}, {
"data": "runInfo.acceptSubscribe",
"orderable": false,
"render": function (data,
type,
full,
meta) {
return translation2Boolean[data];
}
}, {
"data": "runInfo.numPartitions"
}, {
"data": "runInfo.brokerManageStatus",
"orderable": false
}, {
"data": "numPartitions"
}, {
"data": "unflushThreshold"
}, {
"data": "unflushInterval"
}, {
"data": "deletePolicy",
"orderable": false
}, {
"data": "acceptPublish",
"orderable": false,
"render": function (data,
type,
full,
meta) {
return translation2Boolean[data];
}
}, {
"data": "acceptSubscribe",
"orderable": false,
"render": function (data,
type,
full,
meta) {
return translation2Boolean[data];
}
}, {
"data": null,
"orderable": false,
"render": function (data,
type,
full,
meta) {
return '<a href="javascript:;" class="link js_mod_one" data-brokerId="'
+ full.brokerId
+ '">编辑</a><a href="javascript:;" class="link js_reload_one" data-brokerId="'
+ full.brokerId
+ '">重载</a><a href="javascript:;" class="link js_delete_one" data-brokerId="'
+ full.brokerId
+ '">删除</a>';
}
}],
language: {
searchPlaceholder: '请输入消费组或者Topic名称',
processing: "Loading...",
search: "搜索:",
//lengthMenu: "每页显示 _MENU_ 条",
lengthMenu: '每页显示 <select class="min">'
+
'<option value="10">10</option>'
+
'<option value="20">20</option>'
+
'<option value="30">30</option>'
+
'<option value="40">40</option>'
+
'<option value="50">50</option>'
+
'<option value="-1">全部</option>'
+
'</select> 条',
info: "当前显示由 _START_ 到 _END_ 条,共 _TOTAL_ 条记录, ",
infoEmpty: "",
//infoFiltered:
// "(_MAX_
// 条数据搜索结果)",
infoFiltered: "",
infoPostFix: "",
loadingRecords: "正在加载...",
zeroRecords: "暂无记录",
emptyTable: "暂无记录",
paginate: {
first: '<i class="i-first"></i>',
previous: '<i class="i-prev"></i>',
next: '<i class="i-next"></i>',
last: '<i class="i-last"></i>'
}
},
'pagingType': "full_numbers",
"dom": '<"scroll-wp"rt><"pg-wp"ilp>',
//"dom":
// 'f<"scroll-wp"rt><"pg-wp"ilp>'
});
$('#brokerSearch').on('keyup click', function () {
dataTable.search(
$(this).val()
).draw();
});
} else {
this.$brokerDataTable.clear().rows.add(dataSet).draw();
}
},
initConsumerTable: function (dataSet) {
if (!this.$consumerTable) {
var dataTable = this.$consumerTable = $('#consumerTable').DataTable({
data: dataSet,
columns: [{
"data": "groupName",
"orderable": false
}, {
"data": "createUser",
"orderable": false
}, {
"data": "createDate"
}, {
"data": null,
"orderable": false,
"render": function (data,
type,
full,
meta) {
return '<a href="javascript:;" class="link js_delete_consumer_one" data-groupname="'
+ full.groupName
+ '">删除</a>';
}
}],
language: {
searchPlaceholder: '请输入消费组或者Topic名称',
processing: "Loading...",
search: "搜索:",
//lengthMenu: "每页显示 _MENU_ 条",
lengthMenu: '每页显示 <select class="min">'
+
'<option value="10">10</option>'
+
'<option value="20">20</option>'
+
'<option value="30">30</option>'
+
'<option value="40">40</option>'
+
'<option value="50">50</option>'
+
'<option value="-1">全部</option>'
+
'</select> 条',
info: "当前显示由 _START_ 到 _END_ 条,共 _TOTAL_ 条记录, ",
infoEmpty: "",
//infoFiltered:
// "(_MAX_
// 条数据搜索结果)",
infoFiltered: "",
infoPostFix: "",
loadingRecords: "正在加载...",
zeroRecords: "暂无记录",
emptyTable: "暂无记录",
paginate: {
first: '<i class="i-first"></i>',
previous: '<i class="i-prev"></i>',
next: '<i class="i-next"></i>',
last: '<i class="i-last"></i>'
}
},
'pagingType': "full_numbers",
"dom": '<"scroll-wp"rt><"pg-wp"ilp>'
//"dom":
// 'f<"scroll-wp"rt><"pg-wp"ilp>'
});
$('#consumerSearch').on('keyup click', function () {
dataTable.search(
$(this).val()
).draw();
});
} else {
this.$consumerTable.clear().rows.add(dataSet).draw();
}
}
};
page.init();
})();