From 5d718d184062d47708047e9b89e6fb5dba2e517c Mon Sep 17 00:00:00 2001 From: Argo-MacBookPro Date: Fri, 1 Mar 2019 13:48:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=EF=BC=9A?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0OnlineUsers=E5=8A=9F=E8=83=BD=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95=EF=BC=8C=E4=B8=AD=E9=97=B4=E4=BB=B6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0RemoteIpAddress=E5=9C=B0=E5=9D=80=E4=BF=9D?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bootstrap.Admin/OnlineUsers/OnlineUser.cs | 20 +++----------- .../OnlineUsersMiddlewareExtensions.cs | 9 +++++-- .../Bootstrap.Admin/Api/MySql/OnlineTest.cs | 10 +++++++ UnitTest/Bootstrap.Admin/Api/OnlineTest.cs | 25 ++++++++++++++++++ .../Bootstrap.Admin/Api/SQLite/OnlineTest.cs | 10 +++++++ .../Bootstrap.Admin/Controllers/AdminTest.cs | 1 + UnitTest/DB/UnitTest.db | Bin 81920 -> 81920 bytes 7 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 UnitTest/Bootstrap.Admin/Api/MySql/OnlineTest.cs create mode 100644 UnitTest/Bootstrap.Admin/Api/OnlineTest.cs create mode 100644 UnitTest/Bootstrap.Admin/Api/SQLite/OnlineTest.cs diff --git a/Bootstrap.Admin/OnlineUsers/OnlineUser.cs b/Bootstrap.Admin/OnlineUsers/OnlineUser.cs index 5e783877..690810ba 100644 --- a/Bootstrap.Admin/OnlineUsers/OnlineUser.cs +++ b/Bootstrap.Admin/OnlineUsers/OnlineUser.cs @@ -10,31 +10,17 @@ namespace Bootstrap.Admin /// public class OnlineUser { - private ConcurrentQueue> _requestUrls; + private ConcurrentQueue> _requestUrls = new ConcurrentQueue>(); /// /// /// - /// - /// - public OnlineUser(string ip, string userName) - { - Ip = ip; - UserName = userName; - FirstAccessTime = DateTime.Now; - LastAccessTime = DateTime.Now; - _requestUrls = new ConcurrentQueue>(); - } + public string UserName { get; set; } /// /// /// - public string UserName { get; } - - /// - /// - /// - public DateTime FirstAccessTime { get; } + public DateTime FirstAccessTime { get; set; } /// /// diff --git a/Bootstrap.Admin/OnlineUsers/OnlineUsersMiddlewareExtensions.cs b/Bootstrap.Admin/OnlineUsers/OnlineUsersMiddlewareExtensions.cs index c1783293..102c8f83 100644 --- a/Bootstrap.Admin/OnlineUsers/OnlineUsersMiddlewareExtensions.cs +++ b/Bootstrap.Admin/OnlineUsers/OnlineUsersMiddlewareExtensions.cs @@ -22,16 +22,21 @@ namespace Microsoft.AspNetCore.Builder await Task.Run(() => { var onlineUsers = context.RequestServices.GetService(); - var clientIp = context.Connection.RemoteIpAddress.ToString(); + var clientIp = context.Connection.RemoteIpAddress?.ToString() ?? "::1"; onlineUsers.AddOrUpdate(clientIp, key => { - var ou = new OnlineUser(key, context.User.Identity.Name); + var ou = new OnlineUser(); + ou.Ip = clientIp; + ou.UserName = context.User.Identity.Name; + ou.FirstAccessTime = DateTime.Now; + ou.LastAccessTime = DateTime.Now; ou.Method = context.Request.Method; ou.RequestUrl = context.Request.Path; ou.AddRequestUrl(context.Request.Path); return ou; }, (key, v) => { + v.UserName = context.User.Identity.Name; v.LastAccessTime = DateTime.Now; v.Method = context.Request.Method; v.RequestUrl = context.Request.Path; diff --git a/UnitTest/Bootstrap.Admin/Api/MySql/OnlineTest.cs b/UnitTest/Bootstrap.Admin/Api/MySql/OnlineTest.cs new file mode 100644 index 00000000..d79729fd --- /dev/null +++ b/UnitTest/Bootstrap.Admin/Api/MySql/OnlineTest.cs @@ -0,0 +1,10 @@ +using Xunit; + +namespace Bootstrap.Admin.Api.MySql +{ + [Collection("MySqlContext")] + public class OnlineTest : Api.OnlineTest + { + public OnlineTest(MySqlBAWebHost factory) : base(factory) { } + } +} diff --git a/UnitTest/Bootstrap.Admin/Api/OnlineTest.cs b/UnitTest/Bootstrap.Admin/Api/OnlineTest.cs new file mode 100644 index 00000000..7e77fd8f --- /dev/null +++ b/UnitTest/Bootstrap.Admin/Api/OnlineTest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using Xunit; + +namespace Bootstrap.Admin.Api +{ + public class OnlineTest : ControllerTest + { + public OnlineTest(BAWebHost factory) : base(factory, "api/OnlineUsers") { } + + [Fact] + public async void Post_Ok() + { + var usres = await Client.PostAsJsonAsync>(string.Empty); + Assert.Single(usres); + } + + [Fact] + public async void Get_Ok() + { + var urls = await Client.GetAsJsonAsync>>("::1"); + Assert.NotEmpty(urls); + } + } +} diff --git a/UnitTest/Bootstrap.Admin/Api/SQLite/OnlineTest.cs b/UnitTest/Bootstrap.Admin/Api/SQLite/OnlineTest.cs new file mode 100644 index 00000000..1b5733e0 --- /dev/null +++ b/UnitTest/Bootstrap.Admin/Api/SQLite/OnlineTest.cs @@ -0,0 +1,10 @@ +using Xunit; + +namespace Bootstrap.Admin.Api.SQLite +{ + [Collection("SQLiteContext")] + public class OnlineTest : Api.OnlineTest + { + public OnlineTest(SQLiteBAWebHost factory) : base(factory) { } + } +} diff --git a/UnitTest/Bootstrap.Admin/Controllers/AdminTest.cs b/UnitTest/Bootstrap.Admin/Controllers/AdminTest.cs index eaca1494..80acdc5b 100644 --- a/UnitTest/Bootstrap.Admin/Controllers/AdminTest.cs +++ b/UnitTest/Bootstrap.Admin/Controllers/AdminTest.cs @@ -22,6 +22,7 @@ namespace Bootstrap.Admin.Controllers [InlineData("Profiles", "个人中心")] [InlineData("Exceptions", "程序异常")] [InlineData("Messages", "站内消息")] + [InlineData("Online", "在线用户")] [InlineData("Tasks", "任务管理")] [InlineData("Mobile", "客户端测试")] public async void View_Ok(string view, string text) diff --git a/UnitTest/DB/UnitTest.db b/UnitTest/DB/UnitTest.db index 1fae2f5fd59d5a90ea6ed8cf49be2fd5a59cbbc4..75955d9b735548c319db112f4a16dcd9daccbc72 100644 GIT binary patch delta 384 zcmZo@U~On%oggK|%*?>RAOgjVK>FB39U~@Y=8Xv%@(RYf28IfT##SaKR>np~28Ncp z1}H+CU&zZO7>IF8G4P+@@8tL97vj6hH+-7tZF|U9&nCyhz{n`Z#3l=(MVZ)SK(q)Gn>2_PW@3{9(LzjY zk|0`;iA@4T3ox;XgJ>=$HZc&*%)}-NqM4XjMOYX(8JSpxfm}{uRv{22#3~4)1X%?@ flmII~h~j7E15%rp%rBn6Dg+E(;q5X8j8FIh3+PHS delta 346 zcmZo@U~On%oggK|%(VRwf2U28Ncp z1}H+CU&zZO=!tTNGVq_^@8tL97vj6hH%dHi^!xbJbV z=WgW=-7F}e%)MEvJDpLAkDGx*l}XuF3j-sg7!#Weh!$mHlLpZu zOl(phT9}DV5=09zu}OevK_)hF5G}yOCI+IpnAk)?G&2*M2#984Vijg#;ACWC6#{ZO tg;@nbln|=`h!SMw2T=m7d?1RCl@~~DUOhi&0;@1E-~_hI7%)EJ2LRyRJyrk!