Compare commits
11 Commits
f9a305f51a
...
83ff7d77b9
Author | SHA1 | Date |
---|---|---|
|
83ff7d77b9 | |
|
6a59a24604 | |
|
12d28ce290 | |
|
baae8e00cd | |
|
d9fd921481 | |
|
32a7de8995 | |
|
a3eef7dea3 | |
|
1ae98ffedc | |
|
21595c7e0d | |
|
16b19e0635 | |
![]() |
f077331a60 |
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 |
|
@ -54,6 +54,17 @@ internal class Program
|
|||
var set2 = StarAgentSetting.Current;
|
||||
if (!"-s".EqualIgnoreCase(args)) ThreadPoolX.QueueUserWorkItem(() => LoadUser(set2));
|
||||
|
||||
// 以服务工作时,提高当前进程优先级,确保星尘代理能够有效管控各个应用进程
|
||||
if ("-s".EqualIgnoreCase(args) || "-run".EqualIgnoreCase(args))
|
||||
{
|
||||
try
|
||||
{
|
||||
var process = Process.GetCurrentProcess();
|
||||
process.PriorityClass = ProcessPriorityClass.AboveNormal;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
var svc = new MyService
|
||||
{
|
||||
StarSetting = set,
|
||||
|
|
|
@ -84,7 +84,7 @@ public class StarService : DisposeBase, IApi
|
|||
|
||||
var ai = _agentInfo ??= AgentInfo.GetLocal(true);
|
||||
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.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)
|
||||
{
|
||||
// 标记为星尘应用,停止Deploy上报进程信息
|
||||
controller.IsStarApp = true;
|
||||
|
||||
controller.WriteEvent("本地探测", raw);
|
||||
controller.WriteEvent("本地探测", raw!);
|
||||
}
|
||||
|
||||
// 返回插件服务器地址
|
||||
|
|
|
@ -108,17 +108,19 @@ public partial class AppMeter : Entity<AppMeter>
|
|||
/// <summary>高级查询</summary>
|
||||
/// <param name="appId">应用</param>
|
||||
/// <param name="clientId">客户端标识</param>
|
||||
/// <param name="source">数据来源。区分Ping/Deploy</param>
|
||||
/// <param name="start">开始时间</param>
|
||||
/// <param name="end">结束时间</param>
|
||||
/// <param name="key">关键字</param>
|
||||
/// <param name="page">分页参数信息。可携带统计和数据权限扩展查询等信息</param>
|
||||
/// <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();
|
||||
|
||||
if (appId >= 0) exp &= _.AppId == appId;
|
||||
if (!clientId.IsNullOrEmpty() && clientId != "null") exp &= _.ClientId == clientId;
|
||||
if (!source.IsNullOrEmpty()) exp &= _.Source == source;
|
||||
exp &= _.Id.Between(start, end, Meta.Factory.Snow);
|
||||
if (!key.IsNullOrEmpty()) exp &= _.ClientId.Contains(key) | _.Creator.Contains(key) | _.CreateIP.Contains(key);
|
||||
|
||||
|
|
|
@ -79,7 +79,9 @@ class CacheDirectoryContents : IDirectoryContents, IEnumerable<IFileInfo>, IEnum
|
|||
foreach (var item in fis)
|
||||
{
|
||||
// 把fis里面的项添加到list
|
||||
if (!list.Any(e => e.Name.EqualIgnoreCase(item.Name)))
|
||||
item.Name = item.Name.TrimEnd('/', '\\');
|
||||
var name2 = item.Name.EnsureEnd(Path.DirectorySeparatorChar + "");
|
||||
if (!list.Any(e => e.Name.EqualIgnoreCase(item.Name, name2)))
|
||||
list.Add(item);
|
||||
}
|
||||
|
||||
|
|
|
@ -163,7 +163,7 @@ class CacheFileProvider : IFileProvider
|
|||
if (!target.IsNullOrEmpty() && fullPath.EndsWithIgnoreCase(".sh", ".bat"))
|
||||
{
|
||||
var txt = File.ReadAllText(fullPath);
|
||||
var txt2 = txt.Replace(item.EnsureEnd("/"), target.EnsureEnd("/"));
|
||||
var txt2 = txt.Replace(item.TrimEnd("/"), target.TrimEnd("/"));
|
||||
if (txt != txt2) File.WriteAllText(fullPath, txt2);
|
||||
}
|
||||
|
||||
|
|
|
@ -237,16 +237,35 @@ public class TracerMiddleware
|
|||
if (host.StartsWith("127.0.")) return;
|
||||
|
||||
var baseAddress = $"{uri.Scheme}://{host}";
|
||||
if (uri.Port > 0)
|
||||
{
|
||||
if (uri.Scheme == "http" && uri.Port != 80)
|
||||
baseAddress += ":" + uri.Port;
|
||||
else if (uri.Scheme == "https" && uri.Port != 443)
|
||||
baseAddress += ":" + uri.Port;
|
||||
}
|
||||
|
||||
var set = NewLife.Setting.Current;
|
||||
var ss = set.ServiceAddress?.Split(",").ToList() ?? [];
|
||||
if (!ss.Contains(baseAddress))
|
||||
{
|
||||
// 过滤掉本机地址
|
||||
ss = ss.Where(e => !e.EqualIgnoreCase("127.0.0.1", "localhost", "[::1]") && !e.StartsWith("127.0.")).ToList();
|
||||
var newAddrs = new List<String> { baseAddress };
|
||||
|
||||
ss.Insert(0, baseAddress);
|
||||
set.ServiceAddress = ss.Take(5).Join(",");
|
||||
// 过滤掉本机地址
|
||||
foreach (var item in ss)
|
||||
{
|
||||
var addr = item;
|
||||
if (!Uri.TryCreate(addr, UriKind.Absolute, out var u)) continue;
|
||||
if (u.Host.EqualIgnoreCase("127.0.0.1", "localhost", "[::1]")) continue;
|
||||
if (u.Host.StartsWith("127.0.")) continue;
|
||||
if (u.Port == 0) continue;
|
||||
|
||||
addr = u.ToString();
|
||||
|
||||
newAddrs.Add(addr);
|
||||
}
|
||||
|
||||
set.ServiceAddress = newAddrs.Take(5).Join(",");
|
||||
set.Save();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -408,6 +408,14 @@ braces@~3.0.2:
|
|||
dependencies:
|
||||
fill-range "^7.1.1"
|
||||
|
||||
call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
|
||||
integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
|
||||
dependencies:
|
||||
es-errors "^1.3.0"
|
||||
function-bind "^1.1.2"
|
||||
|
||||
"chokidar@>=2.0.0 <4.0.0":
|
||||
version "3.5.1"
|
||||
resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719440699&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
|
||||
|
@ -464,6 +472,15 @@ delayed-stream@~1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||
|
||||
dunder-proto@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
|
||||
integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
|
||||
dependencies:
|
||||
call-bind-apply-helpers "^1.0.1"
|
||||
es-errors "^1.3.0"
|
||||
gopd "^1.2.0"
|
||||
|
||||
element-plus@^2.2.32:
|
||||
version "2.2.32"
|
||||
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.2.32.tgz#e7e6757a66ed158363a86b5c9fc10dfbc0096783"
|
||||
|
@ -490,6 +507,33 @@ emojis-list@^3.0.0:
|
|||
resolved "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
|
||||
integrity sha1-VXBmIEatKeLpFucariYKvf9Pang=
|
||||
|
||||
es-define-property@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
|
||||
integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
|
||||
|
||||
es-errors@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
||||
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
|
||||
|
||||
es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
|
||||
integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
|
||||
dependencies:
|
||||
es-errors "^1.3.0"
|
||||
|
||||
es-set-tostringtag@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
|
||||
integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
|
||||
dependencies:
|
||||
es-errors "^1.3.0"
|
||||
get-intrinsic "^1.2.6"
|
||||
has-tostringtag "^1.0.2"
|
||||
hasown "^2.0.2"
|
||||
|
||||
esbuild@^0.18.10:
|
||||
version "0.18.20"
|
||||
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
|
||||
|
@ -551,12 +595,14 @@ follow-redirects@^1.15.6:
|
|||
integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
|
||||
|
||||
form-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
|
||||
integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.8"
|
||||
es-set-tostringtag "^2.1.0"
|
||||
hasown "^2.0.2"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
fsevents@~2.3.1, fsevents@~2.3.2:
|
||||
|
@ -564,6 +610,35 @@ fsevents@~2.3.1, fsevents@~2.3.2:
|
|||
resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz?cache=0&sync_timestamp=1612537044236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||
integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=
|
||||
|
||||
function-bind@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
||||
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
|
||||
|
||||
get-intrinsic@^1.2.6:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
|
||||
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
|
||||
dependencies:
|
||||
call-bind-apply-helpers "^1.0.2"
|
||||
es-define-property "^1.0.1"
|
||||
es-errors "^1.3.0"
|
||||
es-object-atoms "^1.1.1"
|
||||
function-bind "^1.1.2"
|
||||
get-proto "^1.0.1"
|
||||
gopd "^1.2.0"
|
||||
has-symbols "^1.1.0"
|
||||
hasown "^2.0.2"
|
||||
math-intrinsics "^1.1.0"
|
||||
|
||||
get-proto@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
|
||||
integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
|
||||
dependencies:
|
||||
dunder-proto "^1.0.1"
|
||||
es-object-atoms "^1.0.0"
|
||||
|
||||
glob-parent@~5.1.0:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
|
@ -571,6 +646,30 @@ glob-parent@~5.1.0:
|
|||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
gopd@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
||||
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
|
||||
|
||||
has-symbols@^1.0.3, has-symbols@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
||||
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
|
||||
|
||||
has-tostringtag@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
|
||||
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
|
||||
dependencies:
|
||||
has-symbols "^1.0.3"
|
||||
|
||||
hasown@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
||||
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
|
||||
dependencies:
|
||||
function-bind "^1.1.2"
|
||||
|
||||
he@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||
|
@ -660,6 +759,11 @@ magic-string@^0.25.7:
|
|||
dependencies:
|
||||
sourcemap-codec "^1.4.4"
|
||||
|
||||
math-intrinsics@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
|
||||
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
|
||||
|
||||
memoize-one@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
||||
|
|
|
@ -23,6 +23,10 @@ public class AppMeterController : EntityController<AppMeter>
|
|||
var df = ListFields.GetField("ClientId") as ListField;
|
||||
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)
|
||||
|
@ -56,6 +60,7 @@ public class AppMeterController : EntityController<AppMeter>
|
|||
|
||||
var appId = p["appId"].ToInt(-1);
|
||||
var clientId = p["clientId"];
|
||||
var source = p["source"];
|
||||
|
||||
// 应用在线多IP时,只取第一个
|
||||
if (!clientId.IsNullOrEmpty())
|
||||
|
@ -90,7 +95,7 @@ public class AppMeterController : EntityController<AppMeter>
|
|||
|
||||
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,则可能列表数据里面只有一个,选择它,便于展示图表
|
||||
if (list.Count > 0 && clientId.IsNullOrEmpty())
|
||||
|
|
Loading…
Reference in New Issue