mirror of
https://github.com/fatedier/frp.git
synced 2024-12-12 17:50:51 +01:00
dashboard: add proxy start and close time
This commit is contained in:
parent
44971c7918
commit
e29a1330ed
@ -1 +1 @@
|
|||||||
<!DOCTYPE html> <html lang=en> <head> <meta charset=utf-8> <title>frps dashboard</title> <link rel="shortcut icon" href="favicon.ico"></head> <body> <div id=app></div> <script type="text/javascript" src="manifest.js?189199ae955b61cb7046"></script><script type="text/javascript" src="vendor.js?66dfcf2d1c500e900413"></script><script type="text/javascript" src="index.js?ba5d6545ccb2ffaaf197"></script></body> </html>
|
<!DOCTYPE html> <html lang=en> <head> <meta charset=utf-8> <title>frps dashboard</title> <link rel="shortcut icon" href="favicon.ico"></head> <body> <div id=app></div> <script type="text/javascript" src="manifest.js?5217927b66cc446ebfd3"></script><script type="text/javascript" src="vendor.js?66dfcf2d1c500e900413"></script><script type="text/javascript" src="index.js?bf962cded96400bef9a0"></script></body> </html>
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,u){for(var a,i,f,l=0,s=[];l<t.length;l++)i=t[l],o[i]&&s.push(o[i][0]),o[i]=0;for(a in c)Object.prototype.hasOwnProperty.call(c,a)&&(e[a]=c[a]);for(n&&n(t,c,u);s.length;)s.shift()();if(u)for(l=0;l<u.length;l++)f=r(r.s=u[l]);return f};var t={},o={2:0};r.e=function(e){function n(){u.onerror=u.onload=null,clearTimeout(a);var r=o[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}if(0===o[e])return Promise.resolve();if(o[e])return o[e][2];var t=new Promise(function(r,n){o[e]=[r,n]});o[e][2]=t;var c=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,r.nc&&u.setAttribute("nonce",r.nc),u.src=r.p+""+e+".js?"+{0:"ba5d6545ccb2ffaaf197",1:"66dfcf2d1c500e900413"}[e];var a=setTimeout(n,12e4);return u.onerror=u.onload=n,c.appendChild(u),t},r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.oe=function(e){throw console.error(e),e}}([]);
|
!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,u){for(var i,a,f,l=0,s=[];l<t.length;l++)a=t[l],o[a]&&s.push(o[a][0]),o[a]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(n&&n(t,c,u);s.length;)s.shift()();if(u)for(l=0;l<u.length;l++)f=r(r.s=u[l]);return f};var t={},o={2:0};r.e=function(e){function n(){u.onerror=u.onload=null,clearTimeout(i);var r=o[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}if(0===o[e])return Promise.resolve();if(o[e])return o[e][2];var t=new Promise(function(r,n){o[e]=[r,n]});o[e][2]=t;var c=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,r.nc&&u.setAttribute("nonce",r.nc),u.src=r.p+""+e+".js?"+{0:"bf962cded96400bef9a0",1:"66dfcf2d1c500e900413"}[e];var i=setTimeout(n,12e4);return u.onerror=u.onload=n,c.appendChild(u),t},r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.oe=function(e){throw console.error(e),e}}([]);
|
File diff suppressed because one or more lines are too long
@ -89,6 +89,8 @@ type ProxyStatsInfo struct {
|
|||||||
TodayTrafficIn int64 `json:"today_traffic_in"`
|
TodayTrafficIn int64 `json:"today_traffic_in"`
|
||||||
TodayTrafficOut int64 `json:"today_traffic_out"`
|
TodayTrafficOut int64 `json:"today_traffic_out"`
|
||||||
CurConns int64 `json:"cur_conns"`
|
CurConns int64 `json:"cur_conns"`
|
||||||
|
LastStartTime string `json:"last_start_time"`
|
||||||
|
LastCloseTime string `json:"last_close_time"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,10 +178,12 @@ func getProxyStatsByType(proxyType string) (proxyInfos []*ProxyStatsInfo) {
|
|||||||
} else {
|
} else {
|
||||||
proxyInfo.Status = consts.Offline
|
proxyInfo.Status = consts.Offline
|
||||||
}
|
}
|
||||||
|
proxyInfo.Name = ps.Name
|
||||||
proxyInfo.TodayTrafficIn = ps.TodayTrafficIn
|
proxyInfo.TodayTrafficIn = ps.TodayTrafficIn
|
||||||
proxyInfo.TodayTrafficOut = ps.TodayTrafficOut
|
proxyInfo.TodayTrafficOut = ps.TodayTrafficOut
|
||||||
proxyInfo.CurConns = ps.CurConns
|
proxyInfo.CurConns = ps.CurConns
|
||||||
proxyInfo.Name = ps.Name
|
proxyInfo.LastStartTime = ps.LastStartTime
|
||||||
|
proxyInfo.LastCloseTime = ps.LastCloseTime
|
||||||
proxyInfos = append(proxyInfos, proxyInfo)
|
proxyInfos = append(proxyInfos, proxyInfo)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -117,15 +117,15 @@ func StatsNewProxy(name string, proxyType string) {
|
|||||||
proxyStats, ok := globalStats.ProxyStatistics[name]
|
proxyStats, ok := globalStats.ProxyStatistics[name]
|
||||||
if !(ok && proxyStats.ProxyType == proxyType) {
|
if !(ok && proxyStats.ProxyType == proxyType) {
|
||||||
proxyStats = &ProxyStatistics{
|
proxyStats = &ProxyStatistics{
|
||||||
Name: name,
|
Name: name,
|
||||||
ProxyType: proxyType,
|
ProxyType: proxyType,
|
||||||
CurConns: metric.NewCounter(),
|
CurConns: metric.NewCounter(),
|
||||||
TrafficIn: metric.NewDateCounter(ReserveDays),
|
TrafficIn: metric.NewDateCounter(ReserveDays),
|
||||||
TrafficOut: metric.NewDateCounter(ReserveDays),
|
TrafficOut: metric.NewDateCounter(ReserveDays),
|
||||||
LastStartTime: time.Now(),
|
|
||||||
}
|
}
|
||||||
globalStats.ProxyStatistics[name] = proxyStats
|
globalStats.ProxyStatistics[name] = proxyStats
|
||||||
}
|
}
|
||||||
|
proxyStats.LastStartTime = time.Now()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,6 +230,8 @@ type ProxyStats struct {
|
|||||||
Type string
|
Type string
|
||||||
TodayTrafficIn int64
|
TodayTrafficIn int64
|
||||||
TodayTrafficOut int64
|
TodayTrafficOut int64
|
||||||
|
LastStartTime string
|
||||||
|
LastCloseTime string
|
||||||
CurConns int64
|
CurConns int64
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,6 +252,12 @@ func StatsGetProxiesByType(proxyType string) []*ProxyStats {
|
|||||||
TodayTrafficOut: proxyStats.TrafficOut.TodayCount(),
|
TodayTrafficOut: proxyStats.TrafficOut.TodayCount(),
|
||||||
CurConns: proxyStats.CurConns.Count(),
|
CurConns: proxyStats.CurConns.Count(),
|
||||||
}
|
}
|
||||||
|
if !proxyStats.LastStartTime.IsZero() {
|
||||||
|
ps.LastStartTime = proxyStats.LastStartTime.Format("01-02 15:04:05")
|
||||||
|
}
|
||||||
|
if !proxyStats.LastCloseTime.IsZero() {
|
||||||
|
ps.LastCloseTime = proxyStats.LastCloseTime.Format("01-02 15:04:05")
|
||||||
|
}
|
||||||
res = append(res, ps)
|
res = append(res, ps)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<el-form-item label="Client Counts">
|
<el-form-item label="Client Counts">
|
||||||
<span>{{ client_counts }}</span>
|
<span>{{ client_counts }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Current Conns">
|
<el-form-item label="Current Connections">
|
||||||
<span>{{ cur_conns }}</span>
|
<span>{{ cur_conns }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Proxy Counts">
|
<el-form-item label="Proxy Counts">
|
||||||
|
@ -39,6 +39,12 @@
|
|||||||
<el-form-item label="Compression">
|
<el-form-item label="Compression">
|
||||||
<span>{{ props.row.compression }}</span>
|
<span>{{ props.row.compression }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Start">
|
||||||
|
<span>{{ props.row.last_start_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Close">
|
||||||
|
<span>{{ props.row.last_close_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -33,6 +33,12 @@
|
|||||||
<el-form-item label="Compression">
|
<el-form-item label="Compression">
|
||||||
<span>{{ props.row.compression }}</span>
|
<span>{{ props.row.compression }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Start">
|
||||||
|
<span>{{ props.row.last_start_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Close">
|
||||||
|
<span>{{ props.row.last_close_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -30,6 +30,12 @@
|
|||||||
<el-form-item label="Compression">
|
<el-form-item label="Compression">
|
||||||
<span>{{ props.row.compression }}</span>
|
<span>{{ props.row.compression }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Start">
|
||||||
|
<span>{{ props.row.last_start_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Close">
|
||||||
|
<span>{{ props.row.last_close_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -30,6 +30,12 @@
|
|||||||
<el-form-item label="Compression">
|
<el-form-item label="Compression">
|
||||||
<span>{{ props.row.compression }}</span>
|
<span>{{ props.row.compression }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Start">
|
||||||
|
<span>{{ props.row.last_start_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="Last Close">
|
||||||
|
<span>{{ props.row.last_close_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -11,6 +11,8 @@ class BaseProxy {
|
|||||||
this.conns = proxyStats.cur_conns
|
this.conns = proxyStats.cur_conns
|
||||||
this.traffic_in = proxyStats.today_traffic_in
|
this.traffic_in = proxyStats.today_traffic_in
|
||||||
this.traffic_out = proxyStats.today_traffic_out
|
this.traffic_out = proxyStats.today_traffic_out
|
||||||
|
this.last_start_time = proxyStats.last_start_time
|
||||||
|
this.last_close_time = proxyStats.last_close_time
|
||||||
this.status = proxyStats.status
|
this.status = proxyStats.status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user