+
+端口映射管理:
+
+
+端口池管理:
+
+
+用户管理:
+
+
+## 9、迭代进度&未来计划
+从`2022-06-16` 第一个完整可用版本发布(无管理后台、无DB,纯配置实现)起,该项目已具备完整的内网穿透功能。经过后续的不断重构,初步完成了以下迭代:
+- 使用sqlite取代纯配置,增加管理后台界面。解决修改端口映射需要重新打包的问题。
+- 增加mysql支持。初学时,直接默认使用sqlite,可以专注于学习代理相关细节而不必额外安装、配置数据库。有了自己的服务器后,可配置使用mysql,完全兼容。
+- 增加端口池管理。方便服务器统一设置安全组,避免暴露的外网端口杂乱无章。
+- 集成调度管理。个人版项目自带调度管理,降低学习、使用成本。无需部署、接入其他调度服务。
+- 增加简单的游客权限限制。个人版项目无需权限管理,但是为了演示需要,同时避免游客篡改管理员数据。
+- 封装一套类似于SpringBoot + Mybatis的简化框架,用于支撑上层代理项目,减少外部依赖,为后期孵化一个开源框架做准备。
+
+由于笔者工作之余才能进行开发,可投入时间不固定。截至目前(2023-02),该项目2.0版本仍未发布,基于此未来的计划如下:
+- 完成2.0版本发布(还剩下报表管理、首页图表功能)。
+- 底层框架全部重构。
+- 分离出一个开源框架项目,并持续维护。
+- 思考或着手基于内网穿透的产品开发,包括但不限于内网穿透SaaS服务、堡垒机。
+
+## 10、联系我们
+笔者时间、能力有限,且开源项目非一朝一夕之事,存在众多问题亦在所难免。使用、学习过程中有任何问题欢迎大家与我联系。
+
+对项目有什么想法或者建议,可以加我微信拉交流群,或者创建[issues](https://gitee.com/dromara/neutrino-proxy/issues),一起完善项目
+
+
diff --git a/docs/article/2023/01/MyWeChatQRCode.jpeg b/docs/article/2023/01/MyWeChatQRCode.jpeg
new file mode 100644
index 00000000..3020c161
Binary files /dev/null and b/docs/article/2023/01/MyWeChatQRCode.jpeg differ
diff --git a/docs/article/2023/01/license1.png b/docs/article/2023/01/license1.png
new file mode 100644
index 00000000..1ce7e56a
Binary files /dev/null and b/docs/article/2023/01/license1.png differ
diff --git a/docs/article/2023/01/port-mapping1.png b/docs/article/2023/01/port-mapping1.png
new file mode 100644
index 00000000..99a86b96
Binary files /dev/null and b/docs/article/2023/01/port-mapping1.png differ
diff --git a/docs/article/2023/01/port-pool1.png b/docs/article/2023/01/port-pool1.png
new file mode 100644
index 00000000..26a6322b
Binary files /dev/null and b/docs/article/2023/01/port-pool1.png differ
diff --git a/docs/article/2023/01/user-manager1.png b/docs/article/2023/01/user-manager1.png
new file mode 100644
index 00000000..92818d83
Binary files /dev/null and b/docs/article/2023/01/user-manager1.png differ
diff --git a/neutrino-proxy-admin/src/api/portPool.js b/neutrino-proxy-admin/src/api/portPool.js
index 7dc48ba3..fb5a60b4 100644
--- a/neutrino-proxy-admin/src/api/portPool.js
+++ b/neutrino-proxy-admin/src/api/portPool.js
@@ -43,6 +43,14 @@ export function createPortPool(data) {
})
}
+export function updatePortPool(data) {
+ return request({
+ url: '/port-pool/update',
+ method: 'post',
+ data
+ })
+}
+
export function deletePortPool(id) {
return request({
url: '/port-pool/delete',
diff --git a/neutrino-proxy-admin/src/api/report.js b/neutrino-proxy-admin/src/api/report.js
index f4632503..44496df3 100644
--- a/neutrino-proxy-admin/src/api/report.js
+++ b/neutrino-proxy-admin/src/api/report.js
@@ -14,3 +14,27 @@ export function fetchLicenseFlowReportList(query) {
params: query
})
}
+
+export function fetchUserFlowMonthReportList(query) {
+ return request({
+ url: '/report/user/flow-month-report/page',
+ method: 'get',
+ params: query
+ })
+}
+
+export function fetchLicenseFlowMonthReportList(query) {
+ return request({
+ url: '/report/license/flow-month-report/page',
+ method: 'get',
+ params: query
+ })
+}
+
+export function homeData(query) {
+ return request({
+ url: '/report/home/data-view',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/neutrino-proxy-admin/src/lang/zh.js b/neutrino-proxy-admin/src/lang/zh.js
index 7fc4f215..b342fe7e 100644
--- a/neutrino-proxy-admin/src/lang/zh.js
+++ b/neutrino-proxy-admin/src/lang/zh.js
@@ -59,7 +59,9 @@ export default {
clientConnectLog: '客户端连接日志',
report: '报表管理',
userFlowReport: '用户流量报表',
- licenseFlowReport: 'License流量报表'
+ licenseFlowReport: 'License流量报表',
+ userFlowMonthReport: '用户流量月度明细',
+ licenseFlowMonthReport: 'License流量月度明细'
},
navbar: {
logOut: '退出登录',
diff --git a/neutrino-proxy-admin/src/router/index.js b/neutrino-proxy-admin/src/router/index.js
index 1dd444cf..8fc01e28 100644
--- a/neutrino-proxy-admin/src/router/index.js
+++ b/neutrino-proxy-admin/src/router/index.js
@@ -91,7 +91,9 @@ export const asyncRouterMap = [
},
children: [
{ path: 'userFlowReport', component: _import('report/userFlowReport'), name: 'userFlowReport', meta: { title: 'userFlowReport' }},
- { path: 'licenseFlowReport', component: _import('report/licenseFlowReport'), name: 'licenseFlowReport', meta: { title: 'licenseFlowReport' }}
+ { path: 'licenseFlowReport', component: _import('report/licenseFlowReport'), name: 'licenseFlowReport', meta: { title: 'licenseFlowReport' }},
+ { path: 'userFlowMonthReport', component: _import('report/userFlowMonthReport'), name: 'userFlowMonthReport', meta: { title: 'userFlowMonthReport' }},
+ { path: 'licenseFlowMonthReport', component: _import('report/licenseFlowMonthReport'), name: 'licenseFlowMonthReport', meta: { title: 'licenseFlowMonthReport' }}
]
},
{
diff --git a/neutrino-proxy-admin/src/utils/utils.js b/neutrino-proxy-admin/src/utils/utils.js
new file mode 100644
index 00000000..4a1bfb0f
--- /dev/null
+++ b/neutrino-proxy-admin/src/utils/utils.js
@@ -0,0 +1,29 @@
+const SIZE_UNINTS = ['B', 'KB', 'MB', 'GB', 'TB']
+const SIZE_SYSTEM = 1024
+/**
+ * 根据字节数获取大小描述
+ * 1、小于1024字节的以B为单位
+ * 2、小于1024KB的以KB为单位
+ * 3、小于1024M的以MB为单位
+ * 4、小于1024G的以GB为单位
+ * 5、其他以TB为单位
+ */
+export function getSizeDescByByteCount(byteCount) {
+ if (byteCount <= 0) {
+ return '0B'
+ }
+
+ let res = byteCount
+ let index = 0
+ while (index < SIZE_UNINTS.length && res >= SIZE_SYSTEM) {
+ res /= SIZE_SYSTEM
+ index++
+ }
+
+ if (index >= SIZE_UNINTS.length) {
+ index = SIZE_UNINTS.length - 1
+ res *= 1024
+ }
+
+ return parseFloat(res.toFixed(2)) + SIZE_UNINTS[index]
+}
diff --git a/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue b/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue
index 74c7e7fc..37686327 100644
--- a/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue
+++ b/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue
@@ -5,6 +5,7 @@
@@ -127,9 +119,9 @@ export default {
flex: 0 0 auto;
}
.pie-chart{
- padding-top: 16px;
+ padding-bottom: 16px;
.el-card{
- min-height: 300px;
+ min-height: 250px;
}
}
}
diff --git a/neutrino-proxy-admin/src/views/log/clientConnectLog.vue b/neutrino-proxy-admin/src/views/log/clientConnectLog.vue
index 45d3731f..0a607eab 100644
--- a/neutrino-proxy-admin/src/views/log/clientConnectLog.vue
+++ b/neutrino-proxy-admin/src/views/log/clientConnectLog.vue
@@ -1,6 +1,9 @@