优化界面

This commit is contained in:
GoEdgeLab
2021-07-21 08:07:46 +08:00
parent a00bdb1563
commit 88271f0166
25 changed files with 187 additions and 178 deletions

View File

@@ -170,6 +170,7 @@ func (this *IndexAction) RunGet(params struct {
"periodUnit": chart.MetricChart.MetricItem.PeriodUnit,
"valueType": serverconfigs.FindMetricValueType(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"valueTypeName": serverconfigs.FindMetricValueName(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"keys": chart.MetricChart.MetricItem.Keys,
},
"stats": statMaps,
})

View File

@@ -192,6 +192,7 @@ func (this *IndexAction) RunGet(params struct {
"periodUnit": chart.MetricChart.MetricItem.PeriodUnit,
"valueType": serverconfigs.FindMetricValueType(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"valueTypeName": serverconfigs.FindMetricValueName(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"keys": chart.MetricChart.MetricItem.Keys,
},
"stats": statMaps,
})

View File

@@ -237,6 +237,7 @@ func (this *IndexAction) RunGet(params struct{}) {
"periodUnit": chart.MetricChart.MetricItem.PeriodUnit,
"valueType": serverconfigs.FindMetricValueType(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"valueTypeName": serverconfigs.FindMetricValueName(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"keys": chart.MetricChart.MetricItem.Keys,
},
"stats": statMaps,
})

View File

@@ -198,6 +198,7 @@ func (this *IndexAction) RunGet(params struct{}) {
"periodUnit": chart.MetricChart.MetricItem.PeriodUnit,
"valueType": serverconfigs.FindMetricValueType(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"valueTypeName": serverconfigs.FindMetricValueName(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"keys": chart.MetricChart.MetricItem.Keys,
},
"stats": statMaps,
})

View File

@@ -0,0 +1,55 @@
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package ipbox
import (
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
timeutil "github.com/iwind/TeaGo/utils/time"
"time"
)
type IndexAction struct {
actionutils.ParentAction
}
func (this *IndexAction) Init() {
this.Nav("", "", "")
}
func (this *IndexAction) RunGet(params struct {
Ip string
}) {
this.Data["ip"] = params.Ip
accessLogsResp, err := this.RPC().HTTPAccessLogRPC().ListHTTPAccessLogs(this.AdminContext(), &pb.ListHTTPAccessLogsRequest{
Day: timeutil.Format("Ymd"),
Keyword: "ip:" + params.Ip,
Size: 10,
})
if err != nil {
this.ErrorPage(err)
return
}
var accessLogs = accessLogsResp.HttpAccessLogs
if len(accessLogs) == 0 {
// 查询昨天
accessLogsResp, err = this.RPC().HTTPAccessLogRPC().ListHTTPAccessLogs(this.AdminContext(), &pb.ListHTTPAccessLogsRequest{
Day: timeutil.Format("Ymd", time.Now().AddDate(0, 0, -1)),
Keyword: "ip:" + params.Ip,
Size: 10,
})
if err != nil {
this.ErrorPage(err)
return
}
accessLogs = accessLogsResp.HttpAccessLogs
if len(accessLogs) == 0 {
accessLogs = []*pb.HTTPAccessLog{}
}
}
this.Data["accessLogs"] = accessLogs
this.Show()
}

View File

@@ -0,0 +1,19 @@
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package ipbox
import (
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
"github.com/iwind/TeaGo"
)
func init() {
TeaGo.BeforeStart(func(server *TeaGo.Server) {
server.
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeServer)).
Prefix("/servers/ipbox").
Get("", new(IndexAction)).
EndAll()
})
}

View File

@@ -144,6 +144,7 @@ func (this *IndexAction) RunGet(params struct {
"periodUnit": chart.MetricChart.MetricItem.PeriodUnit,
"valueType": serverconfigs.FindMetricValueType(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"valueTypeName": serverconfigs.FindMetricValueName(chart.MetricChart.MetricItem.Category, chart.MetricChart.MetricItem.Value),
"keys": chart.MetricChart.MetricItem.Keys,
},
"stats": statMaps,
})

View File

@@ -60,7 +60,6 @@ import (
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/groups"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/log"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/components/waf"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/iplists"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/metrics"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/metrics/charts"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server"
@@ -112,6 +111,10 @@ import (
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/websocket"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/stat"
// IP相关
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/ipbox"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/iplists"
// 设置相关
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings"
_ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/authority"

View File

@@ -14,16 +14,20 @@ Vue.component("metric-chart", {
return v.value
})
if (sum < stats[0].total) {
stats.push({
keys: ["其他"],
value: stats[0].total - sum,
total: stats[0].total,
time: stats[0].time
})
if (this.vChart.type == "pie") {
stats.push({
keys: ["其他"],
value: stats[0].total - sum,
total: stats[0].total,
time: stats[0].time
})
}
}
}
if (this.vChart.maxItems > 0) {
stats = stats.slice(0, this.vChart.maxItems)
} else {
stats = stats.slice(0, 10)
}
stats.$rsort(function (v1, v2) {
@@ -55,6 +59,9 @@ Vue.component("metric-chart", {
},
render: function (el) {
let chart = echarts.init(el)
window.addEventListener("resize", function () {
chart.resize()
})
switch (this.chart.type) {
case "pie":
this.renderPie(chart)
@@ -271,6 +278,15 @@ Vue.component("metric-chart", {
})
break
}
let bottom = 24
let rotate = 0
let result = teaweb.xRotation(chart, this.stats.map(function (v) {
return v.keys[0]
}))
if (result != null) {
bottom = result[0]
rotate = result[1]
}
let that = this
chart.setOption({
xAxis: {
@@ -278,7 +294,8 @@ Vue.component("metric-chart", {
return v.keys[0]
}),
axisLabel: {
interval: 0
interval: 0,
rotate: rotate
}
},
tooltip: {
@@ -310,7 +327,7 @@ Vue.component("metric-chart", {
left: 40,
top: 10,
right: 20,
bottom: 25
bottom: bottom
},
series: [
{
@@ -327,6 +344,19 @@ Vue.component("metric-chart", {
}
]
})
// IP相关操作
if (this.item.keys != null && this.item.keys.$contains("${remoteAddr}")) {
let that = this
chart.on("click", function (args) {
let index = that.item.keys.$indexesOf("${remoteAddr}")[0]
let value = that.stats[args.dataIndex].keys[index]
teaweb.popup("/servers/ipbox?ip=" + value, {
width: "50em",
height: "30em"
})
})
}
},
renderTable: function (chart) {
let table = `<table class="ui table celled">

View File

@@ -410,16 +410,24 @@ window.teaweb = {
}
let click = options.click
let bottom = 24
let rotate = 0
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
let chart = this.initChart(chartBox)
let result = this.xRotation(chart, values.map(xFunc))
if (result != null) {
bottom = result[0]
rotate = result[1]
}
let option = {
xAxis: {
data: values.map(xFunc),
axisLabel: {
interval: 0
interval: 0,
rotate: rotate
}
},
yAxis: {
@@ -440,7 +448,7 @@ window.teaweb = {
left: 40,
top: 10,
right: 20,
bottom: 24
bottom: bottom
},
series: [
{
@@ -478,7 +486,7 @@ window.teaweb = {
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
let chart = this.initChart(chartBox)
let option = {
xAxis: {
data: values.map(xFunc),
@@ -522,6 +530,25 @@ window.teaweb = {
}
chart.setOption(option)
chart.resize()
},
xRotation: function (chart, names) {
let chartWidth = chart.getWidth()
let width = 0
names.forEach(function (name) {
width += name.length * 10
})
if (width <= chartWidth) {
return null
}
return [40, -20]
},
initChart: function (dom) {
let instance = echarts.init(dom)
window.addEventListener("resize", function () {
instance.resize()
})
return instance
}
}
@@ -537,4 +564,4 @@ String.prototype.quoteIP = function () {
return ip
}
return "[" + ip + "]"
}
}

View File

@@ -65,7 +65,7 @@ Tea.context(function () {
return Math.max(v.bytes, v.cachedBytes)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -198,7 +198,7 @@ Tea.context(function () {
return Math.max(v.countRequests, v.countCachedRequests)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {

View File

@@ -111,7 +111,7 @@ Tea.context(function () {
return Math.max(v.bytes, v.cachedBytes)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -247,7 +247,7 @@ Tea.context(function () {
return Math.max(v.countRequests, v.countCachedRequests)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {

View File

@@ -68,7 +68,7 @@ Tea.context(function () {
return Math.max(v.bytes, v.cachedBytes)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {

View File

@@ -6,16 +6,6 @@ Tea.context(function () {
this.reloadHourlyRequestsChart()
this.reloadTopDomainsChart()
this.reloadTopNodesChart()
let that = this
window.addEventListener("resize", function () {
if (that.trafficTab == "hourly") {
that.resizeHourlyTrafficChart()
}
if (that.trafficTab == "daily") {
that.resizeDailyTrafficChart()
}
})
})
this.selectTrafficTab = function (tab) {
@@ -61,25 +51,13 @@ Tea.context(function () {
})
}
this.resizeHourlyTrafficChart = function () {
let chartBox = document.getElementById("hourly-traffic-chart-box")
let chart = echarts.init(chartBox)
chart.resize()
}
this.resizeDailyTrafficChart = function () {
let chartBox = document.getElementById("daily-traffic-chart-box")
let chart = echarts.init(chartBox)
chart.resize()
}
this.reloadTrafficChart = function (chartId, stats, tooltipFunc) {
let axis = teaweb.bytesAxis(stats, function (v) {
return v.bytes
})
let chartBox = document.getElementById(chartId)
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let that = this
let option = {
xAxis: {
@@ -219,7 +197,7 @@ Tea.context(function () {
return Math.max(v.countRequests, v.countCachedRequests)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {

View File

@@ -63,7 +63,7 @@ Tea.context(function () {
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(xFunc)

View File

@@ -3,16 +3,6 @@ Tea.context(function () {
this.$delay(function () {
this.reloadHourlyTrafficChart()
let that = this
window.addEventListener("resize", function () {
if (that.trafficTab == "hourly") {
that.resizeHourlyTrafficChart()
}
if (that.trafficTab == "daily") {
that.resizeDailyTrafficChart()
}
})
})
this.selectTrafficTab = function (tab) {
@@ -28,18 +18,12 @@ Tea.context(function () {
}
}
this.resizeHourlyTrafficChart = function () {
let chartBox = document.getElementById("hourly-traffic-chart-box")
let chart = echarts.init(chartBox)
chart.resize()
}
this.reloadHourlyTrafficChart = function () {
let axis = teaweb.bytesAxis(this.hourlyTrafficStats, function (v) {
return v.bytes
})
let chartBox = document.getElementById("hourly-traffic-chart-box")
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let that = this
let option = {
xAxis: {
@@ -91,18 +75,13 @@ Tea.context(function () {
chart.resize()
}
this.resizeDailyTrafficChart = function () {
let chartBox = document.getElementById("daily-traffic-chart-box")
let chart = echarts.init(chartBox)
chart.resize()
}
this.reloadDailyTrafficChart = function () {
let axis = teaweb.bytesAxis(this.dailyTrafficStats, function (v) {
return v.bytes
})
let chartBox = document.getElementById("daily-traffic-chart-box")
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let that = this
let option = {
xAxis: {

View File

@@ -0,0 +1,10 @@
{$layout "layout_popup"}
<h3>最近访问日志<span class="grey">{{ip}}</span></h3>
<p class="comment" v-if="accessLogs.length == 0">暂时还没有访问日志。</p>
<table class="ui table selectable" v-if="accessLogs.length > 0">
<tr v-for="accessLog in accessLogs" :key="accessLog.requestId">
<td><http-access-log-box :v-access-log="accessLog"></http-access-log-box></td>
</tr>
</table>

View File

@@ -73,7 +73,7 @@ Tea.context(function () {
return Math.max(v.bytes, v.cachedBytes)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -209,7 +209,7 @@ Tea.context(function () {
return Math.max(v.countRequests, v.countCachedRequests)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {

View File

@@ -10,9 +10,6 @@ Tea.context(function () {
}, function (args) {
return that.systemStats[args.dataIndex].system.name + ": " + teaweb.formatNumber(that.systemStats[args.dataIndex].count)
}, systemAxis)
window.addEventListener("resize", function () {
that.resizeChart("system-chart")
})
let browserAxis = teaweb.countAxis(this.browserStats, function (v) {
return v.count
@@ -22,11 +19,6 @@ Tea.context(function () {
}, function (args) {
return that.browserStats[args.dataIndex].browser.name + ": " + teaweb.formatNumber(that.browserStats[args.dataIndex].count)
}, browserAxis)
window.addEventListener("resize", function () {
that.resizeChart("system-chart")
that.resizeChart("browser-chart")
})
})
this.reloadChart = function (chartId, name, stats, xFunc, tooltipFunc, axis) {
@@ -34,7 +26,7 @@ Tea.context(function () {
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(xFunc),
@@ -78,13 +70,4 @@ Tea.context(function () {
chart.setOption(option)
chart.resize()
}
this.resizeChart = function (chartId) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
chart.resize()
}
})

View File

@@ -28,10 +28,6 @@ Tea.context(function () {
}
return ""
})
window.addEventListener("resize", function () {
that.resizeChart("daily-requests-chart")
that.resizeChart("daily-traffic-chart")
})
})
this.reloadRequestsChart = function (chartId, name, stats, tooltipFunc) {
@@ -44,7 +40,7 @@ Tea.context(function () {
return Math.max(v.countRequests, v.countCachedRequests)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -116,7 +112,7 @@ Tea.context(function () {
return Math.max(v.bytes, v.cachedBytes)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -177,13 +173,4 @@ Tea.context(function () {
chart.setOption(option)
chart.resize()
}
this.resizeChart = function (chartId) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
chart.resize()
}
})

View File

@@ -28,10 +28,6 @@ Tea.context(function () {
}
return ""
})
window.addEventListener("resize", function () {
that.resizeChart("hourly-requests-chart")
that.resizeChart("hourly-traffic-chart")
})
})
this.reloadRequestsChart = function (chartId, name, stats, tooltipFunc) {
@@ -44,7 +40,7 @@ Tea.context(function () {
return Math.max(v.countRequests, v.countCachedRequests)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -116,7 +112,7 @@ Tea.context(function () {
return Math.max(v.bytes, v.cachedBytes)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -177,13 +173,4 @@ Tea.context(function () {
chart.setOption(option)
chart.resize()
}
this.resizeChart = function (chartId) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
chart.resize()
}
})

View File

@@ -28,10 +28,6 @@ Tea.context(function () {
}
return ""
})
window.addEventListener("resize", function () {
that.resizeChart("minutely-requests-chart")
that.resizeChart("minutely-traffic-chart")
})
})
this.reloadRequestsChart = function (chartId, name, stats, tooltipFunc) {
@@ -44,7 +40,7 @@ Tea.context(function () {
return Math.max(v.countRequests, v.countCachedRequests)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -116,7 +112,7 @@ Tea.context(function () {
return Math.max(v.bytes, v.cachedBytes)
})
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(function (v) {
@@ -177,13 +173,4 @@ Tea.context(function () {
chart.setOption(option)
chart.resize()
}
this.resizeChart = function (chartId) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
chart.resize()
}
})

View File

@@ -10,9 +10,6 @@ Tea.context(function () {
}, function (args) {
return that.providerStats[args.dataIndex].provider.name + ": " + teaweb.formatNumber(that.providerStats[args.dataIndex].count)
}, axis)
window.addEventListener("resize", function () {
that.resizeChart("provider-chart")
})
})
this.reloadChart = function (chartId, name, stats, xFunc, tooltipFunc, axis) {
@@ -20,7 +17,7 @@ Tea.context(function () {
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(xFunc),
@@ -64,13 +61,4 @@ Tea.context(function () {
chart.setOption(option)
chart.resize()
}
this.resizeChart = function (chartId) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
chart.resize()
}
})

View File

@@ -31,12 +31,6 @@ Tea.context(function () {
}, function (args) {
return that.cityStats[args.dataIndex].country.name + ": " + that.cityStats[args.dataIndex].province.name + " " + that.cityStats[args.dataIndex].city.name + " " + teaweb.formatNumber(that.cityStats[args.dataIndex].count)
}, cityAxis)
window.addEventListener("resize", function () {
that.resizeChart("country-chart")
that.resizeChart("province-chart")
that.resizeChart("city-chart")
})
})
this.reloadChart = function (chartId, name, stats, xFunc, tooltipFunc, axis) {
@@ -44,7 +38,7 @@ Tea.context(function () {
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(xFunc),
@@ -88,13 +82,4 @@ Tea.context(function () {
chart.setOption(option)
chart.resize()
}
this.resizeChart = function (chartId) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
chart.resize()
}
})

View File

@@ -39,11 +39,6 @@ Tea.context(function () {
}
return that.groupStats[args.dataIndex].group.name + ": " + teaweb.formatNumber(that.groupStats[args.dataIndex].count) + percent
}, groupAxis)
window.addEventListener("resize", function () {
that.resizeChart("daily-chart")
that.resizeChart("group-chart")
})
})
this.reloadLineChart = function (chartId, name, stats, xFunc, tooltipFunc, axis) {
@@ -52,7 +47,7 @@ Tea.context(function () {
return
}
let that = this
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(xFunc)
@@ -129,7 +124,7 @@ Tea.context(function () {
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
let chart = teaweb.initChart(chartBox)
let option = {
xAxis: {
data: stats.map(xFunc)
@@ -170,13 +165,4 @@ Tea.context(function () {
chart.setOption(option)
chart.resize()
}
this.resizeChart = function (chartId) {
let chartBox = document.getElementById(chartId)
if (chartBox == null) {
return
}
let chart = echarts.init(chartBox)
chart.resize()
}
})