();
14 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/AppDayStat/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 |
10 | var dic = AppTracer.FindAllWithCache().ToDictionary(e => e.ID, e => e + "");
11 |
12 | // 优先使用monitorId
13 | var appId = page["appId"].ToInt(-1);
14 | var monitorId = page["monitorId"].ToInt(-1);
15 | // if (appId <= 0) appId = monitorId;
16 | // if (monitorId > 0) page["appId"] = (appId = monitorId) + "";
17 |
18 | // 星尘监控,子系统内部跳转到当前页,只有appId;外部跳转到当前页,有appId和monitorId
19 | var app = AppTracer.FindByID(appId);
20 | if (appId > 0 && monitorId <= 0)
21 | {
22 | monitorId = appId;
23 | if (app != null) appId = app.AppId;
24 | }
25 | else if (appId > 0 && monitorId > 0)
26 | {
27 | app = AppTracer.FindByID(monitorId);
28 | }
29 | }
30 | @if (appId > 0)
31 | {
32 |
35 |
36 | @Html.ActionLink("每分钟", null, "appMinuteStat", new { appId = monitorId })
37 | @Html.ActionLink("每天", null, "appDayStat", new { appId, monitorId })
38 |
39 | }
40 |
41 |
42 | @Html.ForDropDownList("monitorId", dic, page["monitorId"], "全部", true)
43 |
44 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/AppDayStat/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @{
3 | var user = ViewBag.User as IUser ?? User.Identity as IUser;
4 | var fact = ViewBag.Factory as IEntityFactory;
5 | var set = ViewBag.PageSetting as PageSetting;
6 | }
7 | @if (set.EnableSelect)
8 | {
9 |
12 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/AppMinuteStat/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 |
10 | var dic = AppTracer.FindAllWithCache().ToDictionary(e => e.ID, e => e + "");
11 | var appId = page["appId"].ToInt(-1);
12 | }
13 | @if (appId > 0)
14 | {
15 |
16 | @Html.ActionLink("每分钟", null, "appMinuteStat", new { appId })
17 | @Html.ActionLink("每天", null, "appDayStat", new { appId })
18 |
19 | }
20 |
21 |
22 | @Html.ForDropDownList("appId", dic, page["appId"], "全部", true)
23 |
24 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/AppTracer/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 | }
10 |
11 |
12 | @Html.ForDropDownList("category", AppTracer.GetCategoryList(), page["category"], "全部", true)
13 |
14 | @await Html.PartialAsync("_Enable", "")
15 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/AppTracer/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @{
3 | var user = ViewBag.User as IUser ?? User.Identity as IUser;
4 | var fact = ViewBag.Factory as IEntityFactory;
5 | var set = ViewBag.PageSetting as PageSetting;
6 | }
7 | @if (set.EnableSelect)
8 | {
9 |
12 |
15 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/Trace/Index.cshtml:
--------------------------------------------------------------------------------
1 | @{
2 | var theme = NewLife.Cube.CubeSetting.Current.Theme;
3 | if (String.IsNullOrEmpty(theme)) theme = "ACE";
4 |
5 | Layout = "~/Views/" + theme + "/_Layout.cshtml";
6 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/TraceData/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 |
10 | var dic = AppTracer.FindAllWithCache().ToDictionary(e => e.ID, e => e + "");
11 | var appId = page["appId"].ToInt(-1);
12 | var itemId = page["itemId"].ToInt(-1);
13 | }
14 | @if (itemId > 0)
15 | {
16 | var ti = TraceItem.FindById(itemId);
17 |
20 | }
21 | @if (appId > 0)
22 | {
23 | var app = AppTracer.FindByID(appId);
24 |
27 | }
28 | @*
29 |
30 | @Html.ForDropDownList("appId", dic, page["appId"], "全部", true)
31 |
*@
32 |
33 |
34 | @Html.CheckBox("searchTag", page["searchTag"].ToBoolean())
35 |
36 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/TraceDayStat/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 |
10 | var dic = AppTracer.FindAllWithCache().ToDictionary(e => e.ID, e => e + "");
11 | var appId = page["monitorId"].ToInt(-1);
12 | if (appId <= 0) appId = page["appId"].ToInt(-1);
13 | var itemId = page["itemId"].ToInt(-1);
14 | }
15 | @if (itemId > 0)
16 | {
17 | var ti = TraceItem.FindById(itemId);
18 |
21 | }
22 | @if (appId > 0)
23 | {
24 | var app = AppTracer.FindByID(appId);
25 |
28 | }
29 | @if (appId > 0 && itemId > 0)
30 | {
31 |
32 | @Html.ActionLink("每5分钟", null, "traceMinuteStat", new { appId, itemId })
33 | @Html.ActionLink("每小时", null, "traceHourStat", new { appId, itemId })
34 | @Html.ActionLink("每天", null, "traceDayStat", new { appId, itemId })
35 |
36 | }
37 |
38 |
39 | @Html.ForDropDownList("appId", dic, page["appId"], "全部", true)
40 |
41 | @if (page["date"].IsNullOrEmpty())
42 | {
43 | @await Html.PartialAsync("_DateRange")
44 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/TraceHourStat/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 |
10 | var dic = AppTracer.FindAllWithCache().ToDictionary(e => e.ID, e => e + "");
11 | var appId = page["appId"].ToInt(-1);
12 | var itemId = page["itemId"].ToInt(-1);
13 | }
14 | @if (itemId > 0)
15 | {
16 | var ti = TraceItem.FindById(itemId);
17 |
20 | }
21 | @if (appId > 0)
22 | {
23 | var app = AppTracer.FindByID(appId);
24 |
27 | }
28 | @if (appId > 0 && itemId > 0)
29 | {
30 |
31 | @Html.ActionLink("每5分钟", null, "traceMinuteStat", new { appId, itemId })
32 | @Html.ActionLink("每小时", null, "traceHourStat", new { appId, itemId })
33 | @Html.ActionLink("每天", null, "traceDayStat", new { appId, itemId })
34 |
35 | }
36 |
37 |
38 | @Html.ForDropDownList("appId", dic, page["appId"], "全部", true)
39 |
40 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/TraceItem/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 | var dic = AppTracer.FindAllWithCache().ToDictionary(e => e.ID, e => e + "");
10 | }
11 |
12 |
13 | @Html.ForDropDownList("appId", dic, page["appId"], "全部", true)
14 |
15 |
16 |
17 | @Html.ForDropDownList("kind", TraceItem.GetKinds(), page["kind"], "全部", true)
18 |
19 | @await Html.PartialAsync("_Enable", "")
20 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/TraceItem/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @{
3 | var user = ViewBag.User as IUser ?? User.Identity as IUser;
4 | var fact = ViewBag.Factory as IEntityFactory;
5 | var set = ViewBag.PageSetting as PageSetting;
6 | }
7 | @if (set.EnableSelect)
8 | {
9 |
12 |
15 |
18 |
21 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/TraceMinuteStat/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Monitors;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 |
10 | var dic = AppTracer.FindAllWithCache().ToDictionary(e => e.ID, e => e + "");
11 | var appId = page["appId"].ToInt(-1);
12 | var itemId = page["itemId"].ToInt(-1);
13 | }
14 | @if (itemId > 0)
15 | {
16 | var ti = TraceItem.FindById(itemId);
17 |
20 | }
21 | @if (appId > 0)
22 | {
23 | var app = AppTracer.FindByID(appId);
24 |
27 | }
28 | @if (appId > 0 && itemId > 0)
29 | {
30 |
31 | @Html.ActionLink("每5分钟", null, "traceMinuteStat", new { appId, itemId })
32 | @Html.ActionLink("每小时", null, "traceHourStat", new { appId, itemId })
33 | @Html.ActionLink("每天", null, "traceDayStat", new { appId, itemId })
34 |
35 | }
36 |
37 |
38 | @Html.ForDropDownList("appId", dic, page["appId"], "全部", true)
39 |
40 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Monitors/Views/_ViewImports.cshtml:
--------------------------------------------------------------------------------
1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
2 | @using NewLife
3 | @using NewLife.Cube
4 | @using NewLife.Reflection
5 | @using NewLife.Web
6 | @using XCode
7 | @using XCode.Membership
8 |
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Controllers/NodeRuleController.cs:
--------------------------------------------------------------------------------
1 | using NewLife;
2 | using NewLife.Cube;
3 | using NewLife.Web;
4 | using Stardust.Data.Nodes;
5 |
6 | namespace Stardust.Web.Areas.Nodes.Controllers;
7 |
8 | [Menu(10)]
9 | [NodesArea]
10 | public class NodeRuleController : EntityController
11 | {
12 | static NodeRuleController()
13 | {
14 | LogOnChange = true;
15 |
16 | ListFields.RemoveField("Remark");
17 |
18 | {
19 | var df = ListFields.AddListField("Log", "CreateUserID");
20 | df.DisplayName = "审计日志";
21 | df.Header = "审计日志";
22 | df.Url = "/Admin/Log?category=节点规则&linkId={Id}";
23 | df.Target = "_frame";
24 | }
25 | }
26 |
27 | protected override IEnumerable Search(Pager p)
28 | {
29 | //var appId = p["appId"].ToInt(-1);
30 |
31 | var start = p["dtStart"].ToDateTime();
32 | var end = p["dtEnd"].ToDateTime();
33 |
34 | return NodeRule.Search(start, end, p["Q"], p);
35 | }
36 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/NodesArea.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using NewLife;
3 | using NewLife.Cube;
4 |
5 | namespace Stardust.Web.Areas.Nodes;
6 |
7 | [DisplayName("节点管理")]
8 | [Menu(888, true, LastUpdate = "20240407")]
9 | public class NodesArea : AreaBase
10 | {
11 | public NodesArea() : base(nameof(NodesArea).TrimEnd("Area")) { }
12 |
13 | static NodesArea() => RegisterArea();
14 | }
15 |
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/Node/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Nodes;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 | }
10 |
11 |
12 | @Html.ForDropDownList("category", Node.FindAllCategory(), page["category"], "全部", true)
13 |
14 |
15 |
16 | @Html.ForDropDownList("product", Node.FindAllProduct(), page["product"], "全部", true)
17 |
18 |
19 |
20 | @Html.ForDropDownList("version", Node.FindAllVersion(), page["version"], "全部", true)
21 |
22 |
23 |
24 | @Html.ForDropDownList("osKind", Node.FindAllOSKind(), page["osKind"], "全部", true)
25 |
26 | @*@await Html.PartialAsync("_Area2", "")*@
27 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/Node/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @using System.Collections.Generic;
3 | @{
4 | var set = ViewBag.PageSetting as PageSetting;
5 | }
6 | @if (set.EnableSelect)
7 | {
8 |
11 |
14 |
15 |
18 |
21 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeCommand/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using Stardust.Data.Nodes
2 | @using NewLife;
3 | @using NewLife.Web;
4 | @using XCode;
5 | @{
6 | var fact = ViewBag.Factory as IEntityFactory;
7 | var page = ViewBag.Page as Pager;
8 | }
9 | @await Html.PartialAsync("_SelectNode", new Stardust.Web.Models.SelectNodeModel { Id = "nodeId" })
10 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeData/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using Stardust.Data.Nodes
2 | @using NewLife;
3 | @using NewLife.Web;
4 | @using XCode;
5 | @{
6 | var fact = ViewBag.Factory as IEntityFactory;
7 | var page = ViewBag.Page as Pager;
8 | }
9 | @await Html.PartialAsync("_SelectNode", new Stardust.Web.Models.SelectNodeModel { Id= "nodeId" })
10 | @await Html.PartialAsync("_DateRange", "yyyy-MM-dd")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeFramework/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Nodes;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 | }
10 |
11 |
12 | @Html.ForDropDownList("category", Node.FindAllCategory(), page["category"], "全部", true)
13 |
14 |
15 |
16 | @Html.ForDropDownList("product", Node.FindAllProduct(), page["product"], "全部", true)
17 |
18 |
19 |
20 | @Html.ForDropDownList("version", Node.FindAllVersion(), page["version"], "全部", true)
21 |
22 |
23 |
24 | @Html.ForDropDownList("osKind", Node.FindAllOSKind(), page["osKind"], "全部", true)
25 |
26 | @*@await Html.PartialAsync("_Area2", "")*@
27 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeFramework/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @using System.Collections.Generic;
3 | @{
4 | var set = ViewBag.PageSetting as PageSetting;
5 | var page = ViewBag.Page as Pager;
6 | }
7 | @if (set.EnableSelect)
8 | {
9 |
10 |
11 | @Html.TextBox("ver", page["ver"])
12 |
13 | @Html.TextBox("baseUrl", page["baseUrl"])
14 |
15 |
18 |
21 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeHistory/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Nodes;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 |
10 | var dic = new Dictionary();
11 | dic.Add(1, "成功");
12 | dic.Add(0, "失败");
13 | }
14 | @*
15 |
16 | @Html.ForDropDownList("action", NodeHistory.FindAllAction(), page["action"], "全部", true)
17 |
*@
18 |
19 |
20 | @Html.ForDropDownList("success", dic, page["success"], "全部", true)
21 |
22 | @await Html.PartialAsync("_SelectNode", new Stardust.Web.Models.SelectNodeModel { Id = "nodeId" })
23 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeOnline/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using Stardust.Data.Nodes;
2 | @using NewLife;
3 | @using NewLife.Web;
4 | @using XCode;
5 | @{
6 | var fact = ViewBag.Factory as IEntityFactory;
7 | var page = ViewBag.Page as Pager;
8 | }
9 |
10 |
11 | @Html.ForDropDownList("category", Node.FindAllCategory(), page["category"], "全部", true)
12 |
13 | @await Html.PartialAsync("_Area2", "")
14 |
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeOnline/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @using System.Collections.Generic;
3 | @{
4 | var set = ViewBag.PageSetting as PageSetting;
5 | var page = ViewBag.Page as Pager;
6 | }
7 | @if (set.EnableSelect)
8 | {
9 |
12 |
15 |
18 |
21 |
22 |
23 | @Html.TextBox("command", page["command"])
24 |
25 | @Html.TextBox("argument", page["argument"])
26 |
27 |
30 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeStat/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using Stardust.Data.Nodes;
2 | @using NewLife;
3 | @using NewLife.Web;
4 | @using XCode;
5 | @{
6 | var fact = ViewBag.Factory as IEntityFactory;
7 | var page = ViewBag.Page as Pager;
8 | }
9 |
10 |
11 | @Html.ForDropDownList("category", NodeStat.FindAllCategory(), page["category"], "全部", true)
12 |
13 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/NodeVersion/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Nodes;
6 |
7 | @await Html.PartialAsync("_Enable")
8 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Nodes/Views/_ViewImports.cshtml:
--------------------------------------------------------------------------------
1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
2 | @using NewLife
3 | @using NewLife.Cube
4 | @using NewLife.Reflection
5 | @using NewLife.Web
6 | @using XCode
7 | @using XCode.Membership
8 |
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Platform/Controllers/StarServerController.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using NewLife.Cube;
3 | using Stardust.Server;
4 |
5 | namespace Stardust.Web.Areas.Platform.Controllers;
6 |
7 | /// 平台设置控制器
8 | [Menu(10, true)]
9 | [DisplayName("平台设置")]
10 | [PlatformArea]
11 | public class StarServerController : ConfigController
12 | {
13 | }
14 |
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Platform/PlatformArea.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using NewLife;
3 | using NewLife.Cube;
4 |
5 | namespace Stardust.Web.Areas.Platform;
6 |
7 | [DisplayName("平台管理")]
8 | [Menu(999, true, LastUpdate = "20240407")]
9 | public class PlatformArea : AreaBase
10 | {
11 | public PlatformArea() : base(nameof(PlatformArea).TrimEnd("Area")) { }
12 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Redis/Controllers/RedisMessageQueueController.cs:
--------------------------------------------------------------------------------
1 | using NewLife;
2 | using NewLife.Cube;
3 | using NewLife.Cube.Extensions;
4 | using NewLife.Web;
5 | using Stardust.Data.Nodes;
6 | using XCode.Membership;
7 |
8 | namespace Stardust.Web.Areas.Redis.Controllers;
9 |
10 | [Menu(30, false)]
11 | [RedisArea]
12 | public class RedisMessageQueueController : EntityController
13 | {
14 | static RedisMessageQueueController()
15 | {
16 | LogOnChange = true;
17 |
18 | ListFields.RemoveCreateField();
19 | ListFields.RemoveUpdateField();
20 | ListFields.AddField("UpdateTime");
21 | ListFields.RemoveField("WebHook");
22 |
23 | //{
24 | // var df = ListFields.GetField("TraceId") as ListField;
25 | // df.DisplayName = "跟踪";
26 | // df.Url = StarHelper.BuildUrl("{TraceId}");
27 | // df.DataVisible = e => e is RedisMessageQueue entity && !entity.TraceId.IsNullOrEmpty();
28 | //}
29 | ListFields.TraceUrl();
30 | {
31 | var df = ListFields.AddListField("Log", "UpdateTime");
32 | df.DisplayName = "审计日志";
33 | df.Header = "审计日志";
34 | df.Url = "/Admin/Log?category=Redis消息队列&linkId={Id}";
35 | df.Target = "_frame";
36 | }
37 | }
38 |
39 | protected override IEnumerable Search(Pager p)
40 | {
41 | var redisId = p["redisId"].ToInt(-1);
42 |
43 | var category = p["category"];
44 | var start = p["dtStart"].ToDateTime();
45 | var end = p["dtEnd"].ToDateTime();
46 |
47 | return RedisMessageQueue.Search(redisId, category, start, end, p["Q"], p);
48 | }
49 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Redis/RedisArea.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using NewLife;
3 | using NewLife.Cube;
4 |
5 | namespace Stardust.Web.Areas.Redis;
6 |
7 | [DisplayName("Redis管理")]
8 | [Menu(887, true, LastUpdate = "20240407")]
9 | public class RedisArea : AreaBase
10 | {
11 | public RedisArea() : base(nameof(RedisArea).TrimEnd("Area")) { }
12 |
13 | static RedisArea() => RegisterArea();
14 | }
15 |
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Redis/Views/RedisData/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using Stardust.Data.Nodes
2 | @using NewLife;
3 | @using NewLife.Web;
4 | @using XCode;
5 | @{
6 | var fact = ViewBag.Factory as IEntityFactory;
7 | var page = ViewBag.Page as Pager;
8 | }
9 | @await Html.PartialAsync("_SelectRedis", "redisId")
10 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Redis/Views/RedisMessageQueue/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Nodes;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 | }
10 | @await Html.PartialAsync("_SelectRedis", "redisId")
11 |
12 |
13 | @Html.ForDropDownList("category", RedisMessageQueue.GetCategoryList(), page["category"], "全部", true)
14 |
15 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Redis/Views/RedisNode/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data.Nodes;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 | }
10 |
11 |
12 | @Html.ForDropDownList("category", RedisNode.GetCategoryList(), page["category"], "全部", true)
13 |
14 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Redis/Views/_ViewImports.cshtml:
--------------------------------------------------------------------------------
1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
2 | @using NewLife
3 | @using NewLife.Cube
4 | @using NewLife.Reflection
5 | @using NewLife.Web
6 | @using XCode
7 | @using XCode.Membership
8 |
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Controllers/AppClientLogController.cs:
--------------------------------------------------------------------------------
1 | using NewLife;
2 | using NewLife.Cube;
3 | using NewLife.Web;
4 | using Stardust.Data;
5 | using XCode.Membership;
6 |
7 | namespace Stardust.Web.Areas.Registry.Controllers;
8 |
9 | /// 应用日志
10 | [Menu(10, true, Icon = "fa-table")]
11 | [RegistryArea]
12 | public class AppClientLogController : EntityController
13 | {
14 | static AppClientLogController()
15 | {
16 | //LogOnChange = true;
17 |
18 | //ListFields.RemoveField("Id", "Creator");
19 | ListFields.RemoveCreateField();
20 |
21 | //{
22 | // var df = ListFields.GetField("Code") as ListField;
23 | // df.Url = "?code={Code}";
24 | //}
25 | //{
26 | // var df = ListFields.AddListField("devices", null, "Onlines");
27 | // df.DisplayName = "查看设备";
28 | // df.Url = "Device?groupId={Id}";
29 | // df.DataVisible = e => (e as AppClientLog).Devices > 0;
30 | //}
31 | //{
32 | // var df = ListFields.GetField("Kind") as ListField;
33 | // df.GetValue = e => ((Int32)(e as AppClientLog).Kind).ToString("X4");
34 | //}
35 | //ListFields.TraceUrl("TraceId");
36 | }
37 |
38 | /// 高级搜索。列表页查询、导出Excel、导出Json、分享页等使用
39 | /// 分页器。包含分页排序参数,以及Http请求参数
40 | ///
41 | protected override IEnumerable Search(Pager p)
42 | {
43 | //var deviceId = p["deviceId"].ToInt(-1);
44 |
45 | var start = p["dtStart"].ToDateTime();
46 | var end = p["dtEnd"].ToDateTime();
47 |
48 | return AppClientLog.Search(start, end, p["Q"], p);
49 | }
50 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Controllers/AppLogController.cs:
--------------------------------------------------------------------------------
1 | using NewLife;
2 | using NewLife.Cube;
3 | using NewLife.Web;
4 | using Stardust.Data;
5 | using XCode.Membership;
6 |
7 | namespace Stardust.Web.Areas.Registry.Controllers;
8 |
9 | [RegistryArea]
10 | [Menu(0, false)]
11 | public class AppLogController : ReadOnlyEntityController
12 | {
13 | protected override AppClientLog Find(Object key) => AppClientLog.FindById(key.ToLong());
14 |
15 | protected override IEnumerable Search(Pager p)
16 | {
17 | PageSetting.EnableAdd = false;
18 | PageSetting.EnableNavbar = false;
19 |
20 | var appId = p["appId"].ToInt(-1);
21 | var clientId = p["clientId"];
22 | var threadId = p["threadId"].ToInt(-1);
23 |
24 | var start = p["dtStart"].ToDateTime();
25 | var end = p["dtEnd"].ToDateTime();
26 |
27 | if (start.Year < 2000)
28 | {
29 | start = DateTime.Today;
30 | p["dtStart"] = start.ToString("yyyy-MM-dd");
31 | }
32 |
33 | return AppClientLog.Search(appId, clientId, threadId, start, end, p["Q"], p);
34 | }
35 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Controllers/ServiceController.cs:
--------------------------------------------------------------------------------
1 | using NewLife;
2 | using NewLife.Cube;
3 | using NewLife.Cube.ViewModels;
4 | using NewLife.Web;
5 | using Stardust.Data;
6 | using XCode.Membership;
7 |
8 | namespace Stardust.Web.Areas.Registry.Controllers;
9 |
10 | /// 服务信息。服务提供者发布的服务
11 | [Menu(40, true, Icon = "fa-table")]
12 | [RegistryArea]
13 | public class ServiceController : EntityController
14 | {
15 | static ServiceController()
16 | {
17 | LogOnChange = true;
18 | ListFields.RemoveCreateField();
19 |
20 | ListFields.RemoveField("Secret", "HealthAddress");
21 | ListFields.RemoveCreateField()
22 | .RemoveUpdateField()
23 | .RemoveRemarkField();
24 |
25 | {
26 | var df = ListFields.GetField("Providers") as ListField;
27 | df.DisplayName = "{Providers}";
28 | df.Url = "/Registry/AppService?serviceId={Id}";
29 | }
30 | {
31 | var df = ListFields.GetField("Consumers") as ListField;
32 | df.DisplayName = "{Consumers}";
33 | df.Url = "/Registry/AppConsume?serviceId={Id}";
34 | }
35 | }
36 |
37 | /// 高级搜索。列表页查询、导出Excel、导出Json、分享页等使用
38 | /// 分页器。包含分页排序参数,以及Http请求参数
39 | ///
40 | protected override IEnumerable Search(Pager p)
41 | {
42 | //var deviceId = p["deviceId"].ToInt(-1);
43 | var name = p["name"];
44 |
45 | var start = p["dtStart"].ToDateTime();
46 | var end = p["dtEnd"].ToDateTime();
47 |
48 | return Service.Search(name, start, end, p["Q"], p);
49 | }
50 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/RegistryArea.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using NewLife;
3 | using NewLife.Cube;
4 |
5 | namespace Stardust.Web.Areas.Registry;
6 |
7 | [DisplayName("应用中心")]
8 | [Menu(777, true, LastUpdate = "20240727")]
9 | public class RegistryArea : AreaBase
10 | {
11 | public RegistryArea() : base(nameof(RegistryArea).TrimEnd("Area")) { }
12 |
13 | static RegistryArea() => RegisterArea();
14 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/App/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using Stardust.Data
5 | @using XCode;
6 | @using Stardust.Data.Nodes;
7 | @{
8 | var fact = ViewBag.Factory as IEntityFactory;
9 | var page = ViewBag.Page as Pager;
10 | }
11 |
12 |
13 | @Html.ForDropDownList("category", App.FindAllCategory(), page["category"], "全部", true)
14 |
15 | @*@await Html.PartialAsync("_Area2", "")*@
16 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/App/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @using System.Collections.Generic;
3 | @{
4 | var set = ViewBag.PageSetting as PageSetting;
5 | }
6 | @if (set.EnableSelect)
7 | {
8 |
11 |
14 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/AppHistory/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using Stardust.Data
5 | @using XCode;
6 | @using Stardust.Data.Nodes;
7 | @{
8 | var fact = ViewBag.Factory as IEntityFactory;
9 | var page = ViewBag.Page as Pager;
10 | }
11 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/AppLog/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using XCode;
5 | @using Stardust.Data;
6 | @{
7 | var fact = ViewBag.Factory as IEntityFactory;
8 | var page = ViewBag.Page as Pager;
9 | }
10 |
11 |
12 | @Html.ForDropDownList("appId", App.FindAllWithCache(), page["appId"], "全部", true)
13 |
14 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/AppMeter/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using Stardust.Data
2 | @using NewLife;
3 | @using NewLife.Web;
4 | @using XCode;
5 | @{
6 | var fact = ViewBag.Factory as IEntityFactory;
7 | var page = ViewBag.Page as Pager;
8 | }
9 | @*
10 |
11 | @Html.ForDropDownList("clientId", AppMeter.GetClientIds(page["appId"].ToInt()), page["clientId"], "全部", true)
12 |
*@
13 | @await Html.PartialAsync("_DateRange", "yyyy-MM-dd")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/AppOnline/_List_Search.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife;
2 | @using NewLife.Web;
3 | @using NewLife.Cube;
4 | @using Stardust.Data
5 | @using XCode;
6 | @using Stardust.Data.Nodes;
7 | @{
8 | var fact = ViewBag.Factory as IEntityFactory;
9 | var page = ViewBag.Page as Pager;
10 | }
11 |
12 |
13 | @Html.ForDropDownList("category", App.FindAllCategory(), page["category"], "全部", true)
14 |
15 | @*@await Html.PartialAsync("_Area2", "")*@
16 | @await Html.PartialAsync("_DateRange")
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/AppOnline/_List_Toolbar_Batch.cshtml:
--------------------------------------------------------------------------------
1 | @using NewLife.Common;
2 | @using System.Collections.Generic;
3 | @{
4 | var set = ViewBag.PageSetting as PageSetting;
5 | var page = ViewBag.Page as Pager;
6 | }
7 | @if (set.EnableSelect)
8 | {
9 |
12 |
13 |
14 | @Html.TextBox("command", page["command"])
15 |
16 | @Html.TextBox("argument", page["argument"])
17 |
18 |
21 | }
--------------------------------------------------------------------------------
/Stardust.Web/Areas/Registry/Views/_ViewImports.cshtml:
--------------------------------------------------------------------------------
1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
2 | @using NewLife
3 | @using NewLife.Cube
4 | @using NewLife.Reflection
5 | @using NewLife.Web
6 | @using XCode
7 | @using XCode.Membership
8 |
--------------------------------------------------------------------------------
/Stardust.Web/Models/GraphViewModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Web.Models
2 | {
3 | public class GraphViewModel
4 | {
5 | public String TraceId { get; set; }
6 |
7 | public String Title { get; set; }
8 |
9 | public String Layout { get; set; }
10 |
11 | public GraphCategory[] Categories { get; set; }
12 |
13 | public GraphLink[] Links { get; set; }
14 |
15 | public GraphNode[] Nodes { get; set; }
16 | }
17 |
18 | public class GraphCategory
19 | {
20 | public String Name { get; set; }
21 |
22 | public String Symbol { get; set; }
23 | }
24 |
25 | public class GraphLink
26 | {
27 | public String Source { get; set; }
28 |
29 | public String Target { get; set; }
30 | }
31 |
32 | public class GraphNode
33 | {
34 | public String Id { get; set; }
35 |
36 | public String Name { get; set; }
37 |
38 | public Int32 Category { get; set; }
39 |
40 | public Double SymbolSize { get; set; }
41 |
42 | //public Boolean Draggable { get; set; } = true;
43 |
44 | //public Boolean Fixed { get; set; } = false;
45 |
46 | //public Double X { get; set; }
47 |
48 | //public Double Y { get; set; }
49 |
50 | public Double Value { get; set; }
51 | }
52 | }
--------------------------------------------------------------------------------
/Stardust.Web/Models/SelectAppModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 |
6 | namespace Stardust.Web.Models
7 | {
8 | public class SelectAppModel
9 | {
10 | public String Id { get; set; }
11 |
12 | public String Category { get; set; }
13 |
14 | public Int32 AppId { get; set; }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Stardust.Web/Models/SelectNodeModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Web.Models;
2 |
3 | public class SelectNodeModel
4 | {
5 | public String Id { get; set; }
6 |
7 | public Int32 ProjectId { get; set; }
8 |
9 | public String Category { get; set; }
10 |
11 | public String Product { get; set; }
12 |
13 | public Int32 NodeId { get; set; }
14 | }
15 |
--------------------------------------------------------------------------------
/Stardust.Web/Models/TraceViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using NewLife.Web;
6 | using Stardust.Data.Monitors;
7 |
8 | namespace Stardust.Web.Models
9 | {
10 | public class TraceViewModel
11 | {
12 | public Pager Page { get; set; }
13 |
14 | public IList Data { get; set; }
15 | }
16 | }
--------------------------------------------------------------------------------
/Stardust.Web/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Microsoft.AspNetCore;
3 | using Microsoft.AspNetCore.Hosting;
4 | using NewLife.Log;
5 |
6 | namespace Stardust.Web
7 | {
8 | public class Program
9 | {
10 | public static void Main(String[] args)
11 | {
12 | XTrace.UseConsole();
13 |
14 | CreateWebHostBuilder(args).Build().Run();
15 | }
16 |
17 | public static IHostBuilder CreateWebHostBuilder(String[] args)
18 | {
19 | var builder = Host.CreateDefaultBuilder(args);
20 | builder.ConfigureWebHostDefaults(webBuilder =>
21 | {
22 | webBuilder.UseStartup();
23 | });
24 |
25 | return builder;
26 | }
27 | }
28 | }
--------------------------------------------------------------------------------
/Stardust.Web/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "Stardust.Web": {
4 | "commandName": "Project",
5 | "launchBrowser": true,
6 | "environmentVariables": {
7 | "ASPNETCORE_ENVIRONMENT": "Development"
8 | },
9 | "applicationUrl": "http://localhost:6680"
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/Stardust.Web/Views/Trace/Index.cshtml:
--------------------------------------------------------------------------------
1 | @model TraceViewModel
2 | @using Stardust.Data.Monitors
3 | @using NewLife;
4 | @using NewLife.Web;
5 | @using XCode;
6 | @using XCode.Configuration;
7 | @using XCode.Membership;
8 | @using NewLife.Cube;
9 | @using System.Web;
10 | @using Stardust.Web.Models;
11 | @{
12 | //Layout = NewLife.Cube.Setting.Current.Layout;
13 |
14 | var page = Model.Page;
15 | var list = Model.Data;
16 | var traceId = page["id"];
17 | }
18 |
19 | @if (!traceId.IsNullOrEmpty())
20 | {
21 | await Html.RenderPartialAsync("_Nav", traceId);
22 | }
23 | @* @if (!traceId.IsNullOrEmpty() && list.Select(e => e.AppId).Distinct().Count() > 1)
24 | {
25 | await Html.RenderPartialAsync("_AppChain", list);
26 | }*@
27 | @if (list.Count > 0)
28 | {
29 | await Html.RenderPartialAsync("_CallChain", list);
30 | }
31 |
--------------------------------------------------------------------------------
/Stardust.Web/Views/Trace/_Nav.cshtml:
--------------------------------------------------------------------------------
1 | @model String
2 | @{
3 | var traceId = Model;
4 | }
5 |
6 |
调用链
7 |
日志详情
8 |
关系图
9 |
关系环
10 |
--------------------------------------------------------------------------------
/Stardust.Web/Views/_ViewImports.cshtml:
--------------------------------------------------------------------------------
1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
2 | @using NewLife
3 | @using NewLife.Cube
4 | @using NewLife.Reflection
5 | @using NewLife.Web
6 | @using XCode
7 | @using XCode.Membership
8 | @using NewLife.Cube.Areas.Admin.Models
9 | @using NewLife.Cube.Extensions
10 | @using NewLife.Cube.ViewModels
--------------------------------------------------------------------------------
/Stardust.Web/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "AllowedHosts": "*",
10 | "Urls": "http://*:6680",
11 | "StarServer": "http://127.0.0.1:6600",
12 | "ConnectionStrings": {
13 | "Stardust": "Data Source=..\\Data\\Stardust.db;Provider=SQLite",
14 | "StardustData": "Data Source=..\\Data\\StardustData.db;Provider=SQLite",
15 | "Membership": "Data Source=..\\Data\\Membership.db;Provider=SQLite",
16 |
17 | // 各种数据库连接字符串模版
18 | //"Stardust": "Server=.;Port=3306;Database=star;Uid=root;Pwd=root;Provider=MySql",
19 | //"StardustData": "MapTo=Stardust",
20 | //"Membership": "Server=.;Port=3306;Database=star;Uid=root;Pwd=root;Provider=MySql",
21 |
22 | //"Stardust": "Data Source=.;Initial Catalog=star;user=sa;password=sa;Provider=SqlServer",
23 | //"StardustData": "MapTo=Stardust",
24 | //"Membership": "Data Source=.;Initial Catalog=star;user=sa;password=sa;Provider=SqlServer",
25 |
26 | //"Stardust": "Server=.;Database=star;Uid=root;Pwd=root;Provider=PostgreSql",
27 | //"StardustData": "MapTo=Stardust",
28 | //"Membership": "Server=.;Database=star;Uid=root;Pwd=root;Provider=PostgreSql",
29 |
30 | //"Stardust": "Data Source=Tcp://127.0.0.1/ORCL;User Id=scott;Password=tiger;Provider=Oracle"
31 | //"StardustData": "MapTo=Stardust",
32 | //"Membership": "Data Source=Tcp://127.0.0.1/ORCL;User Id=scott;Password=tiger;Provider=Oracle"
33 |
34 | // 魔方审计日志使用Membership的连接字符串
35 | "Log": "MapTo=Membership",
36 | "Cube": "MapTo=Membership"
37 | }
38 | }
--------------------------------------------------------------------------------
/Stardust.Web/web.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Stardust.Web/wwwroot/icons/app.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Stardust.Web/wwwroot/icons/db.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Stardust.Web/wwwroot/icons/modbus.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Stardust.Web/wwwroot/icons/mq.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Stardust/Deployment/CopyModes.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Deployment;
2 |
3 | /// 拷贝模式。发布时拷贝文件的行为模式
4 | ///
5 | /// 对于配置文件,常用Skip,因为配置文件可能在部署时被修改,如果覆盖,可能会导致配置丢失。
6 | /// 对于可执行文件,常用Overwrite,因为被发布的可执行文件一般被修改过。
7 | ///
8 | public enum CopyModes
9 | {
10 | /// 无
11 | None = 0,
12 |
13 | /// 跳过已存在
14 | SkipExists = 1,
15 |
16 | /// 覆盖已存在
17 | Overwrite = 2,
18 |
19 | /// 拷贝前清空
20 | ClearBeforeCopy = 3,
21 | }
22 |
--------------------------------------------------------------------------------
/Stardust/Managers/ProcessInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Managers;
2 |
3 | /// 服务运行信息
4 | public class ProcessInfo
5 | {
6 | /// 名称
7 | public String Name { get; set; } = null!;
8 |
9 | /// 进程Id
10 | public Int32 ProcessId { get; set; }
11 |
12 | /// 进程名
13 | public String? ProcessName { get; set; }
14 |
15 | /// 创建时间
16 | public DateTime CreateTime { get; set; }
17 |
18 | /// 更新时间
19 | public DateTime UpdateTime { get; set; }
20 | }
--------------------------------------------------------------------------------
/Stardust/Managers/VerInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Managers;
2 |
3 | /// 版本信息
4 | public class VerInfo
5 | {
6 | /// 名称
7 | public String Name { get; set; } = null!;
8 |
9 | /// 版本
10 | public String Version { get; set; } = null!;
11 |
12 | /// 补丁
13 | public String? Sp { get; set; }
14 |
15 | /// 已重载。
16 | ///
17 | public override String ToString() => String.IsNullOrEmpty(Sp) ? $"{Name} {Version}" : $"{Name} {Version} Sp{Sp}";
18 | }
--------------------------------------------------------------------------------
/Stardust/Models/AppModel.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Remoting.Models;
2 |
3 | namespace Stardust.Models;
4 |
5 | /// 应用模型
6 | public class AppModel : LoginRequest
7 | {
8 | /// 应用标识
9 | public String? AppId { get => Code; set => Code = value; }
10 |
11 | /// 应用名
12 | public String? AppName { get; set; }
13 |
14 | /// 节点编码
15 | public String? NodeCode { get; set; }
16 |
17 | /// 项目名。新应用默认所需要加入的项目
18 | public String? Project { get; set; }
19 | }
--------------------------------------------------------------------------------
/Stardust/Models/CommandEventArgs.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | ///
4 | /// 命令事件参数
5 | ///
6 | public class CommandEventArgs : EventArgs
7 | {
8 | ///
9 | /// 命令
10 | ///
11 | public CommandModel? Model { get; set; }
12 |
13 | ///
14 | /// 响应
15 | ///
16 | public CommandReplyModel? Reply { get; set; }
17 | }
--------------------------------------------------------------------------------
/Stardust/Models/CommandInModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 平台级发送命令参数模型
4 | public class CommandInModel
5 | {
6 | /// 编码。节点编码或应用编码
7 | public String? Code { get; set; }
8 |
9 | /// 命令
10 | public String Command { get; set; } = null!;
11 |
12 | /// 参数
13 | public String? Argument { get; set; }
14 |
15 | /// 有效期。多久之后指令过期,单位秒,未指定时表示不限制
16 | public Int32 Expire { get; set; }
17 |
18 | /// 超时时间。等待响应的时间,单位秒,未指定时表示不等待
19 | public Int32 Timeout { get; set; }
20 | }
--------------------------------------------------------------------------------
/Stardust/Models/CommandModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 命令模型
4 | public class CommandModel
5 | {
6 | /// 序号
7 | public Int32 Id { get; set; }
8 |
9 | /// 命令
10 | public String Command { get; set; } = null!;
11 |
12 | /// 参数
13 | public String? Argument { get; set; }
14 |
15 | /// 开始执行时间。用于提前下发指令后延期执行,暂时不支持取消
16 | public DateTime StartTime { get; set; }
17 |
18 | /// 过期时间。未指定时表示不限制
19 | public DateTime Expire { get; set; }
20 |
21 | /// 跟踪标识。传输traceParent,用于建立全局调用链,便于查找问题
22 | public String? TraceId { get; set; }
23 | }
--------------------------------------------------------------------------------
/Stardust/Models/CommandReplyModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | ///
4 | /// 命令响应模型
5 | ///
6 | public class CommandReplyModel
7 | {
8 | /// 服务编号
9 | public Int32 Id { get; set; }
10 |
11 | /// 状态
12 | public CommandStatus Status { get; set; }
13 |
14 | /// 返回数据
15 | public String? Data { get; set; }
16 | }
--------------------------------------------------------------------------------
/Stardust/Models/CommandStatus.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 命令状态
4 | public enum CommandStatus
5 | {
6 | /// 就绪
7 | 就绪 = 0,
8 |
9 | /// 处理中
10 | 处理中 = 1,
11 |
12 | /// 已完成
13 | 已完成 = 2,
14 |
15 | /// 取消
16 | 取消 = 3,
17 |
18 | /// 错误
19 | 错误 = 4,
20 | }
--------------------------------------------------------------------------------
/Stardust/Models/CompileCommand.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 编译命令参数
4 | public class CompileCommand
5 | {
6 | /// 代码库。下载代码的位置
7 | public String? Repository { get; set; }
8 |
9 | /// 分支
10 | public String? Branch { get; set; }
11 |
12 | /// 项目路径。需要编译的项目路径
13 | public String? ProjectPath { get; set; }
14 |
15 | /// 项目类型。默认dotnet
16 | public ProjectKinds ProjectKind { get; set; }
17 |
18 | /// 打包过滤器。需要打包哪些文件,支持通配符,多项分号隔开
19 | public String? PackageFilters { get; set; }
20 | }
21 |
--------------------------------------------------------------------------------
/Stardust/Models/ConfigInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 配置信息
4 | public class ConfigInfo
5 | {
6 | /// 版本
7 | public Int32 Version { get; set; }
8 |
9 | /// 作用域。dev/test/stag/pro
10 | public String? Scope { get; set; }
11 |
12 | /// 来源IP地址
13 | public String? SourceIP { get; set; }
14 |
15 | /// 下一个版本。如果不同于的当前版本,则说明有新版本等待发布
16 | public Int32 NextVersion { get; set; }
17 |
18 | /// 下次发布时间。用于定时发布
19 | public String? NextPublish { get; set; }
20 |
21 | /// 更新时间
22 | public DateTime UpdateTime { get; set; }
23 |
24 | /// 配置项集合
25 | public IDictionary? Configs { get; set; }
26 | }
--------------------------------------------------------------------------------
/Stardust/Models/ConsumeServiceInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 消费服务信息
4 | public class ConsumeServiceInfo
5 | {
6 | /// 服务名
7 | public String ServiceName { get; set; } = null!;
8 |
9 | /// 客户端。IP加进程
10 | public String? ClientId { get; set; }
11 |
12 | /// 最低版本
13 | public String? MinVersion { get; set; }
14 |
15 | /// 标签。带有指定特性,逗号分隔
16 | public String? Tag { get; set; }
17 | }
--------------------------------------------------------------------------------
/Stardust/Models/DeployInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 应用发布信息
4 | public class DeployInfo
5 | {
6 | /// 发布编号。部署节点的编号
7 | public Int32 Id { get; set; }
8 |
9 | /// 应用名称
10 | public String? Name { get; set; }
11 |
12 | /// 应用版本
13 | public String? Version { get; set; }
14 |
15 | /// 应用包地址
16 | public String? Url { get; set; }
17 |
18 | /// 哈希散列
19 | public String? Hash { get; set; }
20 |
21 | /// 覆盖文件。需要拷贝覆盖已存在的文件或子目录,支持*模糊匹配,多文件分号隔开。如果目标文件不存在,配置文件等自动拷贝
22 | public String? Overwrite { get; set; }
23 |
24 | /// 发布模式。1部分包,仅覆盖;2标准包,清空可执行文件再覆盖;3完整包,清空所有文件
25 | public DeployModes Mode { get; set; }
26 |
27 | /// 应用服务
28 | public ServiceInfo? Service { get; set; }
29 | }
--------------------------------------------------------------------------------
/Stardust/Models/DeployModes.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 |
3 | namespace Stardust.Models;
4 |
5 | /// 发布模式
6 | public enum DeployModes
7 | {
8 | ///// 默认
9 | //Default = 0,
10 |
11 | /// 部分包。覆盖已有文件,保留其它文件
12 | [Description("部分包")]
13 | Partial = 1,
14 |
15 | /// 标准包。清空所有可执行文件,保留配置和数据等其它文件
16 | [Description("标准包")]
17 | Standard = 2,
18 |
19 | /// 完整包。清空所有文件
20 | [Description("完整包")]
21 | Full = 3,
22 | }
--------------------------------------------------------------------------------
/Stardust/Models/EventModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 事件模型
4 | public class EventModel
5 | {
6 | /// 时间。Unix毫秒,UTC
7 | public Int64 Time { get; set; }
8 |
9 | /// 事件类型。info/alert/error
10 | public String? Type { get; set; }
11 |
12 | /// 名称。事件名称,例如LightOpen
13 | public String? Name { get; set; }
14 |
15 | /// 内容。事件详情
16 | public String? Remark { get; set; }
17 | }
--------------------------------------------------------------------------------
/Stardust/Models/FrameworkModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 框架模型
4 | public class FrameworkModel
5 | {
6 | /// 要安装的目标版本
7 | public String? Version { get; set; }
8 |
9 | /// 基准路径。将从该路径下载框架安装文件
10 | public String? BaseUrl { get; set; }
11 |
12 | /// 是否强制。如果true,则已安装版本存在也强制安装。默认false
13 | public Boolean Force { get; set; }
14 | }
--------------------------------------------------------------------------------
/Stardust/Models/LocalPingInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 本地心跳
4 | public class LocalPingInfo
5 | {
6 | /// 进程标识
7 | public Int32 ProcessId { get; set; }
8 |
9 | /// 进程名称
10 | public String? ProcessName { get; set; }
11 |
12 | /// 版本
13 | public String? Version { get; set; }
14 |
15 | /// 应用名
16 | public String? AppName { get; set; }
17 |
18 | /// 看门狗超时时间。默认0秒
19 | ///
20 | /// 设置看门狗超时时间,超过该时间未收到心跳,将会重启本应用进程。
21 | /// 0秒表示不启用看门狗。
22 | ///
23 | public Int32 WatchdogTimeout { get; set; }
24 | }
25 |
--------------------------------------------------------------------------------
/Stardust/Models/LoginInfo.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Remoting.Models;
2 |
3 | namespace Stardust.Models;
4 |
5 | /// 节点登录信息
6 | public class LoginInfo : ILoginRequest
7 | {
8 | #region 属性
9 | /// 节点编码
10 | public String? Code { get; set; }
11 |
12 | /// 节点密钥
13 | public String? Secret { get; set; }
14 |
15 | /// 产品编码
16 | public String? ProductCode { get; set; }
17 |
18 | /// 实例。应用可能多实例部署,ip@proccessid
19 | public String? ClientId { get; set; }
20 |
21 | /// 项目名。新节点默认所需要加入的项目
22 | public String? Project { get; set; }
23 |
24 | /// 节点信息
25 | public NodeInfo? Node { get; set; }
26 | #endregion
27 | }
28 |
29 | ///// 节点登录响应
30 | //public class LoginResponse : ILoginResponse
31 | //{
32 | // #region 属性
33 | // /// 节点编码
34 | // public String? Code { get; set; }
35 |
36 | // /// 节点密钥
37 | // public String? Secret { get; set; }
38 |
39 | // /// 名称
40 | // public String? Name { get; set; }
41 |
42 | // /// 令牌
43 | // public String? Token { get; set; }
44 |
45 | // /// 服务器时间。Unix毫秒(UTC)
46 | // public Int64 Time { get; set; }
47 | // #endregion
48 | //}
--------------------------------------------------------------------------------
/Stardust/Models/MigrationEventArgs.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 |
3 | namespace Stardust.Models;
4 |
5 | /// 迁移服务器事件参数
6 | public class MigrationEventArgs : CancelEventArgs
7 | {
8 | /// 新服务器
9 | public String? NewServer { get; set; }
10 | }
11 |
--------------------------------------------------------------------------------
/Stardust/Models/ProjectKinds.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 项目类型
4 | public enum ProjectKinds
5 | {
6 | /// dotnet项目,SDK编译
7 | DotNet = 1,
8 |
9 | /// dotnet项目,MSBuild编译
10 | MSBuild = 2,
11 |
12 | /// 自定义项目,执行自定义脚本编译
13 | Custom = 99,
14 | }
15 |
--------------------------------------------------------------------------------
/Stardust/Models/PublishServiceInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 生产服务信息
4 | public class PublishServiceInfo
5 | {
6 | /// 服务名
7 | public String ServiceName { get; set; } = null!;
8 |
9 | /// 客户端。IP加进程
10 | public String? ClientId { get; set; }
11 |
12 | /// 本地IP地址
13 | public String? IP { get; set; }
14 |
15 | /// 版本
16 | public String? Version { get; set; }
17 |
18 | /// 服务地址。本地服务地址,可能是固定地址,也可能是http://*:8080,https://*:8001之类的形式
19 | public String? Address { get; set; }
20 |
21 | /// 外部地址
22 | public String? ExternalAddress { get;set; }
23 |
24 | /// 健康检测地址
25 | public String? Health{ get; set; }
26 |
27 | /// 标签。带有指定特性,逗号分隔
28 | public String? Tag { get; set; }
29 |
30 | internal Func? AddressCallback;
31 | }
--------------------------------------------------------------------------------
/Stardust/Models/RuntimeIdentifier.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 运行时标识符。定义应用包可运行的操作系统与处理器架构
4 | public enum RuntimeIdentifier
5 | {
6 | /// 任意
7 | Any = 0,
8 |
9 | /// 任意Windows系统
10 | Win = 10,
11 | /// Windows系统(32位)
12 | WinX86 = 11,
13 | /// Windows系统(64位)
14 | WinX64 = 12,
15 | /// Windows系统(32位Arm)
16 | WinArm = 13,
17 | /// Windows系统(64位Arm)
18 | WinArm64 = 14,
19 |
20 | /// 任意Linux系统
21 | Linux = 20,
22 | ///// Linux系统(32位)
23 | //LinuxX86 = 21,
24 | /// Linux系统(64位)
25 | LinuxX64 = 22,
26 | /// Linux系统(32位Arm)
27 | LinuxArm = 23,
28 | /// Linux系统(64位Arm)
29 | LinuxArm64 = 24,
30 | /// Linux系统(64位MIPS)
31 | LinuxMips64 = 26,
32 | /// Linux系统(龙芯)
33 | LinuxLA64 = 27,
34 | /// Linux系统(RISC)
35 | LinuxRiscV64 = 28,
36 |
37 | /// 任意Linux系统(musl库)
38 | LinuxMusl = 30,
39 | /// Linux系统(musl库64位)
40 | LinuxMuslX64 = 32,
41 | /// Linux系统(musl库32位Arm)
42 | LinuxMuslArm = 33,
43 | /// Linux系统(musl库64位Arm)
44 | LinuxMuslArm64 = 34,
45 |
46 | /// 任意OSX系统
47 | Osx = 40,
48 | ///// OSX系统(32位)
49 | //OsxX86 = 41,
50 | /// OSX系统(64位)
51 | OsxX64 = 42,
52 | ///// OSX系统(32位Arm)
53 | //OsxArm = 43,
54 | /// OSX系统(64位Arm)
55 | OsxArm64 = 44,
56 | }
57 |
--------------------------------------------------------------------------------
/Stardust/Models/ServiceModel.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 服务模型
4 | public class ServiceModel
5 | {
6 | /// 服务名
7 | public String ServiceName { get; set; } = null!;
8 |
9 | /// 显示名
10 | public String? DisplayName { get; set; }
11 |
12 | /// 客户端。IP加进程
13 | public String? Client { get; set; }
14 |
15 | /// 版本
16 | public String? Version { get; set; }
17 |
18 | /// 服务地址。本地局域网地址
19 | public String? Address { get; set; }
20 |
21 | /// 外部地址。经过网关之前的外部地址
22 | public String? Address2 { get; set; }
23 |
24 | /// 作用域
25 | public String? Scope { get; set; }
26 |
27 | /// 标签
28 | public String? Tag { get; set; }
29 |
30 | /// 权重
31 | public Int32 Weight { get; set; }
32 |
33 | /// 创建时间
34 | public DateTime CreateTime { get; set; }
35 |
36 | /// 最后活跃时间
37 | public DateTime UpdateTime { get; set; }
38 | }
--------------------------------------------------------------------------------
/Stardust/Models/ServiceModes.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 服务工作模式
4 | public enum ServiceModes
5 | {
6 | /// 默认。单例运行exe或zip
7 | Default = 0,
8 |
9 | /// 解压缩。仅解压缩文件,由外部主机托管,如IIS
10 | Extract = 1,
11 |
12 | /// 解压并运行。
13 | ExtractAndRun = 2,
14 |
15 | /// 仅运行一次。运行后自动进入禁用状态
16 | RunOnce = 3,
17 |
18 | /// 多实例。直接运行exe或zip,支持多实例
19 | Multiple = 4,
20 | }
--------------------------------------------------------------------------------
/Stardust/Models/TokenModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.Serialization;
3 |
4 | namespace Stardust.Models
5 | {
6 | /// 访问令牌模型
7 | public class TokenModel
8 | {
9 | /// 访问令牌
10 | [DataMember(Name = "access_token")]
11 | public String AccessToken { get; set; }
12 |
13 | /// 令牌类型
14 | [DataMember(Name = "token_type")]
15 | public String TokenType { get; set; }
16 |
17 | /// 过期时间。秒
18 | [DataMember(Name = "expire_in")]
19 | public Int32 ExpireIn { get; set; }
20 |
21 | /// 刷新令牌
22 | [DataMember(Name = "refresh_token")]
23 | public String RefreshToken { get; set; }
24 | }
25 | }
--------------------------------------------------------------------------------
/Stardust/Models/UpgradeInfo.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Models;
2 |
3 | /// 更新响应
4 | public class UpgradeInfo
5 | {
6 | /// 版本号
7 | public String? Version { get; set; }
8 |
9 | /// 更新源,Url地址
10 | public String? Source { get; set; }
11 |
12 | /// 文件哈希
13 | public String? FileHash { get; set; }
14 |
15 | /// 更新前要执行的命令。解压缩后,在解压缩目录执行
16 | public String? Preinstall { get; set; }
17 |
18 | /// 更新后要执行的命令
19 | public String? Executor { get; set; }
20 |
21 | /// 是否强制更新,覆盖文件后即刻重启应用,不需要用户同意
22 | public Boolean Force { get; set; }
23 |
24 | /// 描述
25 | public String? Description { get; set; }
26 | }
--------------------------------------------------------------------------------
/Stardust/Monitors/MyBuilder.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using NewLife.Log;
5 |
6 | namespace Stardust.Monitors
7 | {
8 | /// 构建器
9 | public class MyBuilder : ISpanBuilder
10 | {
11 | #region 属性
12 | /// 操作名
13 | public String Name { get; set; }
14 |
15 | /// 开始时间。Unix毫秒
16 | public Int64 StartTime { get; set; }
17 |
18 | /// 结束时间。Unix毫秒
19 | public Int64 EndTime { get; set; }
20 |
21 | /// 采样总数
22 | public Int32 Total { get; set; }
23 |
24 | /// 错误次数
25 | public Int32 Errors { get; set; }
26 |
27 | /// 总耗时。所有请求耗时累加,单位ms
28 | public Int64 Cost { get; set; }
29 |
30 | /// 最大耗时。单位ms
31 | public Int32 MaxCost { get; set; }
32 |
33 | /// 最小耗时。单位ms
34 | public Int32 MinCost { get; set; }
35 |
36 | /// 正常采样
37 | public List Samples { get; set; }
38 |
39 | /// 异常采样
40 | public List ErrorSamples { get; set; }
41 | #endregion
42 |
43 | ITracer ISpanBuilder.Tracer => throw new NotImplementedException();
44 |
45 | IList ISpanBuilder.Samples => Samples?.Cast().ToList();
46 |
47 | IList ISpanBuilder.ErrorSamples => ErrorSamples?.Cast().ToList();
48 |
49 | void ISpanBuilder.Finish(ISpan span) => throw new NotImplementedException();
50 |
51 | ISpan ISpanBuilder.Start() => throw new NotImplementedException();
52 | }
53 | }
--------------------------------------------------------------------------------
/Stardust/Monitors/MySpan.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using NewLife.Log;
3 |
4 | namespace Stardust.Monitors
5 | {
6 | /// 片段
7 | public class MySpan : ISpan
8 | {
9 | #region 属性
10 | /// 唯一标识。随线程上下文、Http、Rpc传递,作为内部片段的父级
11 | public String Id { get; set; }
12 |
13 | /// 父级片段标识
14 | public String ParentId { get; set; }
15 |
16 | /// 跟踪标识。可用于关联多个片段,建立依赖关系,随线程上下文、Http、Rpc传递
17 | public String TraceId { get; set; }
18 |
19 | /// 开始时间。Unix毫秒
20 | public Int64 StartTime { get; set; }
21 |
22 | /// 结束时间。Unix毫秒
23 | public Int64 EndTime { get; set; }
24 |
25 | /// 数据标签。记录一些附加数据
26 | public String Tag { get; set; }
27 |
28 | /// 错误信息
29 | public String Error { get; set; }
30 | #endregion
31 |
32 | void IDisposable.Dispose() => throw new NotImplementedException();
33 |
34 | void ISpan.SetError(Exception ex, Object tag) => throw new NotImplementedException();
35 | }
36 | }
--------------------------------------------------------------------------------
/Stardust/Monitors/MyTraceModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace Stardust.Monitors
4 | {
5 | /// 跟踪模型
6 | public class MyTraceModel
7 | {
8 | /// 应用标识
9 | public String AppId { get; set; }
10 |
11 | /// 应用名
12 | public String AppName { get; set; }
13 |
14 | /// 实例。应用可能多实例部署,ip@proccessid
15 | public String ClientId { get; set; }
16 |
17 | /// 跟踪数据
18 | public MyBuilder[] Builders { get; set; }
19 | }
20 | }
--------------------------------------------------------------------------------
/Stardust/Monitors/StarTracerResolver.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Concurrent;
2 | using NewLife;
3 | using NewLife.Log;
4 |
5 | namespace Stardust.Monitors;
6 |
7 | /// 星尘追踪解析器
8 | public class StarTracerResolver : DefaultTracerResolver
9 | {
10 | /// 单个域名最大埋点数。默认16
11 | public Int32 MaxTracePerHost { get; set; } = 16;
12 |
13 | /// 请求标签长度。HttpClient请求和WebApi请求响应作为数据标签的最大长度,小于0时不使用,默认1024字符
14 | public Int32 RequestTagLength { get; set; } = 1024;
15 |
16 | private ConcurrentDictionary> _cache = new();
17 |
18 | /// 从Uri中解析出埋点名称
19 | ///
20 | ///
21 | ///
22 | public override String ResolveName(Uri uri, Object? userState)
23 | {
24 | String name;
25 | HashSet? keys = null;
26 | if (uri.IsAbsoluteUri)
27 | {
28 | // 域名下Http埋点过多时,埋点名称降级到域名,不再使用整个Url
29 | keys = _cache.GetOrAdd(uri.Host, k => []);
30 | if (keys.Count >= MaxTracePerHost) return $"{uri.Scheme}://{uri.Authority}";
31 |
32 | // 太长的Url分段,不适合作为埋点名称
33 | var segments = uri.Segments.Skip(1).TakeWhile(e => e.Length <= 16).ToArray();
34 | name = segments.Length > 0
35 | ? $"{uri.Scheme}://{uri.Authority}/{String.Concat(segments)}"
36 | : $"{uri.Scheme}://{uri.Authority}";
37 | }
38 | else
39 | {
40 | name = uri.ToString();
41 | var p = name.IndexOf('?');
42 | if (p > 0) name = name[..p];
43 | }
44 |
45 | name = ResolveName(name, userState);
46 | if (name.IsNullOrEmpty()) return name;
47 |
48 | keys?.Add(name);
49 |
50 | return name;
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/Stardust/Monitors/TraceModel.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Log;
2 | using Stardust.Models;
3 |
4 | namespace Stardust.Monitors;
5 |
6 | /// 追踪请求模型
7 | public class TraceModel
8 | {
9 | /// 应用标识
10 | public String? AppId { get; set; }
11 |
12 | /// 应用名
13 | public String? AppName { get; set; }
14 |
15 | /// 实例。应用可能多实例部署,ip@proccessid
16 | public String? ClientId { get; set; }
17 |
18 | /// 版本
19 | public String? Version { get; set; }
20 |
21 | /// 应用信息
22 | public AppInfo? Info { get; set; }
23 |
24 | /// 追踪数据
25 | public ISpanBuilder[]? Builders { get; set; }
26 | }
27 |
28 | /// 追踪响应模型
29 | public class TraceResponse
30 | {
31 | /// 采样周期。默认60s
32 | public Int32 Period { get; set; } = 60;
33 |
34 | /// 最大正常采样数。采样周期内,最多只记录指定数量的正常事件,用于绘制依赖关系
35 | public Int32 MaxSamples { get; set; } = 1;
36 |
37 | /// 最大异常采样数。采样周期内,最多只记录指定数量的异常事件,默认10
38 | public Int32 MaxErrors { get; set; } = 10;
39 |
40 | /// 超时时间。超过该时间时,当作异常来进行采样,默认5000毫秒
41 | public Int32 Timeout { get; set; }
42 |
43 | /// 最大标签长度。超过该长度时将截断,默认1024字符
44 | public Int32 MaxTagLength { get; set; } = 1024;
45 |
46 | /// 请求标签长度。HttpClient请求和WebApi请求响应作为数据标签的最大长度,小于0时不使用,默认1024字符
47 | public Int32 RequestTagLength { get; set; } = 1024;
48 |
49 | /// 性能收集。收集应用性能信息,数量较大的客户端可以不必收集应用性能信息
50 | public Boolean? EnableMeter { get; set; }
51 |
52 | /// 要排除的操作名
53 | public String[]? Excludes { get; set; }
54 | }
--------------------------------------------------------------------------------
/Stardust/Plugins/IAgentPlugin.cs:
--------------------------------------------------------------------------------
1 | using NewLife;
2 | using NewLife.Model;
3 |
4 | namespace Stardust.Plugins;
5 |
6 | /// 星尘代理插件
7 | public interface IAgentPlugin : IPlugin
8 | {
9 | /// 开始工作
10 | public void Start();
11 |
12 | /// 停止工作
13 | ///
14 | public void Stop(String reason);
15 | }
16 |
17 | /// 星尘代理插件基类
18 | [Plugin("StarAgent")]
19 | public abstract class AgentPlugin : DisposeBase, IAgentPlugin
20 | {
21 | /// 服务提供者
22 | public IServiceProvider? Provider { get; set; }
23 |
24 | /// 初始化插件
25 | ///
26 | ///
27 | ///
28 | ///
29 | public virtual Boolean Init(String? identity, IServiceProvider provider)
30 | {
31 | if (identity != "StarAgent") return false;
32 |
33 | Provider = provider;
34 |
35 | return true;
36 | }
37 |
38 | /// 开始工作
39 | public virtual void Start() { }
40 |
41 | /// 停止工作
42 | ///
43 | public virtual void Stop(String reason) { }
44 | }
--------------------------------------------------------------------------------
/Stardust/Properties/PublishProfiles/FolderProfile.pubxml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 | FileSystem
8 | Release
9 | Any CPU
10 | net45
11 | ..\Bin\
12 |
13 |
--------------------------------------------------------------------------------
/Stardust/Services/CacheService.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Caching;
2 |
3 | namespace Stardust.Services;
4 |
5 | /// 分布式缓存架构服务。提供基础缓存及队列服务
6 | [Obsolete]
7 | public class CacheService
8 | {
9 | #region 属性
10 | /// 全局缓存。各功能模块跨进程共享数据,分布式部署时可用Redis,需要考虑序列化成本。默认单机使用内存缓存
11 | public ICache Cache { get; set; }
12 |
13 | /// 应用内本地缓存。默认内存缓存,无需考虑对象序列化成本,缺点是不支持跨进程共享数据
14 | public ICache InnerCache { get; set; }
15 | #endregion
16 |
17 | #region 构造
18 | /// 使用默认缓存实例化
19 | public CacheService()
20 | {
21 | var cache = NewLife.Caching.Cache.Default ?? new MemoryCache();
22 | Cache = cache;
23 | InnerCache = cache;
24 | }
25 | #endregion
26 |
27 | #region 方法
28 | /// 获取队列。各功能模块跨进程共用的队列
29 | /// 消息类型
30 | /// 主题
31 | /// 消费组
32 | ///
33 | public virtual IProducerConsumer GetQueue(String topic, String group = null) => Cache?.GetQueue(topic);
34 |
35 | /// 获取内部队列。默认内存队列
36 | /// 消息类型
37 | /// 主题
38 | ///
39 | public virtual IProducerConsumer GetInnerQueue(String topic) => InnerCache?.GetQueue(topic);
40 |
41 | /// 申请分布式锁
42 | ///
43 | ///
44 | ///
45 | public virtual IDisposable AcquireLock(String lockKey, Int32 msTimeout) => Cache?.AcquireLock(lockKey, msTimeout);
46 | #endregion
47 | }
--------------------------------------------------------------------------------
/Stardust/Services/IEventProvider.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.Services;
2 |
3 | /// 事件客户端
4 | public interface IEventProvider
5 | {
6 | /// 写事件
7 | ///
8 | ///
9 | ///
10 | Boolean WriteEvent(String type, String name, String? remark);
11 |
12 | ///// 应用心跳。上报应用信息
13 | /////
14 | /////
15 | //Int32 AppPing(AppInfo inf);
16 | }
17 |
18 | /// 事件客户端助手
19 | public static class EventProviderHelper
20 | {
21 | /// 写信息事件
22 | ///
23 | ///
24 | ///
25 | public static void WriteInfoEvent(this IEventProvider client, String name, String? remark) => client.WriteEvent("info", name, remark);
26 |
27 | /// 写错误事件
28 | ///
29 | ///
30 | ///
31 | public static void WriteErrorEvent(this IEventProvider client, String name, String? remark) => client.WriteEvent("error", name, remark);
32 | }
--------------------------------------------------------------------------------
/Stardust/Services/StarTimeProvider.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Remoting.Clients;
2 |
3 | namespace Stardust.Services;
4 |
5 | #if !NET40
6 | internal class StarTimeProvider : TimeProvider
7 | {
8 | public ClientBase Client { get; set; } = null!;
9 |
10 | public override DateTimeOffset GetUtcNow() => Client != null ? Client.GetNow().ToUniversalTime() : base.GetUtcNow();
11 | }
12 | #endif
--------------------------------------------------------------------------------
/Stardust/StarHelper.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Configuration;
2 | using NewLife.Model;
3 |
4 | namespace Stardust;
5 |
6 | /// 星尘辅助类
7 | public static class StarHelper
8 | {
9 | /// 添加星尘,提供监控、配置和服务注册发现能力。先后从参数配置和本机StarAgent读取星尘平台地址
10 | ///
11 | ///
12 | ///
13 | public static StarFactory AddStardust(this IObjectContainer services, String appId) => AddStardust(services, null, appId, null);
14 |
15 | /// 添加星尘,提供监控、配置和服务注册发现能力。先后从参数配置和本机StarAgent读取星尘平台地址
16 | ///
17 | /// 服务端地址。为空时先后读取appsettings.json、本地StarAgent、star.config,初始值为空,不连接服务端
18 | /// 应用标识。为空时读取star.config,初始值为入口程序集名称
19 | /// 应用密钥。为空时读取star.config,初始值为空
20 | ///
21 | public static StarFactory AddStardust(this IObjectContainer services, String? server = null, String? appId = null, String? secret = null)
22 | {
23 | var star = new StarFactory(server, appId, secret);
24 |
25 | // 替换为混合配置提供者,优先本地配置
26 | var old = JsonConfigProvider.LoadAppSettings();
27 | star.SetLocalConfig(old);
28 |
29 | star.Register(services);
30 |
31 | return star;
32 | }
33 | }
--------------------------------------------------------------------------------
/Stardust/StarSetting.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using NewLife.Configuration;
3 | using NewLife.Remoting.Clients;
4 |
5 | namespace Stardust;
6 |
7 | /// 星尘客户端配置
8 | [Config("Star")]
9 | public class StarSetting : Config, IClientSetting
10 | {
11 | #region 属性
12 | /// 调试开关。默认false
13 | [Description("调试开关。默认false")]
14 | public Boolean Debug { get; set; }
15 |
16 | /// 服务端地址。如http://star.newlifex.com:6600,默认为空
17 | [Description("服务端地址。如http://star.newlifex.com:6600,默认为空")]
18 | public String Server { get; set; } = "";
19 |
20 | /// 应用标识
21 | [Description("应用标识")]
22 | public String? AppKey { get; set; }
23 |
24 | /// 应用密钥
25 | [Description("应用密钥")]
26 | public String? Secret { get; set; }
27 |
28 | ///// 服务地址。人工设定,用于提交注册中心,默认为空,自动识别外部访问地址
29 | //[Description("服务地址。人工设定,用于提交注册中心,默认为空,自动识别外部访问地址")]
30 | //public String ServiceAddress { get; set; }
31 |
32 | ///// 用户访问地址。自动记录用户访问的主机地址(反向代理之外),用于内部构造其它Url,多地址逗号隔开
33 | //[Description("用户访问地址。自动记录用户访问的主机地址(反向代理之外),用于内部构造其它Url,多地址逗号隔开")]
34 | //public String UserAddress { get; set; }
35 |
36 | /// 跟踪采样周期。默认60s
37 | [Description("跟踪采样周期。默认60s")]
38 | public Int32 TracerPeriod { get; set; } = 60;
39 |
40 | /// 最大正常采样数。采样周期内,最多只记录指定数量的正常事件,用于绘制依赖关系,默认1
41 | [Description("最大正常采样数。采样周期内,最多只记录指定数量的正常事件,用于绘制依赖关系,默认1")]
42 | public Int32 MaxSamples { get; set; } = 1;
43 |
44 | /// 最大异常采样数。采样周期内,最多只记录指定数量的异常事件,默认10
45 | [Description("最大异常采样数。采样周期内,最多只记录指定数量的异常事件,默认10")]
46 | public Int32 MaxErrors { get; set; } = 10;
47 |
48 | String IClientSetting.Code { get => AppKey!; set => AppKey = value; }
49 | #endregion
50 | }
--------------------------------------------------------------------------------
/Stardust/WeiXin/Article.cs:
--------------------------------------------------------------------------------
1 | namespace Stardust.WeiXin;
2 |
3 | /// 企业微信文章消息
4 | public class Article
5 | {
6 | /// 标题,不超过128个字节,超过会自动截断
7 | public String? Title { get; set; }
8 |
9 | /// 描述,不超过512个字节,超过会自动截断
10 | public String? Description { get; set; }
11 |
12 | /// 点击后跳转的链接。
13 | public String? Url { get; set; }
14 |
15 | /// 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150。
16 | public String? PicUrl { get; set; }
17 | }
--------------------------------------------------------------------------------
/Test/Properties/PublishProfiles/FolderProfile.pubxml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 | Release
8 | Any CPU
9 | ..\Bin\Test\publish\
10 | FileSystem
11 | net5.0
12 | linux-x64
13 | false
14 | False
15 |
16 |
--------------------------------------------------------------------------------
/Test/Test.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net8.0
6 | 1.0
7 | $([System.DateTime]::Now.ToString(`yyyy.MMdd`))
8 | $(VersionPrefix).$(VersionSuffix)
9 | $(Version)
10 | $(VersionPrefix).*
11 | false
12 | ..\Bin\Test
13 | false
14 | latest
15 | False
16 | 1701;1702;NU5104;NETSDK1138;CS7035
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | PreserveNewest
26 | true
27 | PreserveNewest
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/Test/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Warning"
5 | }
6 | },
7 | "AllowedHosts": "*",
8 | "StarServer": "http://127.0.0.1:6600,http://star.newlifex.com:6600",
9 | "ConnectionStrings": {
10 | "Stardust": {
11 | "connectionString": "Data Source=..\\Data\\Stardust.db",
12 | "providerName": "SQLite"
13 | },
14 | "StardustData": {
15 | "connectionString": "Data Source=..\\Data\\StardustData.db",
16 | "providerName": "SQLite"
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/Tools/Resources/Plugins/SQLite.Interop.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NewLifeX/Stardust/3258e69f81a5500be0ad23962a3fe018cf0df2ff/Tools/Resources/Plugins/SQLite.Interop.dll
--------------------------------------------------------------------------------
/Tools/Resources/Plugins/System.Data.SQLite.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NewLifeX/Stardust/3258e69f81a5500be0ad23962a3fe018cf0df2ff/Tools/Resources/Plugins/System.Data.SQLite.dll
--------------------------------------------------------------------------------
/Tools/Resources/backup/StarAgent.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | true
5 |
6 |
7 |
8 |
9 |
10 | 5500
11 |
12 | Release
13 |
14 | 3000
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Tools/Resources/linux-service.sh:
--------------------------------------------------------------------------------
1 |
2 | #!/bin/bash
3 |
4 | echo "Install Stardust on Linux"
5 |
6 | if [ ! -d "/usr/share/dotnet/" ]; then
7 | curl https://x.newlifex.com/dotnet/net8.sh | sudo bash
8 | fi
9 |
10 | sudo dotnet agent\StarAgent.dll -install -server http://127.0.0.1:6600
11 |
--------------------------------------------------------------------------------
/Tools/Resources/run.bat:
--------------------------------------------------------------------------------
1 |
2 | echo "Run Stardust on Windows"
3 |
4 | clover40.exe net8-host -silent
5 |
6 | start agent\StarAgent.exe -run -server http://127.0.0.1:6600
7 |
8 | ping 127.0.0.1 -n 5 > nul
9 | start http://localhost:6600/api
10 | ping 127.0.0.1 -n 5 > nul
11 | start http://localhost:6680
12 |
--------------------------------------------------------------------------------
/Tools/Resources/windows-service.bat:
--------------------------------------------------------------------------------
1 |
2 | echo "Install Stardust as service on Windows"
3 |
4 | clover40.exe net8-host -silent
5 |
6 | agent\StarAgent.exe -install -server http://127.0.0.1:6600
7 |
8 | ping 127.0.0.1 -n 5 > nul
9 | start http://localhost:6600/api
10 | ping 127.0.0.1 -n 5 > nul
11 | start http://localhost:6680
12 |
--------------------------------------------------------------------------------
/Tools/Scripts/net6.sh:
--------------------------------------------------------------------------------
1 |
2 | #!/bin/bash
3 |
4 | # 获取处理器架构
5 | arch=$(uname -m)
6 | ver="6.0.36"
7 | prefix="aspnetcore-runtime-$ver-linux"
8 | source="http://x.newlifex.com"
9 |
10 | echo arch: $arch
11 |
12 | # 识别Alpine
13 | if [ -f "/proc/version" ]; then
14 | cat /proc/version | grep -q -E 'musl|Alpine'
15 | if [ $? -eq 0 ]; then
16 | prefix="$prefix-musl"
17 | apk add libgcc libstdc++
18 | fi
19 | fi
20 |
21 | # 根据处理器架构选择下载的文件
22 | if [ $arch == "x86_64" ]; then
23 | gzfile="$prefix-x64.tar.gz"
24 | elif [ $arch == "amd64" ]; then
25 | gzfile="$prefix-x64.tar.gz"
26 | elif [ $arch == "aarch64" ]; then
27 | gzfile="$prefix-arm64.tar.gz"
28 | elif [ $arch == "armv7l" ]; then
29 | gzfile="$prefix-arm.tar.gz"
30 | else
31 | gzfile="$prefix-$arch.tar.gz"
32 | fi
33 |
34 | echo gzfile: $gzfile
35 |
36 | if [ ! -f "$gzfile" ]; then
37 | wget $source/dotnet/$ver/$gzfile
38 | fi
39 |
40 | # Ubuntu默认安装在/usr/lib目录
41 | target="/usr/lib/dotnet"
42 | if [ ! -d $target ]; then
43 | target="/usr/share/dotnet"
44 | fi
45 |
46 | echo target: $target
47 |
48 | if [ ! -d $target ]; then
49 | mkdir $target
50 | fi
51 | tar -xzf $gzfile -C $target
52 | if [ ! -f "/usr/bin/dotnet" ]; then
53 | ln $target/dotnet /usr/bin/dotnet -s
54 | fi
55 |
56 | dotnet --info
57 |
--------------------------------------------------------------------------------
/Tools/Scripts/star.sh:
--------------------------------------------------------------------------------
1 |
2 | #!/bin/bash
3 |
4 | if [ ! -d "/usr/lib/dotnet/" ] && [ ! -d "/usr/share/dotnet/" ]; then
5 | curl http://x.newlifex.com/dotnet/net.sh | bash
6 | fi
7 |
8 | gzfile="staragent90.tar.gz"
9 | if [ ! -f "$gzfile" ]; then
10 | wget "http://x.newlifex.com/star/"$gzfile
11 | fi
12 | if [ ! -d "agent/" ]; then
13 | mkdir agent
14 | fi
15 | tar -xzf $gzfile -C agent
16 |
17 | cd agent
18 |
19 | dotnet StarAgent.dll -uninstall
20 | dotnet StarAgent.dll -install -server http://s.newlifex.com:6600
21 |
22 | cd ..
23 | rm $gzfile -f
24 | rm star.sh -f
25 |
--------------------------------------------------------------------------------
/Tools/Scripts/star8.sh:
--------------------------------------------------------------------------------
1 |
2 | #!/bin/bash
3 |
4 | if [ ! -d "/usr/lib/dotnet/" ] && [ ! -d "/usr/share/dotnet/" ]; then
5 | curl http://x.newlifex.com/dotnet/net8.sh | bash
6 | fi
7 |
8 | gzfile="staragent80.tar.gz"
9 | if [ ! -f "$gzfile" ]; then
10 | wget "http://x.newlifex.com/star/"$gzfile
11 | fi
12 | if [ ! -d "agent/" ]; then
13 | mkdir agent
14 | fi
15 | tar -xzf $gzfile -C agent
16 |
17 | cd agent
18 |
19 | dotnet StarAgent.dll -uninstall
20 | dotnet StarAgent.dll -install -server http://s.newlifex.com:6600
21 |
22 | cd ..
23 | rm $gzfile -f
24 | rm star.sh -f
25 |
--------------------------------------------------------------------------------
/Tools/build.bat:
--------------------------------------------------------------------------------
1 | set base=..\Bin\Star
2 |
3 | del %base%\*.* /f/s/q
4 |
5 | set out=%base%\server
6 | rmdir /s/q %out%
7 | dotnet publish ..\Stardust.Server\Stardust.Server.csproj --nologo -c Release -o %out%
8 | del /f/s/q %out%\*.pdb %out%\*.xml %out%\*.deps.json
9 |
10 | set out=%base%\web
11 | rmdir /s/q %out%
12 | dotnet publish ..\Stardust.Web\Stardust.Web.csproj --nologo -c Release -o %out%
13 | del /f/s/q %out%\*.pdb %out%\*.xml %out%\*.deps.json
14 | rmdir /s/q %out%\wwwroot
15 |
16 | clover.exe zip %base%\StarWeb.zip %out%\
17 | del %out%\*.exe %out%\*.dll %out%\*.config /f/s/q
18 | move %base%\StarWeb.zip %out%\StarWeb.zip
19 |
20 | set out=%base%\agent
21 | rmdir /s/q %out%
22 | dotnet publish ..\StarAgent\StarAgent.csproj --nologo -c Release -f net8.0 -o %out%
23 | del /f/s/q %out%\*.pdb %out%\*.xml %out%\*.deps.json
24 |
25 | mkdir %out%\Config
26 | xcopy Resources\backup\*.config %out%\Config\ /y/s
27 |
28 | xcopy Resources\*.bat %base%\ /y/s
29 | xcopy Resources\*.sh %base%\ /y/s
30 | copy clover40.exe %base%\clover40.exe /y
31 |
32 | mkdir %base%\Plugins
33 |
34 | del %base%\..\star.zip /f
35 | clover.exe zip %base%\..\star.zip %base%\
36 | move %base%\..\star.zip %base%\
37 |
--------------------------------------------------------------------------------
/Tools/clover.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NewLifeX/Stardust/3258e69f81a5500be0ad23962a3fe018cf0df2ff/Tools/clover.exe
--------------------------------------------------------------------------------
/Tools/clover40.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NewLifeX/Stardust/3258e69f81a5500be0ad23962a3fe018cf0df2ff/Tools/clover40.exe
--------------------------------------------------------------------------------
/Tools/clover80.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NewLifeX/Stardust/3258e69f81a5500be0ad23962a3fe018cf0df2ff/Tools/clover80.exe
--------------------------------------------------------------------------------
/Tools/pack-agent.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 |
3 | set base=..\Bin\Agent
4 | set clover=..\..\..\Tools\clover.exe
5 |
6 | del %base%\*.zip /f/q
7 | del %base%\*.tar.gz /f/q
8 |
9 | pushd %base%\net9.0
10 | set name=staragent90
11 | %clover% tar ..\%name%.tar.gz *.exe *.dll *.runtimeconfig.json
12 | %clover% zip ..\%name%.zip *.exe *.dll *.runtimeconfig.json
13 | popd
14 |
15 | pushd %base%\net8.0
16 | set name=staragent80
17 | %clover% tar ..\%name%.tar.gz *.exe *.dll *.runtimeconfig.json
18 | %clover% zip ..\%name%.zip *.exe *.dll *.runtimeconfig.json
19 | popd
20 |
21 | pushd %base%\net7.0
22 | set name=staragent70
23 | %clover% tar ..\%name%.tar.gz *.exe *.dll *.runtimeconfig.json
24 | %clover% zip ..\%name%.zip *.exe *.dll *.runtimeconfig.json
25 | popd
26 |
27 | pushd %base%\net6.0
28 | set name=staragent60
29 | %clover% tar ..\%name%.tar.gz *.exe *.dll *.runtimeconfig.json
30 | %clover% zip ..\%name%.zip *.exe *.dll *.runtimeconfig.json
31 | popd
32 |
33 | pushd %base%\net5.0
34 | set name=staragent50
35 | %clover% tar ..\%name%.tar.gz *.exe *.dll *.runtimeconfig.json
36 | %clover% zip ..\%name%.zip *.exe *.dll *.runtimeconfig.json
37 | popd
38 |
39 | pushd %base%\netcoreapp3.1
40 | set name=staragent31
41 | %clover% tar ..\%name%.tar.gz *.exe *.dll *.runtimeconfig.json
42 | %clover% zip ..\%name%.zip *.exe *.dll *.runtimeconfig.json
43 | popd
44 |
45 | pushd %base%\net461
46 | set name=staragent461
47 | %clover% zip ..\%name%.zip *.exe *.dll StarAgent.exe.config
48 | popd
49 |
50 | pushd %base%\net45
51 | set name=staragent45
52 | %clover% zip ..\%name%.zip *.exe *.dll StarAgent.exe.config
53 | popd
54 |
--------------------------------------------------------------------------------
/Tools/pack.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 |
3 | set name=StarWeb
4 | set clover=..\..\Tools\clover.exe
5 | if not exist "%clover%" (
6 | set clover=..\..\Doc\clover.exe
7 | )
8 |
9 | for %%f in (*.exe) do (
10 | rem 获取文件名(去掉扩展名)
11 | set "name=%%~nf"
12 | goto :found
13 | )
14 |
15 | :found
16 | if defined name (
17 | del %name%.zip /f/q
18 | %clover% zip %name%.zip *.exe *.dll *.pdb appsettings.json *.runtimeconfig.json
19 | ) else (
20 | echo No exe file found in the current directory.
21 | )
22 |
--------------------------------------------------------------------------------
/Tools/通用或专用平台.txt:
--------------------------------------------------------------------------------
1 | build.bat 通用平台,dotnet IoTServer.dll 启动应用
2 | build-linux 专用平台,./IoTServer 启动应用
3 | build-windows 专用平台,IoTServer.exe 启动应用,支持部署到IIS
4 |
5 | 输出目录:
6 | ..\Bin\iot
7 | ..\Bin\iot-linux
8 | ..\Bin\iot-windows
9 |
--------------------------------------------------------------------------------