Merge branch 'master' of http://git.newlifex.com/NewLife/Stardust
This commit is contained in:
commit
32a7de8995
BIN
Doc/星尘分布式.emmx
BIN
Doc/星尘分布式.emmx
Binary file not shown.
BIN
Doc/星尘分布式.png
BIN
Doc/星尘分布式.png
Binary file not shown.
Before Width: | Height: | Size: 951 KiB After Width: | Height: | Size: 1.2 MiB |
|
@ -84,7 +84,7 @@ public class StarService : DisposeBase, IApi
|
||||||
|
|
||||||
var ai = _agentInfo ??= AgentInfo.GetLocal(true);
|
var ai = _agentInfo ??= AgentInfo.GetLocal(true);
|
||||||
ai.Server = set.Server;
|
ai.Server = set.Server;
|
||||||
ai.Services = Manager?.Services.Where(e => e.Enable || !e.Name.EqualIgnoreCase("test", "test2")).Select(e => e.Name).ToArray();
|
ai.Services = Manager?.Services?.Where(e => e.Enable || !e.Name.EqualIgnoreCase("test", "test2")).Select(e => e.Name).ToArray();
|
||||||
ai.Code = AgentSetting.Code;
|
ai.Code = AgentSetting.Code;
|
||||||
ai.IP = AgentInfo.GetIps();
|
ai.IP = AgentInfo.GetIps();
|
||||||
|
|
||||||
|
@ -95,13 +95,13 @@ public class StarService : DisposeBase, IApi
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新应用服务
|
// 更新应用服务
|
||||||
var controller = Manager?.QueryByProcess(info.ProcessId);
|
var controller = info == null ? null : Manager?.QueryByProcess(info.ProcessId);
|
||||||
if (controller != null)
|
if (controller != null)
|
||||||
{
|
{
|
||||||
// 标记为星尘应用,停止Deploy上报进程信息
|
// 标记为星尘应用,停止Deploy上报进程信息
|
||||||
controller.IsStarApp = true;
|
controller.IsStarApp = true;
|
||||||
|
|
||||||
controller.WriteEvent("本地探测", raw);
|
controller.WriteEvent("本地探测", raw!);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 返回插件服务器地址
|
// 返回插件服务器地址
|
||||||
|
|
|
@ -108,17 +108,19 @@ public partial class AppMeter : Entity<AppMeter>
|
||||||
/// <summary>高级查询</summary>
|
/// <summary>高级查询</summary>
|
||||||
/// <param name="appId">应用</param>
|
/// <param name="appId">应用</param>
|
||||||
/// <param name="clientId">客户端标识</param>
|
/// <param name="clientId">客户端标识</param>
|
||||||
|
/// <param name="source">数据来源。区分Ping/Deploy</param>
|
||||||
/// <param name="start">开始时间</param>
|
/// <param name="start">开始时间</param>
|
||||||
/// <param name="end">结束时间</param>
|
/// <param name="end">结束时间</param>
|
||||||
/// <param name="key">关键字</param>
|
/// <param name="key">关键字</param>
|
||||||
/// <param name="page">分页参数信息。可携带统计和数据权限扩展查询等信息</param>
|
/// <param name="page">分页参数信息。可携带统计和数据权限扩展查询等信息</param>
|
||||||
/// <returns>实体列表</returns>
|
/// <returns>实体列表</returns>
|
||||||
public static IList<AppMeter> Search(Int32 appId, String clientId, DateTime start, DateTime end, String key, PageParameter page)
|
public static IList<AppMeter> Search(Int32 appId, String clientId, String source, DateTime start, DateTime end, String key, PageParameter page)
|
||||||
{
|
{
|
||||||
var exp = new WhereExpression();
|
var exp = new WhereExpression();
|
||||||
|
|
||||||
if (appId >= 0) exp &= _.AppId == appId;
|
if (appId >= 0) exp &= _.AppId == appId;
|
||||||
if (!clientId.IsNullOrEmpty() && clientId != "null") exp &= _.ClientId == clientId;
|
if (!clientId.IsNullOrEmpty() && clientId != "null") exp &= _.ClientId == clientId;
|
||||||
|
if (!source.IsNullOrEmpty()) exp &= _.Source == source;
|
||||||
exp &= _.Id.Between(start, end, Meta.Factory.Snow);
|
exp &= _.Id.Between(start, end, Meta.Factory.Snow);
|
||||||
if (!key.IsNullOrEmpty()) exp &= _.ClientId.Contains(key) | _.Creator.Contains(key) | _.CreateIP.Contains(key);
|
if (!key.IsNullOrEmpty()) exp &= _.ClientId.Contains(key) | _.Creator.Contains(key) | _.CreateIP.Contains(key);
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
||||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
||||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.719-beta0004" />
|
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.722-beta0820" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class NodeOnlineController : ReadOnlyEntityController<NodeOnline>
|
||||||
|
|
||||||
var list = ListFields;
|
var list = ListFields;
|
||||||
list.Clear();
|
list.Clear();
|
||||||
var allows = new[] { "ID", "ProjectName", "Name", "Category", "ProductCode", "CityName", "Address", "PingCount", "WebSocket", "Version", "OSKind", "IP", "AvailableMemory", "MemoryUsed", "AvailableFreeSpace", "SpaceUsed", "CpuRate", "ProcessCount", __.Signal, __.Offset, "UplinkSpeed", "DownlinkSpeed", "TraceId", "LocalTime", "CreateTime", "UpdateTime", "UpdateIP" };
|
var allows = new[] { "ID", "ProjectName", "Name", "Category", "ProductCode", "CityName", "Address", "PingCount", "WebSocket", "Version", "OSKind", "IP", "AvailableMemory", "MemoryUsed", "AvailableFreeSpace", "SpaceUsed", "CpuRate", "ProcessCount", __.Signal, __.Offset, "UplinkSpeed", "DownlinkSpeed", "IntranetScore", "InternetScore", "TraceId", "LocalTime", "CreateTime", "UpdateTime", "UpdateIP" };
|
||||||
foreach (var item in allows)
|
foreach (var item in allows)
|
||||||
{
|
{
|
||||||
list.AddListField(item);
|
list.AddListField(item);
|
||||||
|
|
|
@ -23,6 +23,10 @@ public class AppMeterController : EntityController<AppMeter>
|
||||||
var df = ListFields.GetField("ClientId") as ListField;
|
var df = ListFields.GetField("ClientId") as ListField;
|
||||||
df.Url = "/Registry/AppMeter?appId={AppId}&clientId={ClientId}";
|
df.Url = "/Registry/AppMeter?appId={AppId}&clientId={ClientId}";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
var df = ListFields.GetField("Source") as ListField;
|
||||||
|
df.Url = "/Registry/AppMeter?appId={AppId}&clientId={ClientId}&source={Source}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnActionExecuting(ActionExecutingContext filterContext)
|
public override void OnActionExecuting(ActionExecutingContext filterContext)
|
||||||
|
@ -56,6 +60,7 @@ public class AppMeterController : EntityController<AppMeter>
|
||||||
|
|
||||||
var appId = p["appId"].ToInt(-1);
|
var appId = p["appId"].ToInt(-1);
|
||||||
var clientId = p["clientId"];
|
var clientId = p["clientId"];
|
||||||
|
var source = p["source"];
|
||||||
|
|
||||||
// 应用在线多IP时,只取第一个
|
// 应用在线多IP时,只取第一个
|
||||||
if (!clientId.IsNullOrEmpty())
|
if (!clientId.IsNullOrEmpty())
|
||||||
|
@ -90,7 +95,7 @@ public class AppMeterController : EntityController<AppMeter>
|
||||||
|
|
||||||
if (p.Sort.IsNullOrEmpty()) p.OrderBy = _.Id.Desc();
|
if (p.Sort.IsNullOrEmpty()) p.OrderBy = _.Id.Desc();
|
||||||
|
|
||||||
var list = AppMeter.Search(appId, clientId, start, end, p["Q"], p);
|
var list = AppMeter.Search(appId, clientId, source, start, end, p["Q"], p);
|
||||||
|
|
||||||
// 如果没有clientId,则可能列表数据里面只有一个,选择它,便于展示图表
|
// 如果没有clientId,则可能列表数据里面只有一个,选择它,便于展示图表
|
||||||
if (list.Count > 0 && clientId.IsNullOrEmpty())
|
if (list.Count > 0 && clientId.IsNullOrEmpty())
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.715-beta1654" />
|
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.715-beta1654" />
|
||||||
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
||||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
||||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.719-beta0004" />
|
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.722-beta0820" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -47,12 +47,12 @@ public class PingMonitor
|
||||||
var threshold = 1f;
|
var threshold = 1f;
|
||||||
var successRate = rtTimes.Count / Times;
|
var successRate = rtTimes.Count / Times;
|
||||||
var latency = rtTimes.Average();
|
var latency = rtTimes.Average();
|
||||||
var latencyScore = 0d;
|
//var latencyScore = 0d;
|
||||||
if (latency <= threshold)
|
//if (latency <= threshold)
|
||||||
latencyScore = 1f;
|
// latencyScore = 1f;
|
||||||
else
|
//else
|
||||||
// 衰减系数λ=0.001。1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%
|
// 衰减系数λ=0.001。1ms为100%,10ms为99.1%,100ms为90.57%,500ms为60.71%,1000ms为36.82%
|
||||||
latencyScore = Math.Exp(-0.001 * (latency - threshold));
|
var latencyScore = Math.Exp(-0.001 * (latency - threshold));
|
||||||
|
|
||||||
// 确保得分在0-1之间
|
// 确保得分在0-1之间
|
||||||
var score = successRate * latencyScore;
|
var score = successRate * latencyScore;
|
||||||
|
|
|
@ -119,7 +119,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.719-beta0004" />
|
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.722-beta0820" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||||
|
|
Loading…
Reference in New Issue