Initial commit (code only without large binaries)
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
<first-menu>
|
||||
<menu-item :href="'/servers/metrics'">指标列表</menu-item>
|
||||
<span class="item disabled">|</span>
|
||||
<menu-item :href="'/servers/metrics/item?itemId=' + item.id" code="item">"{{item.name}}"详情</menu-item>
|
||||
<menu-item :href="'/servers/metrics/update?itemId=' + item.id" code="update">修改</menu-item>
|
||||
<menu-item :href="'/servers/metrics/charts?itemId=' + item.id" code="chart">图表({{item.countCharts}})</menu-item>
|
||||
<menu-item :href="'/servers/metrics/stats?itemId=' + item.id" code="stat">数据</menu-item>
|
||||
</first-menu>
|
||||
@@ -0,0 +1,6 @@
|
||||
<second-menu>
|
||||
<menu-item :href="Tea.url('.', { itemId: item.id })">图表列表</menu-item>
|
||||
<span class="item disabled">|</span>
|
||||
<menu-item :href="Tea.url('.chart', {chartId: chart.id})" code="chartIndex">详情"{{chart.name}}"</menu-item>
|
||||
<menu-item :href="Tea.url('.update', {chartId: chart.id})" code="chartUpdate">修改</menu-item>
|
||||
</second-menu>
|
||||
@@ -0,0 +1,5 @@
|
||||
h4 span {
|
||||
font-size: 0.8em;
|
||||
color: grey;
|
||||
}
|
||||
/*# sourceMappingURL=chart.css.map */
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["chart.less"],"names":[],"mappings":"AAAA,EACC;EACC,gBAAA;EACA,WAAA","file":"chart.css"}
|
||||
@@ -0,0 +1,54 @@
|
||||
{$layout}
|
||||
{$template "../item_menu"}
|
||||
{$template "chart_menu"}
|
||||
{$template "/echarts"}
|
||||
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">图表名称</td>
|
||||
<td>
|
||||
{{chart.name}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>状态</td>
|
||||
<td>
|
||||
<label-on :v-is-on="chart.isOn"></label-on>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>图表类型</td>
|
||||
<td>
|
||||
{{chart.typeName}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>对象数限制</td>
|
||||
<td>
|
||||
<span v-if="chart.maxItems <= 0" class="disabled">没有限制</span>
|
||||
<span v-else>{{chart.maxItems}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>忽略空值对象</td>
|
||||
<td>
|
||||
<span v-if="chart.ignoreEmptyKeys" class="green">Y</span>
|
||||
<span v-else class="disabled">N</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>忽略其他对象</td>
|
||||
<td>
|
||||
<div v-if="chart.ignoredKeys.length > 0">
|
||||
<span v-for="key in chart.ignoredKeys" class="ui label basic small">{{key}}</span>
|
||||
</div>
|
||||
<span v-else class="disabled">没有要忽略的对象。</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h4>图表示例</h4>
|
||||
<p class="comment"><span class="red">图中数据均为测试数据。</span></p>
|
||||
<metric-board>
|
||||
<metric-chart :v-chart="chart" :v-stats="testingStats" :v-item="item"></metric-chart>
|
||||
</metric-board>
|
||||
63
EdgeAdmin/web/views/@default/servers/metrics/charts/chart.js
Normal file
63
EdgeAdmin/web/views/@default/servers/metrics/charts/chart.js
Normal file
@@ -0,0 +1,63 @@
|
||||
Tea.context(function () {
|
||||
this.format = function (v) {
|
||||
if (v == 0) {
|
||||
return "00"
|
||||
}
|
||||
if (v < 10) {
|
||||
return "0" + v
|
||||
}
|
||||
return v.toString()
|
||||
}
|
||||
|
||||
let randValues = []
|
||||
let times = []
|
||||
let count = 6
|
||||
for (let i = 0; i < count; i++) {
|
||||
randValues.push(Math.ceil(Math.random() * 100))
|
||||
switch (this.item.periodUnit) {
|
||||
case "month": {
|
||||
let date = new Date()
|
||||
date.setMonth(date.getMonth() - (count - 1 - i))
|
||||
let month = date.getMonth() + 1
|
||||
times.push(date.getFullYear() + this.format(month))
|
||||
}
|
||||
break
|
||||
case "week": {
|
||||
let date = new Date()
|
||||
times.push(date.getFullYear() + this.format(50 + i - count))
|
||||
}
|
||||
break
|
||||
case "day": {
|
||||
let date = new Date()
|
||||
date.setDate(date.getDate() - (count - i - 1))
|
||||
let day = date.getDate()
|
||||
times.push(date.getFullYear() + this.format(date.getMonth() + 1) + this.format(day))
|
||||
}
|
||||
break
|
||||
case "hour": {
|
||||
let date = new Date()
|
||||
date.setHours(date.getHours() - (count - i - 1))
|
||||
times.push(date.getFullYear() + this.format(date.getMonth() + 1) + this.format(date.getDate()) + this.format(date.getHours()))
|
||||
}
|
||||
break
|
||||
case "minute": {
|
||||
let date = new Date()
|
||||
date.setMinutes(date.getMinutes() - (count - i - 1))
|
||||
times.push(date.getFullYear() + this.format(date.getMonth() + 1) + this.format(date.getDate()) + this.format(date.getHours()) + this.format(date.getMinutes()))
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
let total = randValues.$sum()
|
||||
|
||||
this.testingStats = []
|
||||
let that = this
|
||||
randValues.forEach(function (v, index) {
|
||||
that.testingStats.push({
|
||||
keys: ["对象" + (index + 1)],
|
||||
value: v,
|
||||
total: total,
|
||||
time: times[index]
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,6 @@
|
||||
h4 {
|
||||
span {
|
||||
font-size: 0.8em;
|
||||
color: grey;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{$layout "layout_popup"}
|
||||
|
||||
<h3>创建图表</h3>
|
||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||
<csrf-token></csrf-token>
|
||||
<input type="hidden" name="itemId" :value="itemId"/>
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">图表名称 *</td>
|
||||
<td>
|
||||
<input type="text" maxlength="100" name="name" ref="focus"/>
|
||||
<p class="comment">也会作为有些图表的标题。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>图表类型 *</td>
|
||||
<td>
|
||||
<select class="ui dropdown auto-width" name="type" v-model="type" @change="changeType">
|
||||
<option v-for="type in types" :value="type.code">{{type.name}}</option>
|
||||
</select>
|
||||
<p class="comment" v-if="typeDefinition != null"><i class="icon" :class="typeDefinition.icon"></i> {{typeDefinition.description}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||
</tr>
|
||||
<tbody v-show="moreOptionsVisible">
|
||||
<tr>
|
||||
<td>对象数限制</td>
|
||||
<td>
|
||||
<input type="text" name="maxItems" maxlength="2" style="width: 4em"/>
|
||||
<p class="comment">在图表中能显示的最多对象数,0表示不限制。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>忽略空值对象</td>
|
||||
<td>
|
||||
<checkbox name="ignoreEmptyKeys"></checkbox>
|
||||
<p class="comment">选中后,空的对象值不会在图表中出现。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>忽略其他对象</td>
|
||||
<td>
|
||||
<values-box name="ignoredKeys"></values-box>
|
||||
<p class="comment">这些对象不会在图表中出现。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
@@ -0,0 +1,15 @@
|
||||
Tea.context(function () {
|
||||
this.type = this.types[0].code
|
||||
this.typeDefinition = null
|
||||
|
||||
this.$delay(function () {
|
||||
this.changeType()
|
||||
})
|
||||
|
||||
this.changeType = function () {
|
||||
let that = this
|
||||
this.typeDefinition = this.types.$find(function (k, v) {
|
||||
return v.code == that.type
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,30 @@
|
||||
{$layout}
|
||||
{$template "../item_menu"}
|
||||
|
||||
<second-menu>
|
||||
<menu-item @click.prevent="createChart">[创建图表]</menu-item>
|
||||
</second-menu>
|
||||
|
||||
|
||||
<p class="comment" v-if="charts.length == 0">暂时还没有图表。</p>
|
||||
<table class="ui table celled selectable" v-if="charts.length > 0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>图表名称</th>
|
||||
<th>类型</th>
|
||||
<th class="two wide">状态</th>
|
||||
<th class="two op">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr v-for="chart in charts">
|
||||
<td>{{chart.name}}</td>
|
||||
<td>{{chart.typeName}}</td>
|
||||
<td><label-on :v-is-on="chart.isOn"></label-on></td>
|
||||
<td>
|
||||
<a :href="Tea.url('.chart', {chartId: chart.id})">详情</a>
|
||||
<a href="" @click.prevent="deleteChart(chart.id)">删除</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="page" v-html="page"></div>
|
||||
21
EdgeAdmin/web/views/@default/servers/metrics/charts/index.js
Normal file
21
EdgeAdmin/web/views/@default/servers/metrics/charts/index.js
Normal file
@@ -0,0 +1,21 @@
|
||||
Tea.context(function () {
|
||||
this.createChart = function () {
|
||||
teaweb.popup(Tea.url(".createPopup?itemId=" + this.item.id), {
|
||||
callback: function () {
|
||||
teaweb.successRefresh("保存成功")
|
||||
},
|
||||
height: "27em"
|
||||
})
|
||||
}
|
||||
|
||||
this.deleteChart = function (chartId) {
|
||||
let that = this
|
||||
teaweb.confirm("确定要删除这个图表吗?", function () {
|
||||
that.$post(".delete")
|
||||
.params({ chartId: chartId })
|
||||
.success(function () {
|
||||
teaweb.successRefresh("保存成功")
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,57 @@
|
||||
{$layout}
|
||||
{$template "../item_menu"}
|
||||
{$template "chart_menu"}
|
||||
|
||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||
<csrf-token></csrf-token>
|
||||
<input type="hidden" name="chartId" :value="chart.id"/>
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">图表名称 *</td>
|
||||
<td>
|
||||
<input type="text" maxlength="100" name="name" ref="focus" v-model="chart.name"/>
|
||||
<p class="comment">也会作为有些图表的标题。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>图表类型 *</td>
|
||||
<td>
|
||||
<select class="ui dropdown auto-width" name="type" v-model="type" @change="changeType">
|
||||
<option v-for="type in types" :value="type.code">{{type.name}}</option>
|
||||
</select>
|
||||
<p class="comment" v-if="typeDefinition != null"><i class="icon" :class="typeDefinition.icon"></i> {{typeDefinition.description}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>启用当前图表</td>
|
||||
<td><checkbox name="isOn" value="1" v-model="chart.isOn"></checkbox></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||
</tr>
|
||||
<tbody v-show="moreOptionsVisible">
|
||||
<tr>
|
||||
<td>对象数限制</td>
|
||||
<td>
|
||||
<input type="text" name="maxItems" maxlength="2" style="width: 4em" v-model="chart.maxItems"/>
|
||||
<p class="comment">在图表中能显示的最多对象数,0表示不限制。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>忽略空值对象</td>
|
||||
<td>
|
||||
<checkbox name="ignoreEmptyKeys" value="1" checked="checked" v-model="chart.ignoreEmptyKeys"></checkbox>
|
||||
<p class="comment">选中后,空的对象值不会在图表中出现。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>忽略其他对象</td>
|
||||
<td>
|
||||
<values-box name="ignoredKeys" :values="chart.ignoredKeys"></values-box>
|
||||
<p class="comment">这些对象不会在图表中出现。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
@@ -0,0 +1,17 @@
|
||||
Tea.context(function () {
|
||||
this.type = this.chart.type
|
||||
this.typeDefinition = null
|
||||
|
||||
this.$delay(function () {
|
||||
this.changeType()
|
||||
})
|
||||
|
||||
this.changeType = function () {
|
||||
let that = this
|
||||
this.typeDefinition = this.types.$find(function (k, v) {
|
||||
return v.code == that.type
|
||||
})
|
||||
}
|
||||
|
||||
this.success = NotifySuccess("保存成功", Tea.url(".chart", {chartId: this.chart.id}))
|
||||
})
|
||||
@@ -0,0 +1,63 @@
|
||||
{$layout "layout_popup"}
|
||||
|
||||
<h3>创建{{category.toUpperCase()}}统计指标</h3>
|
||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||
<csrf-token></csrf-token>
|
||||
<input type="hidden" name="category" :value="category"/>
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">指标名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="name" maxlength="100" ref="focus"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计对象 *</td>
|
||||
<td>
|
||||
<metric-keys-config-box :v-category="category"></metric-keys-config-box>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计周期 *</td>
|
||||
<td>
|
||||
<metric-period-config-box></metric-period-config-box>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计数值 *</td>
|
||||
<td>
|
||||
<!-- HTTP -->
|
||||
<select class="ui dropdown auto-width" name="value" v-if="category == 'http'">
|
||||
<option v-for="def in valueDefinitions" :value="def.code">{{def.name}}</option>
|
||||
</select>
|
||||
|
||||
<!-- TCP -->
|
||||
<select class="ui dropdown auto-width" name="value" v-if="category == 'tcp'">
|
||||
<option v-for="def in valueDefinitions" :value="def.code">{{def.name}}</option>
|
||||
</select>
|
||||
|
||||
<!-- UDP -->
|
||||
<select class="ui dropdown auto-width" name="value" v-if="category == 'udp'">
|
||||
<option v-for="def in valueDefinitions" :value="def.code">{{def.name}}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>数据保留周期</td>
|
||||
<td>
|
||||
<div class="ui input">
|
||||
<input type="text" size="4" maxlength="4" name="expiresPeriod"/>
|
||||
</div>
|
||||
<p class="comment">自动删除此周期以外的数据。单位和统计周期一致。不填或者为0,表示自动计算。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>公用</td>
|
||||
<td>
|
||||
<checkbox name="isPublic" checked="checked"></checkbox>
|
||||
<p class="comment">选中表示所有集群自动使用此指标。</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
52
EdgeAdmin/web/views/@default/servers/metrics/index.html
Normal file
52
EdgeAdmin/web/views/@default/servers/metrics/index.html
Normal file
@@ -0,0 +1,52 @@
|
||||
{$layout}
|
||||
|
||||
<first-menu>
|
||||
<menu-item :href="'/servers/metrics?category=http'" :active="category == 'http'">HTTP</menu-item>
|
||||
<!--<menu-item :href="'/servers/metrics?category=tcp'" :active="category == 'tcp'">TCP</menu-item>
|
||||
<menu-item :href="'/servers/metrics?category=udp'" :active="category == 'udp'">UDP</menu-item>-->
|
||||
<span class="item disabled">|</span>
|
||||
<menu-item @click.prevent="createItem">[创建指标]</menu-item>
|
||||
<span class="item disabled">|</span>
|
||||
<span class="item"><tip-icon content="在这里创建一些指标后,可以在集群中使用这些指标,从而实现阈值、图表等功能"></tip-icon></span>
|
||||
</first-menu>
|
||||
|
||||
<p class="comment" v-if="items.length == 0">暂时还没有指标。</p>
|
||||
<table class="ui table celled selectable" v-if="items.length > 0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>指标名称</th>
|
||||
<th>统计对象</th>
|
||||
<th>统计周期</th>
|
||||
<th class="three wide">统计数值</th>
|
||||
<th class="two wide">状态</th>
|
||||
<th class="two op">操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr v-for="item in items">
|
||||
<td>
|
||||
<a :href="'/servers/metrics/item?itemId=' + item.id">{{item.name}}</a>
|
||||
<div style="margin-top: 0.3em" v-if="item.isPublic || item.code.length > 0">
|
||||
<span class="ui label olive tiny basic" v-if="item.isPublic">公用</span>
|
||||
<span class="ui label olive tiny basic" v-if="item.code.length > 0">内置</span>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div v-if="item.keys != null" v-for="key in item.keys" style="margin-bottom: 0.3em; margin-top: 0.3em"><metric-key-label :v-key="key"></metric-key-label></div>
|
||||
</td>
|
||||
<td>
|
||||
{{item.period}} {{item.periodUnitName}}
|
||||
</td>
|
||||
<td>
|
||||
<span class="ui label small basic">{{item.valueName}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<label-on :v-is-on="item.isOn"></label-on>
|
||||
</td>
|
||||
<td>
|
||||
<a :href="'/servers/metrics/item?itemId=' + item.id">详情</a>
|
||||
<a href="" @click.prevent="deleteItem(item.id)">删除</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="page" v-html="page"></div>
|
||||
28
EdgeAdmin/web/views/@default/servers/metrics/index.js
Normal file
28
EdgeAdmin/web/views/@default/servers/metrics/index.js
Normal file
@@ -0,0 +1,28 @@
|
||||
Tea.context(function () {
|
||||
this.createItem = function () {
|
||||
teaweb.popup(Tea.url(".createPopup?category=" + this.category), {
|
||||
callback: function () {
|
||||
teaweb.success("保存成功", function () {
|
||||
teaweb.reload()
|
||||
})
|
||||
},
|
||||
height: "26em",
|
||||
width: "44em"
|
||||
})
|
||||
}
|
||||
|
||||
this.deleteItem = function (itemId) {
|
||||
let that = this
|
||||
teaweb.confirm("确定要删除此指标吗?", function () {
|
||||
that.$post(".delete")
|
||||
.params({
|
||||
itemId: itemId
|
||||
})
|
||||
.success(function () {
|
||||
teaweb.success("删除成功", function () {
|
||||
teaweb.reload()
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
64
EdgeAdmin/web/views/@default/servers/metrics/item.html
Normal file
64
EdgeAdmin/web/views/@default/servers/metrics/item.html
Normal file
@@ -0,0 +1,64 @@
|
||||
{$layout}
|
||||
{$template "item_menu"}
|
||||
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">指标名称</td>
|
||||
<td>
|
||||
{{item.name}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>状态</td>
|
||||
<td><label-on :v-is-on="item.isOn"></label-on></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计对象</td>
|
||||
<td>
|
||||
<span v-for="key in item.keys" style="margin-right: 0.5em"><metric-key-label :v-key="key"></metric-key-label></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计周期</td>
|
||||
<td>
|
||||
{{item.period}} {{item.periodUnitName}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计数值</td>
|
||||
<td>
|
||||
<span class="ui label small basic">{{item.valueName}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>数据保留周期</td>
|
||||
<td>
|
||||
<span v-if="item.expiresPeriod > 0">{{item.expiresPeriod}}</span>
|
||||
<span v-else>自动</span>
|
||||
<p class="comment" v-if="item.expiresPeriod > 0">单位和统计周期一致。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>公用</td>
|
||||
<td>
|
||||
<span class="green" v-if="item.isPublic">公用</span>
|
||||
<span class="disabled" v-else>非公用</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>内置</td>
|
||||
<td>
|
||||
<span class="green" v-if="item.code.length > 0">内置</span>
|
||||
<span class="disabled" v-else>自建</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- 使用此指标的集群 -->
|
||||
<h4>绑定此指标的集群</h4>
|
||||
<p class="comment" v-if="clusters.length == 0">暂时还没有集群使用此策略。</p>
|
||||
<table class="ui table selectable" v-if="clusters.length > 0">
|
||||
<tr v-for="cluster in clusters">
|
||||
<td>{{cluster.name}}<link-icon :href="'/clusters/cluster?clusterId=' + cluster.id"></link-icon></td>
|
||||
</tr>
|
||||
</table>
|
||||
29
EdgeAdmin/web/views/@default/servers/metrics/stats.html
Normal file
29
EdgeAdmin/web/views/@default/servers/metrics/stats.html
Normal file
@@ -0,0 +1,29 @@
|
||||
{$layout}
|
||||
{$template "item_menu"}
|
||||
|
||||
<p class="comment" v-if="stats.length == 0">暂时还没有统计数据。</p>
|
||||
|
||||
<table class="ui table selectable celled" v-if="stats.length > 0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>指标对象</th>
|
||||
<th>指标值</th>
|
||||
<th>占比</th>
|
||||
<th>时间</th>
|
||||
<th>集群</th>
|
||||
<th>节点</th>
|
||||
<th>网站</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr v-for="stat in stats">
|
||||
<td>{{stat.keys}}</td>
|
||||
<td>{{stat.value}}</td>
|
||||
<td>{{stat.ratio}}%</td>
|
||||
<td>{{stat.time}}</td>
|
||||
<td>{{stat.cluster.name}}</td>
|
||||
<td>{{stat.node.name}}</td>
|
||||
<td>{{stat.server.name}}<link-icon :href="'/servers/server/stat?serverId=' + stat.server.id"></link-icon></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="page" v-html="page"></div>
|
||||
71
EdgeAdmin/web/views/@default/servers/metrics/update.html
Normal file
71
EdgeAdmin/web/views/@default/servers/metrics/update.html
Normal file
@@ -0,0 +1,71 @@
|
||||
{$layout "layout"}
|
||||
{$template "item_menu"}
|
||||
|
||||
<warning-message>修改统计对象、统计周期、统计数值等任一参数时,将重新记录数据。</warning-message>
|
||||
|
||||
<form class="ui form" data-tea-action="$" data-tea-success="success">
|
||||
<csrf-token></csrf-token>
|
||||
<input type="hidden" name="itemId" :value="item.id"/>
|
||||
<table class="ui table definition selectable">
|
||||
<tr>
|
||||
<td class="title">指标名称 *</td>
|
||||
<td>
|
||||
<input type="text" name="name" maxlength="100" ref="focus" v-model="item.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计对象 *</td>
|
||||
<td>
|
||||
<metric-keys-config-box :v-category="item.category" :v-keys="item.keys"></metric-keys-config-box>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计周期 *</td>
|
||||
<td>
|
||||
<metric-period-config-box :v-period="item.period" :v-period-unit="item.periodUnit"></metric-period-config-box>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>统计数值 *</td>
|
||||
<td>
|
||||
<!-- HTTP -->
|
||||
<select class="ui dropdown auto-width" name="value" v-if="item.category == 'http'" v-model="item.value">
|
||||
<option v-for="def in valueDefinitions" :value="def.code">{{def.name}}</option>
|
||||
</select>
|
||||
|
||||
<!-- TCP -->
|
||||
<select class="ui dropdown auto-width" name="value" v-if="item.category == 'tcp'">
|
||||
<option v-for="def in valueDefinitions" :value="def.code">{{def.name}}</option>
|
||||
</select>
|
||||
|
||||
<!-- UDP -->
|
||||
<select class="ui dropdown auto-width" name="value" v-if="item.category == 'udp'">
|
||||
<option v-for="def in valueDefinitions" :value="def.code">{{def.name}}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>数据保留周期</td>
|
||||
<td>
|
||||
<div class="ui input">
|
||||
<input type="text" size="4" maxlength="4" name="expiresPeriod" v-model="item.expiresPeriod"/>
|
||||
</div>
|
||||
<p class="comment">自动删除此周期以外的数据。单位和统计周期一致。不填或者为0,表示自动计算。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>公用</td>
|
||||
<td>
|
||||
<checkbox name="isPublic" v-model="item.isPublic"></checkbox>
|
||||
<p class="comment">选中表示所有集群自动使用此指标。</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>启用当前指标</td>
|
||||
<td>
|
||||
<checkbox name="isOn" v-model="item.isOn" value="1"></checkbox>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<submit-btn></submit-btn>
|
||||
</form>
|
||||
3
EdgeAdmin/web/views/@default/servers/metrics/update.js
Normal file
3
EdgeAdmin/web/views/@default/servers/metrics/update.js
Normal file
@@ -0,0 +1,3 @@
|
||||
Tea.context(function () {
|
||||
this.success = NotifySuccess("保存成功", "/servers/metrics/item?itemId=" + this.item.id)
|
||||
})
|
||||
Reference in New Issue
Block a user