From ce663cdccc6fc7ada7f03d43e4b1bb03be7c0686 Mon Sep 17 00:00:00 2001
From: SmallChi <564952747@qq.com>
Date: Thu, 3 Jan 2019 19:22:56 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=B3=BB=E7=BB=9F=E9=87=87?=
=?UTF-8?q?=E9=9B=86=E6=9C=8D=E5=8A=A1=E5=8F=8A=E6=8E=A5=E5=8F=A3=E6=96=87?=
=?UTF-8?q?=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
api/README.md | 69 ++++++++++++++++++-
.../Dtos/JT808SystemCollectInfoDto.cs | 33 +++++++++
.../JT808Constants.cs | 6 ++
.../Handlers/JT808MsgIdHttpHandlerBase.cs | 10 ++-
.../JT808CoreDotnettyExtensions.cs | 1 +
.../JT808SimpleSystemCollectService.cs | 30 ++++++++
.../JT808.DotNetty.Hosting.ini | 6 ++
.../JT808TcpSessionManagerTest.cs | 4 --
.../JT808MsgIdDefaultWebApiHandler.cs | 28 +++++++-
9 files changed, 180 insertions(+), 7 deletions(-)
create mode 100644 src/JT808.DotNetty.Abstractions/Dtos/JT808SystemCollectInfoDto.cs
create mode 100644 src/JT808.DotNetty.Core/Services/JT808SimpleSystemCollectService.cs
create mode 100644 src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.ini
diff --git a/api/README.md b/api/README.md
index 559eb3c..1253caa 100644
--- a/api/README.md
+++ b/api/README.md
@@ -1,6 +1,6 @@
# JT808 WebApi服务
-基地址:http://localhost:828/jt808api/
+基地址:127.0.0.1:828/jt808api/
数据格式:只支持Json格式
@@ -34,6 +34,41 @@
[基于Udp流量统计服务](#udp_traffic)
+## 6.系统性能数据采集服务
+
+[获取当前系统进程使用率](#system_collect)
+
+## 接口请求对照表
+
+### 基于Tcp接口请求
+
+|请求Url|请求方式|说明|
+|:------|:------|:------|
+| 127.0.0.1:828/jt808api/Tcp/UnificationSend| POST| 基于Tcp统一下发设备消息服务|
+| 127.0.0.1:828/jt808api/Tcp/Session/GetAll| GET| 基于Tcp管理会话服务-获取会话集合|
+| 127.0.0.1:828/jt808api/Tcp/Session/RemoveByTerminalPhoneNo| POST| 基于Tcp管理会话服务-通过设备终端号移除对应会话|
+| 127.0.0.1:828/jt808api/Tcp/Transmit/Add| POST| 基于Tcp转发地址过滤服务-添加转发过滤地址|
+| 127.0.0.1:828/jt808api/Tcp/Transmit/Remove| POST| 基于Tcp转发地址过滤服务-删除转发过滤地址|
+| 127.0.0.1:828/jt808api/Tcp/Transmit/GetAll| GET| 基于Tcp转发地址过滤服务-获取转发过滤地址信息集合|
+| 127.0.0.1:828/jt808api/Tcp/GetAtomicCounter| GET| 基于Tcp消息包计数服务|
+| 127.0.0.1:828/jt808api/Tcp/Traffic/Get| GET| 基于Tcp流量统计服务|
+
+### 基于Udp接口请求
+
+|请求Url|请求方式|说明|
+|:------|:------|:------|
+| 127.0.0.1:828/jt808api/Udp/UnificationSend| POST| 基于Udp统一下发设备消息服务|
+| 127.0.0.1:828/jt808api/Udp/Session/GetAll| GET| 基于Udp管理会话服务-获取会话集合|
+| 127.0.0.1:828/jt808api/Udp/Session/RemoveByTerminalPhoneNo| POST| 基于Udp管理会话服务-通过设备终端号移除对应会话|
+| 127.0.0.1:828/jt808api/Udp/GetAtomicCounter| GET| 基于Udp消息包计数服务|
+| 127.0.0.1:828/jt808api/Udp/Traffic/Get| GET| 基于Udp流量统计服务|
+
+### 公共接口请求
+
+|请求Url|请求方式|说明|
+|:------|:------|:------|
+| 127.0.0.1:828/jt808api/SystemCollect/Get| GET| 获取当前系统进程使用情况|
+
### 统一对象返回 JT808ResultDto\
|属性|数据类型|参数说明|
@@ -442,4 +477,36 @@
"TotalSendSize":0.01953125
}
}
+```
+
+### 系统性能数据采集服务
+
+请求地址:SystemCollect/Get
+
+请求方式:GET
+
+返回数据:
+
+|属性|数据类型|参数说明|
+|------|:------:|:------|
+| ProcessId| int| 进程Id|
+| WorkingSet64| double| 进程分配内存(单位MB)|
+| PeakWorkingSet64| double| 进程分配内存峰值(单位MB)|
+| PrivateMemorySize64| double| 进程分配私有内存(单位MB)|
+| CPUTotalProcessorTime| TimeSpan|进程执行CPU总处理时间|
+
+返回结果:
+
+``` sc
+{
+ "Message":"",
+ "Code":200,
+ "Data":{
+ "ProcessId":101412,
+ "WorkingSet64":73.0625,
+ "PeakWorkingSet64":73.0625,
+ "PrivateMemorySize64":134.6796875,
+ "CPUTotalProcessorTime":"00:00:14.5625000"
+ }
+}
```
\ No newline at end of file
diff --git a/src/JT808.DotNetty.Abstractions/Dtos/JT808SystemCollectInfoDto.cs b/src/JT808.DotNetty.Abstractions/Dtos/JT808SystemCollectInfoDto.cs
new file mode 100644
index 0000000..23c883c
--- /dev/null
+++ b/src/JT808.DotNetty.Abstractions/Dtos/JT808SystemCollectInfoDto.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace JT808.DotNetty.Abstractions.Dtos
+{
+ public class JT808SystemCollectInfoDto
+ {
+ ///
+ /// 进程Id
+ ///
+ public int ProcessId { get; set; }
+ ///
+ /// 进程分配内存
+ /// 单位MB
+ ///
+ public double WorkingSet64 { get; set; }
+ ///
+ /// 进程分配内存峰值
+ /// 单位MB
+ ///
+ public double PeakWorkingSet64 { get; set; }
+ ///
+ /// 进程分配私有内存
+ /// 单位MB
+ ///
+ public double PrivateMemorySize64 { get; set; }
+ ///
+ /// 进程执行CPU总处理时间
+ ///
+ public TimeSpan CPUTotalProcessorTime { get; set; }
+ }
+}
diff --git a/src/JT808.DotNetty.Abstractions/JT808Constants.cs b/src/JT808.DotNetty.Abstractions/JT808Constants.cs
index b331acb..bc65121 100644
--- a/src/JT808.DotNetty.Abstractions/JT808Constants.cs
+++ b/src/JT808.DotNetty.Abstractions/JT808Constants.cs
@@ -14,12 +14,18 @@
public const string TransmitPrefix = "Transmit";
+ public const string SystemCollectPrefix = "SystemCollect";
+
public const string TrafficPrefix = "Traffic";
public const string TcpPrefix = "Tcp";
public const string UdpPrefix = "Udp";
+ ///
+ ///获取当前系统进程使用率
+ ///
+ public static string SystemCollectGet = $"{RouteTablePrefix}/{SystemCollectPrefix}/Get";
///
///基于Tcp的添加转发过滤地址
///
diff --git a/src/JT808.DotNetty.Core/Handlers/JT808MsgIdHttpHandlerBase.cs b/src/JT808.DotNetty.Core/Handlers/JT808MsgIdHttpHandlerBase.cs
index 62e8b76..fc7ef74 100644
--- a/src/JT808.DotNetty.Core/Handlers/JT808MsgIdHttpHandlerBase.cs
+++ b/src/JT808.DotNetty.Core/Handlers/JT808MsgIdHttpHandlerBase.cs
@@ -27,7 +27,15 @@ namespace JT808.DotNetty.Core.Handlers
protected void CreateRoute(string url, Func func)
{
- HandlerDict.Add(url, func);
+ if (!HandlerDict.ContainsKey(url))
+ {
+ HandlerDict.Add(url, func);
+ }
+ else
+ {
+ // 替换
+ HandlerDict[url] = func;
+ }
}
public Dictionary> HandlerDict { get; }
diff --git a/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs b/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs
index 5dd16a3..88396cc 100644
--- a/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs
+++ b/src/JT808.DotNetty.Core/JT808CoreDotnettyExtensions.cs
@@ -26,6 +26,7 @@ namespace JT808.DotNetty.Core
serviceDescriptors.TryAddSingleton();
serviceDescriptors.TryAddSingleton();
serviceDescriptors.TryAddSingleton();
+ serviceDescriptors.TryAddSingleton();
return serviceDescriptors;
}
}
diff --git a/src/JT808.DotNetty.Core/Services/JT808SimpleSystemCollectService.cs b/src/JT808.DotNetty.Core/Services/JT808SimpleSystemCollectService.cs
new file mode 100644
index 0000000..2482cff
--- /dev/null
+++ b/src/JT808.DotNetty.Core/Services/JT808SimpleSystemCollectService.cs
@@ -0,0 +1,30 @@
+using JT808.DotNetty.Abstractions.Dtos;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+
+namespace JT808.DotNetty.Core.Services
+{
+ ///
+ /// 简单系统收集服务
+ ///
+ public class JT808SimpleSystemCollectService
+ {
+ ///
+ /// 获取系统当前进程使用情况
+ ///
+ ///
+ public JT808SystemCollectInfoDto Get()
+ {
+ JT808SystemCollectInfoDto jT808SystemCollectInfoDto = new JT808SystemCollectInfoDto();
+ var proc = Process.GetCurrentProcess();
+ jT808SystemCollectInfoDto.ProcessId = proc.Id;
+ jT808SystemCollectInfoDto.WorkingSet64 = proc.WorkingSet64 / 1024.0 / 1024.0;
+ jT808SystemCollectInfoDto.PeakWorkingSet64 = proc.PeakWorkingSet64 / 1024.0 / 1024.0;
+ jT808SystemCollectInfoDto.PrivateMemorySize64 = proc.PrivateMemorySize64 / 1024.0 / 1024.0;
+ jT808SystemCollectInfoDto.CPUTotalProcessorTime = proc.TotalProcessorTime;
+ return jT808SystemCollectInfoDto;
+ }
+ }
+}
diff --git a/src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.ini b/src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.ini
new file mode 100644
index 0000000..75ec140
--- /dev/null
+++ b/src/JT808.DotNetty.Hosting/JT808.DotNetty.Hosting.ini
@@ -0,0 +1,6 @@
+[program:JT808.DotNetty.Hosting]
+command=dotnet JT808.DotNetty.Hosting.dll
+directory=/data/dotnetty_test
+user=root
+stdout_logfile=/data/supervisordlog/JT808.DotNetty.Hosting.log
+redirect_stderr=true
\ No newline at end of file
diff --git a/src/JT808.DotNetty.Tests/JT808.DotNetty.Core.Test/JT808TcpSessionManagerTest.cs b/src/JT808.DotNetty.Tests/JT808.DotNetty.Core.Test/JT808TcpSessionManagerTest.cs
index a076428..0baa77a 100644
--- a/src/JT808.DotNetty.Tests/JT808.DotNetty.Core.Test/JT808TcpSessionManagerTest.cs
+++ b/src/JT808.DotNetty.Tests/JT808.DotNetty.Core.Test/JT808TcpSessionManagerTest.cs
@@ -1,9 +1,5 @@
using DotNetty.Transport.Channels.Embedded;
-using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
-using System;
-using System.Collections.Generic;
-using System.Text;
using System.Threading;
diff --git a/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs b/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs
index ee0b637..0820b4e 100644
--- a/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs
+++ b/src/JT808.DotNetty.WebApi/Handlers/JT808MsgIdDefaultWebApiHandler.cs
@@ -31,11 +31,14 @@ namespace JT808.DotNetty.WebApi.Handlers
private readonly JT808UdpTrafficService jT808UdpTrafficService;
+ private readonly JT808SimpleSystemCollectService jT808SimpleSystemCollectService;
+
///
/// TCP一套注入
///
///
public JT808MsgIdDefaultWebApiHandler(
+ JT808SimpleSystemCollectService jT808SimpleSystemCollectService,
JT808TcpTrafficService jT808TcpTrafficService,
IJT808UnificationTcpSendService jT808UnificationTcpSendService,
IJT808TcpSessionService jT808TcpSessionService,
@@ -43,11 +46,13 @@ namespace JT808.DotNetty.WebApi.Handlers
JT808TcpAtomicCounterService jT808TcpAtomicCounterService
)
{
+ this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService;
this.jT808TcpTrafficService = jT808TcpTrafficService;
this.jT808UnificationTcpSendService = jT808UnificationTcpSendService;
this.jT808TcpSessionService = jT808TcpSessionService;
this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService;
this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService;
+ InitCommonRoute();
InitTcpRoute();
}
@@ -56,16 +61,19 @@ namespace JT808.DotNetty.WebApi.Handlers
///
///
public JT808MsgIdDefaultWebApiHandler(
+ JT808SimpleSystemCollectService jT808SimpleSystemCollectService,
JT808UdpTrafficService jT808UdpTrafficService,
IJT808UdpSessionService jT808UdpSessionService,
IJT808UnificationUdpSendService jT808UnificationUdpSendService,
JT808UdpAtomicCounterService jT808UdpAtomicCounterService
)
{
+ this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService;
this.jT808UdpTrafficService = jT808UdpTrafficService;
this.jT808UdpSessionService = jT808UdpSessionService;
this.jT808UnificationUdpSendService = jT808UnificationUdpSendService;
this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService;
+ InitCommonRoute();
InitUdpRoute();
}
@@ -75,7 +83,8 @@ namespace JT808.DotNetty.WebApi.Handlers
///
///
public JT808MsgIdDefaultWebApiHandler(
- JT808TcpTrafficService jT808TcpTrafficService,
+ JT808SimpleSystemCollectService jT808SimpleSystemCollectService,
+ JT808TcpTrafficService jT808TcpTrafficService,
JT808UdpTrafficService jT808UdpTrafficService,
IJT808UnificationTcpSendService jT808UnificationTcpSendService,
IJT808UnificationUdpSendService jT808UnificationUdpSendService,
@@ -86,6 +95,7 @@ namespace JT808.DotNetty.WebApi.Handlers
JT808UdpAtomicCounterService jT808UdpAtomicCounterService
)
{
+ this.jT808SimpleSystemCollectService = jT808SimpleSystemCollectService;
this.jT808TcpTrafficService = jT808TcpTrafficService;
this.jT808UdpTrafficService = jT808UdpTrafficService;
this.jT808UdpSessionService = jT808UdpSessionService;
@@ -95,6 +105,7 @@ namespace JT808.DotNetty.WebApi.Handlers
this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService;
this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService;
this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService;
+ InitCommonRoute();
InitTcpRoute();
InitUdpRoute();
}
@@ -283,6 +294,21 @@ namespace JT808.DotNetty.WebApi.Handlers
return CreateJT808HttpResponse(jT808TrafficInfoDto);
}
+ ///
+ /// 获取当前系统进程使用率
+ ///
+ ///
+ ///
+ public JT808HttpResponse SystemCollectGet(JT808HttpRequest request)
+ {
+ return CreateJT808HttpResponse(jT808SimpleSystemCollectService.Get());
+ }
+
+ protected virtual void InitCommonRoute()
+ {
+ CreateRoute(JT808Constants.JT808WebApiRouteTable.SystemCollectGet, SystemCollectGet);
+ }
+
protected virtual void InitTcpRoute()
{
CreateRoute(JT808Constants.JT808WebApiRouteTable.TransmitAdd, AddTransmitAddress);