mirror of https://github.com/fatedier/frp
				
				
				
			dashboard: add proxy start and close time
							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
	
	 fatedier
						fatedier