新增服务管理命令处理类
代码中新增了四个命令处理类:`ListServices`、`RestartService`、`StartService` 和 `StopService`,用于列出、重启、启动和停止子服务。每个类继承自 `BaseCommandHandler`,实现了 `Process` 方法以处理相应的命令逻辑,并通过 `ApiHttpClient` 与服务进行交互。新增的类还包含用户输入处理和错误处理逻辑,确保操作过程中的反馈。
This commit is contained in:
parent
763389dac5
commit
91339f861e
|
@ -0,0 +1,82 @@
|
|||
using Stardust.Models;
|
||||
using NewLife.Agent;
|
||||
using NewLife.Agent.Command;
|
||||
using NewLife.Log;
|
||||
using NewLife.Remoting;
|
||||
|
||||
namespace StarAgent.CommandHandler;
|
||||
|
||||
public class ListServices : BaseCommandHandler
|
||||
{
|
||||
public ListServices(ServiceBase service) : base(service)
|
||||
{
|
||||
Cmd = "-ListServices";
|
||||
Description = "查看子服务";
|
||||
ShortcutKey = '6';
|
||||
}
|
||||
|
||||
public override void Process(String[] args)
|
||||
{
|
||||
var client = new ApiHttpClient("http://localhost:5500/");
|
||||
|
||||
try
|
||||
{
|
||||
// 调用GET请求。
|
||||
var response = client.Get<ServicesInfo>("GetServices");
|
||||
|
||||
if (response == null || response.Services == null)
|
||||
{
|
||||
XTrace.WriteLine("没有找到任何子服务");
|
||||
return;
|
||||
}
|
||||
|
||||
XTrace.WriteLine("所有子服务列表:");
|
||||
XTrace.WriteLine("{0,-5} {1,-15} {2,-5} {3,-10} {4,-10} {5,-10}", "序号", "服务名称", "启用", "状态", "进程Id", "进程名称");
|
||||
|
||||
for (var i = 0; i < response.Services.Length; i++)
|
||||
{
|
||||
var svc = response.Services[i];
|
||||
|
||||
var es = response.RunningServices?.FirstOrDefault(e => e.Name == svc.Name);
|
||||
|
||||
XTrace.WriteLine("{0,-7} {1,-20} {2,-5} {3,-10} {4,-10} {5,-10}",
|
||||
i + 1,
|
||||
svc.Name,
|
||||
svc.Enable ? "是" : "否",
|
||||
es != null ? "启动中" : "停止",
|
||||
es?.ProcessId,
|
||||
es?.ProcessName);
|
||||
}
|
||||
|
||||
//// 处理响应数据。
|
||||
//Console.WriteLine($"Response: {response?.ToJson()}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 错误处理。
|
||||
Console.WriteLine($"Error: {ex.Message}");
|
||||
}
|
||||
|
||||
//var service = (MyService)Service;
|
||||
//var manager = service.Provider?.GetService(typeof(ServiceManager)) as ServiceManager;
|
||||
|
||||
//if (manager == null || manager.Services == null || manager.Services.Length == 0)
|
||||
//{
|
||||
// Console.WriteLine("没有找到任何子服务");
|
||||
// return;
|
||||
//}
|
||||
|
||||
//Console.WriteLine("所有子服务列表:");
|
||||
//Console.WriteLine("序号\t服务名称\t启用");
|
||||
|
||||
//for (int i = 0; i < manager.Services.Length; i++)
|
||||
//{
|
||||
// var svc = manager.Services[i];
|
||||
|
||||
// Console.WriteLine("{0}\t{1}\t{2}",
|
||||
// i + 1,
|
||||
// svc.Name,
|
||||
// svc.Enable ? "是" : "否");
|
||||
//}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
using NewLife.Agent;
|
||||
using NewLife.Agent.Command;
|
||||
using NewLife.Log;
|
||||
using NewLife.Remoting;
|
||||
using Stardust.Models;
|
||||
|
||||
namespace StarAgent.CommandHandler;
|
||||
|
||||
public class RestartService : BaseCommandHandler
|
||||
{
|
||||
public RestartService(ServiceBase service) : base(service)
|
||||
{
|
||||
Cmd = "-RestartService";
|
||||
Description = "重启子服务";
|
||||
ShortcutKey = '9';
|
||||
}
|
||||
|
||||
public override void Process(String[] args)
|
||||
{
|
||||
var client = new ApiHttpClient("http://localhost:5500/");
|
||||
|
||||
// 获取服务列表
|
||||
var services = client.Get<ServicesInfo>("GetServices");
|
||||
if (services == null || services.Services == null || services.Services.Length == 0)
|
||||
{
|
||||
XTrace.WriteLine("没有找到任何子服务");
|
||||
return;
|
||||
}
|
||||
|
||||
// 显示服务列表
|
||||
XTrace.WriteLine("请选择要重启的服务:");
|
||||
for (var i = 0; i < services.Services.Length; i++)
|
||||
{
|
||||
var svc = services.Services[i];
|
||||
var es = services.RunningServices?.FirstOrDefault(e => e.Name == svc.Name);
|
||||
var status = es != null ? "运行中" : "已停止";
|
||||
XTrace.WriteLine("{0}. {1} ({2})", i + 1, svc.Name, status);
|
||||
}
|
||||
|
||||
// 获取用户输入
|
||||
XTrace.WriteLine("请输入服务序号或名称:");
|
||||
var input = Console.ReadLine();
|
||||
if (String.IsNullOrEmpty(input))
|
||||
{
|
||||
XTrace.WriteLine("操作已取消");
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析用户输入
|
||||
String serviceName;
|
||||
if (Int32.TryParse(input, out var index) && index > 0 && index <= services.Services.Length)
|
||||
{
|
||||
serviceName = services.Services[index - 1].Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
serviceName = input;
|
||||
}
|
||||
|
||||
XTrace.WriteLine("准备重启服务:{0}", serviceName);
|
||||
|
||||
try
|
||||
{
|
||||
// 调用API重启服务
|
||||
var response = client.Get<ServiceOperationResult>("RestartService", new { serviceName });
|
||||
|
||||
if (response == null)
|
||||
{
|
||||
XTrace.WriteLine("重启服务失败:未收到响应");
|
||||
return;
|
||||
}
|
||||
|
||||
if (response.Success)
|
||||
{
|
||||
XTrace.WriteLine("服务 {0} 重启成功", serviceName);
|
||||
}
|
||||
else
|
||||
{
|
||||
XTrace.WriteLine("重启服务失败:{0}", response.Message);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XTrace.WriteLine("重启服务时发生错误:{0}", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
using NewLife.Agent;
|
||||
using NewLife.Agent.Command;
|
||||
using NewLife.Log;
|
||||
using NewLife.Remoting;
|
||||
using Stardust.Models;
|
||||
|
||||
namespace StarAgent.CommandHandler;
|
||||
|
||||
public class StartService : BaseCommandHandler
|
||||
{
|
||||
public StartService(ServiceBase service) : base(service)
|
||||
{
|
||||
Cmd = "-StartService";
|
||||
Description = "启动子服务";
|
||||
ShortcutKey = '7';
|
||||
}
|
||||
|
||||
public override void Process(String[] args)
|
||||
{
|
||||
var client = new ApiHttpClient("http://localhost:5500/");
|
||||
|
||||
// 获取服务列表
|
||||
var services = client.Get<ServicesInfo>("GetServices");
|
||||
if (services == null || services.Services == null || services.Services.Length == 0)
|
||||
{
|
||||
XTrace.WriteLine("没有找到任何子服务");
|
||||
return;
|
||||
}
|
||||
|
||||
// 显示服务列表
|
||||
XTrace.WriteLine("请选择要启动的服务:");
|
||||
for (var i = 0; i < services.Services.Length; i++)
|
||||
{
|
||||
var svc = services.Services[i];
|
||||
XTrace.WriteLine("{0}. {1}", i + 1, svc.Name);
|
||||
}
|
||||
|
||||
// 获取用户输入
|
||||
XTrace.WriteLine("请输入服务序号或名称:");
|
||||
var input = Console.ReadLine();
|
||||
if (String.IsNullOrEmpty(input))
|
||||
{
|
||||
XTrace.WriteLine("操作已取消");
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析用户输入
|
||||
String serviceName;
|
||||
if (Int32.TryParse(input, out var index) && index > 0 && index <= services.Services.Length)
|
||||
{
|
||||
serviceName = services.Services[index - 1].Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
serviceName = input;
|
||||
}
|
||||
|
||||
XTrace.WriteLine("准备启动服务:{0}", serviceName);
|
||||
|
||||
try
|
||||
{
|
||||
// 调用API启动服务
|
||||
var response = client.Get<ServiceOperationResult>("StartService", new { serviceName });
|
||||
|
||||
if (response == null)
|
||||
{
|
||||
XTrace.WriteLine("启动服务失败:未收到响应");
|
||||
return;
|
||||
}
|
||||
|
||||
if (response.Success)
|
||||
{
|
||||
XTrace.WriteLine("服务 {0} 启动成功", serviceName);
|
||||
}
|
||||
else
|
||||
{
|
||||
XTrace.WriteLine("启动服务失败:{0}", response.Message);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XTrace.WriteLine("启动服务时发生错误:{0}", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 服务操作结果类,与API返回值对应
|
||||
public class ServiceOperationResult
|
||||
{
|
||||
public Boolean Success { get; set; }
|
||||
public String? Message { get; set; }
|
||||
public String? ServiceName { get; set; }
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
using NewLife.Agent;
|
||||
using NewLife.Agent.Command;
|
||||
using NewLife.Log;
|
||||
using NewLife.Remoting;
|
||||
using Stardust.Models;
|
||||
|
||||
namespace StarAgent.CommandHandler;
|
||||
|
||||
public class StopService : BaseCommandHandler
|
||||
{
|
||||
public StopService(ServiceBase service) : base(service)
|
||||
{
|
||||
Cmd = "-StopService";
|
||||
Description = "停止子服务";
|
||||
ShortcutKey = '8';
|
||||
}
|
||||
|
||||
public override void Process(String[] args)
|
||||
{
|
||||
var client = new ApiHttpClient("http://localhost:5500/");
|
||||
|
||||
// 获取服务列表
|
||||
var services = client.Get<ServicesInfo>("GetServices");
|
||||
if (services == null || services.Services == null || services.Services.Length == 0)
|
||||
{
|
||||
XTrace.WriteLine("没有找到任何子服务");
|
||||
return;
|
||||
}
|
||||
|
||||
// 显示服务列表
|
||||
XTrace.WriteLine("请选择要停止的服务:");
|
||||
for (var i = 0; i < services.Services.Length; i++)
|
||||
{
|
||||
var svc = services.Services[i];
|
||||
var es = services.RunningServices?.FirstOrDefault(e => e.Name == svc.Name);
|
||||
if (es != null) // 只显示正在运行的服务
|
||||
{
|
||||
XTrace.WriteLine("{0}. {1} (PID: {2})", i + 1, svc.Name, es.ProcessId);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取用户输入
|
||||
XTrace.WriteLine("请输入服务序号或名称:");
|
||||
var input = Console.ReadLine();
|
||||
if (String.IsNullOrEmpty(input))
|
||||
{
|
||||
XTrace.WriteLine("操作已取消");
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析用户输入
|
||||
String serviceName;
|
||||
if (Int32.TryParse(input, out var index) && index > 0 && index <= services.Services.Length)
|
||||
{
|
||||
serviceName = services.Services[index - 1].Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
serviceName = input;
|
||||
}
|
||||
|
||||
XTrace.WriteLine("准备停止服务:{0}", serviceName);
|
||||
|
||||
try
|
||||
{
|
||||
// 调用API停止服务
|
||||
var response = client.Get<ServiceOperationResult>("StopService", new { serviceName });
|
||||
|
||||
if (response == null)
|
||||
{
|
||||
XTrace.WriteLine("停止服务失败:未收到响应");
|
||||
return;
|
||||
}
|
||||
|
||||
if (response.Success)
|
||||
{
|
||||
XTrace.WriteLine("服务 {0} 停止成功", serviceName);
|
||||
}
|
||||
else
|
||||
{
|
||||
XTrace.WriteLine("停止服务失败:{0}", response.Message);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
XTrace.WriteLine("停止服务时发生错误:{0}", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue