init
This commit is contained in:
95
src/Service/Jobs/HealthyTaskRegistry.cs
Normal file
95
src/Service/Jobs/HealthyTaskRegistry.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text;
|
||||
using Core;
|
||||
using FluentScheduler;
|
||||
using Interface.Jobs;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace Service.Jobs;
|
||||
|
||||
public class HealthyTaskRegistry : Registry, IHealthyTaskRegistry
|
||||
{
|
||||
private readonly IConfiguration _configuration;
|
||||
|
||||
public HealthyTaskRegistry(IConfiguration configuration)
|
||||
{
|
||||
_configuration = configuration;
|
||||
Schedule(Job).ToRunNow().AndEvery(2).Minutes();
|
||||
}
|
||||
|
||||
public async void Job()
|
||||
{
|
||||
try
|
||||
{
|
||||
await JobExecute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
await WxNotify.SendCommonAsync($"HealthyTaskRegistry.Job() error: {e}");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task JobExecute()
|
||||
{
|
||||
// 获取 配置 是个 KV 集合
|
||||
var configs = _configuration.GetSection("HealthyTasks");
|
||||
|
||||
// 遍历配置
|
||||
foreach (var item in configs.GetChildren())
|
||||
{
|
||||
// 获取配置的 containerName 和 url
|
||||
var containerName = item["ContainerName"];
|
||||
var url = item["Url"];
|
||||
|
||||
// 执行
|
||||
await ExecuteItem(containerName!, url!);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ExecuteItem(string containerName, string url)
|
||||
{
|
||||
try
|
||||
{
|
||||
var client = new HttpClient();
|
||||
|
||||
// basic auth
|
||||
string authInfo = Convert.ToBase64String(Encoding.ASCII.GetBytes("suncheng:SCsunch940622"));
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo);
|
||||
|
||||
var response = await client.GetAsync(url);
|
||||
|
||||
if (response.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
throw new Exception($"StatusCode: {response.StatusCode}");
|
||||
}
|
||||
|
||||
Console.WriteLine($"ContainerName: {containerName}, Url: {url}, StatusCode: {response.StatusCode}");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
await WxNotify.SendCommonAsync($"ExecuteItem {containerName} error: {e.Message}");
|
||||
await ExecuteReboot(containerName);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ExecuteReboot(string containerName)
|
||||
{
|
||||
var command = $"docker restart {containerName}";
|
||||
|
||||
var (responseCode, message) = await Command.ExecAsync(command);
|
||||
|
||||
if (responseCode != HttpStatusCode.OK)
|
||||
{
|
||||
await WxNotify.SendCommonAsync($"ExecuteReboot {containerName} error: {responseCode} message: {message}");
|
||||
}
|
||||
else
|
||||
{
|
||||
await WxNotify.SendCommonAsync($"ContainerName: {containerName}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user