init
This commit is contained in:
9
src/WebApi/Controllers/BaseController.cs
Normal file
9
src/WebApi/Controllers/BaseController.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace WebApi.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[Route("/api/[controller]/[action]")]
|
||||
public class BaseController : ControllerBase
|
||||
{
|
||||
}
|
||||
101
src/WebApi/Controllers/JobTriggerController.cs
Normal file
101
src/WebApi/Controllers/JobTriggerController.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
using Interface.Jobs;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace WebApi.Controllers;
|
||||
|
||||
public class JobTriggerController : BaseController
|
||||
{
|
||||
private readonly ILogTotalNotifyJobRegistry _logTotalNotifyJobRegistry;
|
||||
private readonly IDiskActionMonitorRegistry _diskActionMonitorRegistry;
|
||||
private readonly IHealthyTaskRegistry _healthyTaskRegistry;
|
||||
private readonly IRSyncTaskRegistry _rSyncTaskRegistry;
|
||||
private readonly IStartupRegistry _startupRegistry;
|
||||
private readonly IShutdownRegistry _shutdownRegistry;
|
||||
private readonly IChineseNfoRegistry _chineseNfoRegistry;
|
||||
|
||||
/// <summary>
|
||||
/// ctor
|
||||
/// </summary>
|
||||
public JobTriggerController(
|
||||
ILogTotalNotifyJobRegistry logTotalNotifyJobRegistry,
|
||||
IDiskActionMonitorRegistry diskActionMonitorRegistry,
|
||||
IHealthyTaskRegistry healthyTaskRegistry,
|
||||
IRSyncTaskRegistry rSyncTaskRegistry,
|
||||
IStartupRegistry startupRegistry,
|
||||
IShutdownRegistry shutdownRegistry,
|
||||
IChineseNfoRegistry chineseNfoRegistry)
|
||||
{
|
||||
_logTotalNotifyJobRegistry = logTotalNotifyJobRegistry;
|
||||
_diskActionMonitorRegistry = diskActionMonitorRegistry;
|
||||
_healthyTaskRegistry = healthyTaskRegistry;
|
||||
_rSyncTaskRegistry = rSyncTaskRegistry;
|
||||
_startupRegistry = startupRegistry;
|
||||
_shutdownRegistry = shutdownRegistry;
|
||||
_chineseNfoRegistry = chineseNfoRegistry;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public string LogTotalNotify()
|
||||
{
|
||||
_logTotalNotifyJobRegistry.Job();
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public string DiskActionMonitor()
|
||||
{
|
||||
_diskActionMonitorRegistry.Job();
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public string HealthyTask()
|
||||
{
|
||||
_healthyTaskRegistry.Job();
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
|
||||
[HttpGet]
|
||||
public string RSyncTask()
|
||||
{
|
||||
_rSyncTaskRegistry.Job();
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public string Startup()
|
||||
{
|
||||
_startupRegistry.Job();
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public string Shutdown()
|
||||
{
|
||||
_shutdownRegistry.Job();
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public string CancelShutdown()
|
||||
{
|
||||
_shutdownRegistry.CancelShutdown();
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public string ConvertChineseNfo(bool ignoreLocked = false, bool ignoreCompleted = false)
|
||||
{
|
||||
_chineseNfoRegistry.Job(ignoreLocked, ignoreCompleted);
|
||||
|
||||
return "OK";
|
||||
}
|
||||
}
|
||||
319
src/WebApi/Controllers/NotifyController.cs
Normal file
319
src/WebApi/Controllers/NotifyController.cs
Normal file
@@ -0,0 +1,319 @@
|
||||
using Core;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace WebApi.Controllers;
|
||||
|
||||
public class NotifyController : BaseController
|
||||
{
|
||||
public NotifyController()
|
||||
{
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<string> Radarr()
|
||||
{
|
||||
var body = Request.Body;
|
||||
|
||||
using var reader = new StreamReader(body);
|
||||
var text = await reader.ReadToEndAsync();
|
||||
|
||||
Console.WriteLine(text);
|
||||
|
||||
/*
|
||||
{
|
||||
"movie": {
|
||||
"id": 1,
|
||||
"title": "Test Title",
|
||||
"year": 1970,
|
||||
"releaseDate": "1970-01-01",
|
||||
"folderPath": "C:\\testpath",
|
||||
"tmdbId": 0,
|
||||
"tags": [
|
||||
"test-tag"
|
||||
]
|
||||
},
|
||||
"remoteMovie": {
|
||||
"tmdbId": 1234,
|
||||
"imdbId": "5678",
|
||||
"title": "Test title",
|
||||
"year": 1970
|
||||
},
|
||||
"release": {
|
||||
"quality": "Test Quality",
|
||||
"qualityVersion": 1,
|
||||
"releaseGroup": "Test Group",
|
||||
"releaseTitle": "Test Title",
|
||||
"indexer": "Test Indexer",
|
||||
"size": 9999999,
|
||||
"customFormatScore": 0
|
||||
},
|
||||
"eventType": "Test",
|
||||
"instanceName": "Radarr",
|
||||
"applicationUrl": ""
|
||||
}
|
||||
*/
|
||||
|
||||
var jsonObj = JsonConvert.DeserializeObject<JObject>(text);
|
||||
|
||||
var notify = @$"# Radarr通知:
|
||||
> 时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}
|
||||
|
||||
电影:<font color='info'> {jsonObj!["movie"]!["title"]}({jsonObj["movie"]!["releaseDate"]}) </font>
|
||||
标签:<font color='info'> {string.Join(",", jsonObj["movie"]!["tags"]?.ToObject<string[]>() ?? Array.Empty<string>())} </font>
|
||||
事件:<font color='info'> {jsonObj["eventType"]} </font>
|
||||
";
|
||||
|
||||
var file = jsonObj["release"] ?? jsonObj["movieFile"];
|
||||
|
||||
if (file != null)
|
||||
{
|
||||
var size = file["size"]?.ToObject<decimal>() ?? 0M;
|
||||
|
||||
var gb = (size / 1024M / 1024M / 1024M).ToString("0.##");
|
||||
|
||||
notify += @$"
|
||||
索引器:<font color='info'> {file["indexer"]} </font>
|
||||
发布组:<font color='info'> {file["releaseGroup"]}({file["quality"]}) </font>
|
||||
发布标题:<font color='info'> {file["releaseTitle"] ?? file["relativePath"]} </font>
|
||||
占用空间:<font color='info'> {gb}GB </font>";
|
||||
}
|
||||
|
||||
await WxNotify.SendCommonAsync(notify);
|
||||
|
||||
return "OK";
|
||||
}
|
||||
|
||||
|
||||
[HttpPost]
|
||||
public async Task<string> Sonarr()
|
||||
{
|
||||
var body = Request.Body;
|
||||
|
||||
using var reader = new StreamReader(body);
|
||||
var text = await reader.ReadToEndAsync();
|
||||
|
||||
Console.WriteLine(text);
|
||||
|
||||
/*
|
||||
{
|
||||
"series": {
|
||||
"id": 86,
|
||||
"title": "Demon Slayer: Kimetsu no Yaiba",
|
||||
"titleSlug": "demon-slayer-kimetsu-no-yaiba",
|
||||
"path": "/data/anime/Demon Slayer - Kimetsu no Yaiba",
|
||||
"tvdbId": 348545,
|
||||
"tvMazeId": 41469,
|
||||
"tmdbId": 85937,
|
||||
"imdbId": "tt9335498",
|
||||
"type": "anime",
|
||||
"year": 2019,
|
||||
"genres": [
|
||||
"Action",
|
||||
"Adventure",
|
||||
"Animation",
|
||||
"Anime",
|
||||
"Drama",
|
||||
"Fantasy",
|
||||
"Thriller"
|
||||
],
|
||||
"images": [
|
||||
{
|
||||
"coverType": "banner",
|
||||
"url": "/MediaCover/86/banner.jpg?lastWrite=638509998968281535",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/graphical/5ccd960cc3aa0.jpg"
|
||||
},
|
||||
{
|
||||
"coverType": "poster",
|
||||
"url": "/MediaCover/86/poster.jpg?lastWrite=638509998969561521",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/v4/series/348545/posters/60908d475f49a.jpg"
|
||||
},
|
||||
{
|
||||
"coverType": "fanart",
|
||||
"url": "/MediaCover/86/fanart.jpg?lastWrite=638509998971801497",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/fanart/original/5c93cbb2b60b6.jpg"
|
||||
},
|
||||
{
|
||||
"coverType": "clearlogo",
|
||||
"url": "/MediaCover/86/clearlogo.png?lastWrite=638509998972921485",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/v4/series/348545/clearlogo/611c7fa8222d6.png"
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"anime"
|
||||
]
|
||||
},
|
||||
"episodes": [
|
||||
{
|
||||
"id": 2716,
|
||||
"episodeNumber": 2,
|
||||
"seasonNumber": 5,
|
||||
"title": "Water Hashira Giyu Tomioka's Pain",
|
||||
"overview": "Kagaya's Kasugai Crow suddenly appears in front of Tamayo and invites her to the Demon Slayer headquarters — even though she is a demon. Meanwhile, Tanjiro, who is recovering at the Butterfly Mansion, receives a letter from Kagaya...",
|
||||
"airDate": "2024-05-19",
|
||||
"airDateUtc": "2024-05-19T14:15:00Z",
|
||||
"seriesId": 86,
|
||||
"tvdbId": 10445764
|
||||
}
|
||||
],
|
||||
"release": {
|
||||
"quality": "WEBDL-1080p",
|
||||
"qualityVersion": 1,
|
||||
"releaseGroup": "ToonsHub",
|
||||
"releaseTitle": "[ToonsHub] Demon Slayer Kimetsu no Yaiba S05E02 1080p CR WEB-DL AAC2.0 x264 (Multi-Subs)",
|
||||
"indexer": "Knaben ",
|
||||
"size": 1395864320,
|
||||
"customFormatScore": 0,
|
||||
"customFormats": []
|
||||
},
|
||||
"downloadClient": "aria2",
|
||||
"downloadClientType": "Aria2",
|
||||
"downloadId": "915718C3A8A5B15BD3C32A2B05885953D96AFADD",
|
||||
"customFormatInfo": {
|
||||
"customFormats": [],
|
||||
"customFormatScore": 0
|
||||
},
|
||||
"eventType": "Grab",
|
||||
"instanceName": "Sonarr",
|
||||
"applicationUrl": ""
|
||||
}
|
||||
|
||||
|
||||
--------------------------
|
||||
|
||||
{
|
||||
"series": {
|
||||
"id": 86,
|
||||
"title": "Demon Slayer: Kimetsu no Yaiba",
|
||||
"titleSlug": "demon-slayer-kimetsu-no-yaiba",
|
||||
"path": "/data/anime/Demon Slayer - Kimetsu no Yaiba",
|
||||
"tvdbId": 348545,
|
||||
"tvMazeId": 41469,
|
||||
"tmdbId": 85937,
|
||||
"imdbId": "tt9335498",
|
||||
"type": "anime",
|
||||
"year": 2019,
|
||||
"genres": [
|
||||
"Action",
|
||||
"Adventure",
|
||||
"Animation",
|
||||
"Anime",
|
||||
"Drama",
|
||||
"Fantasy",
|
||||
"Thriller"
|
||||
],
|
||||
"images": [
|
||||
{
|
||||
"coverType": "banner",
|
||||
"url": "/MediaCover/86/banner.jpg?lastWrite=638509998968281535",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/graphical/5ccd960cc3aa0.jpg"
|
||||
},
|
||||
{
|
||||
"coverType": "poster",
|
||||
"url": "/MediaCover/86/poster.jpg?lastWrite=638509998969561521",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/v4/series/348545/posters/60908d475f49a.jpg"
|
||||
},
|
||||
{
|
||||
"coverType": "fanart",
|
||||
"url": "/MediaCover/86/fanart.jpg?lastWrite=638509998971801497",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/fanart/original/5c93cbb2b60b6.jpg"
|
||||
},
|
||||
{
|
||||
"coverType": "clearlogo",
|
||||
"url": "/MediaCover/86/clearlogo.png?lastWrite=638509998972921485",
|
||||
"remoteUrl": "https://artworks.thetvdb.com/banners/v4/series/348545/clearlogo/611c7fa8222d6.png"
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"anime"
|
||||
]
|
||||
},
|
||||
"episodes": [
|
||||
{
|
||||
"id": 2716,
|
||||
"episodeNumber": 2,
|
||||
"seasonNumber": 5,
|
||||
"title": "Water Hashira Giyu Tomioka's Pain",
|
||||
"overview": "Kagaya's Kasugai Crow suddenly appears in front of Tamayo and invites her to the Demon Slayer headquarters — even though she is a demon. Meanwhile, Tanjiro, who is recovering at the Butterfly Mansion, receives a letter from Kagaya...",
|
||||
"airDate": "2024-05-19",
|
||||
"airDateUtc": "2024-05-19T14:15:00Z",
|
||||
"seriesId": 86,
|
||||
"tvdbId": 10445764
|
||||
}
|
||||
],
|
||||
"downloadInfo": {
|
||||
"quality": "WEBDL-1080p",
|
||||
"qualityVersion": 1,
|
||||
"title": "Demon.Slayer.Kimetsu.no.Yaiba.S57E02.Water.Hashira.Giyu.Tomiokas.Pain.1080p.CR.WEB-DL.JPN.AAC2.0.H.264.MSubs-ToonsHub.mkv",
|
||||
"size": 1446462408
|
||||
},
|
||||
"downloadClient": "aria2",
|
||||
"downloadClientType": "Aria2",
|
||||
"downloadId": "915718C3A8A5B15BD3C32A2B05885953D96AFADD",
|
||||
"downloadStatus": "Warning",
|
||||
"downloadStatusMessages": [
|
||||
{
|
||||
"title": "One or more episodes expected in this release were not imported or missing from the release",
|
||||
"messages": []
|
||||
},
|
||||
{
|
||||
"title": "Demon.Slayer.Kimetsu.no.Yaiba.S57E02.Water.Hashira.Giyu.Tomiokas.Pain.1080p.CR.WEB-DL.JPN.AAC2.0.H.264.MSubs-ToonsHub.mkv",
|
||||
"messages": [
|
||||
"Invalid season or episode"
|
||||
]
|
||||
}
|
||||
],
|
||||
"customFormatInfo": {
|
||||
"customFormats": [],
|
||||
"customFormatScore": 0
|
||||
},
|
||||
"release": {
|
||||
"releaseTitle": "[ToonsHub] Demon Slayer Kimetsu no Yaiba S05E02 1080p CR WEB-DL AAC2.0 x264 (Multi-Subs)",
|
||||
"indexer": "Knaben ",
|
||||
"size": 1395864320
|
||||
},
|
||||
"eventType": "ManualInteractionRequired",
|
||||
"instanceName": "Sonarr",
|
||||
"applicationUrl": ""
|
||||
}
|
||||
*/
|
||||
|
||||
var jsonObj = JsonConvert.DeserializeObject<JObject>(text);
|
||||
|
||||
var notify = @$"# Sonarr通知:
|
||||
> 时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}
|
||||
|
||||
剧集:<font color='info'> {jsonObj!["series"]!["title"]} </font>
|
||||
标签:<font color='info'> {string.Join(",", jsonObj["series"]!["tags"]?.ToObject<string[]>() ?? Array.Empty<string>())} </font>
|
||||
事件:<font color='info'> {jsonObj["eventType"]} </font>
|
||||
";
|
||||
|
||||
var episodes = jsonObj["episodes"];
|
||||
|
||||
if (episodes != null)
|
||||
{
|
||||
foreach (var item in episodes)
|
||||
{
|
||||
notify += @$"
|
||||
集数:<font color='info'> 第{item["seasonNumber"]}季-第{item["episodeNumber"]}集 </font>";
|
||||
}
|
||||
}
|
||||
|
||||
if (jsonObj["release"] != null)
|
||||
{
|
||||
var gb = (jsonObj["release"]!.ToObject<decimal>() / 1024M / 1024M / 1024M).ToString("0.##");
|
||||
notify += @$"
|
||||
索引器:<font color='info'> {jsonObj["release"]!["indexer"]} </font>
|
||||
发布组:<font color='info'> {jsonObj["release"]!["releaseGroup"]}({jsonObj["release"]!["quality"] ?? jsonObj["downloadInfo"]!["quality"]}) </font>
|
||||
发布标题:<font color='info'> {jsonObj["release"]!["releaseTitle"]} </font>
|
||||
占用空间:<font color='info'> {gb}GB </font>
|
||||
";
|
||||
}
|
||||
|
||||
|
||||
await WxNotify.SendCommonAsync(notify);
|
||||
|
||||
return "OK";
|
||||
}
|
||||
}
|
||||
34
src/WebApi/Controllers/XiaoController.cs
Normal file
34
src/WebApi/Controllers/XiaoController.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Core;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace WebApi.Controllers;
|
||||
|
||||
public class XiaoController : BaseController
|
||||
{
|
||||
private readonly ILogger<XiaoController> _logger;
|
||||
|
||||
public XiaoController(ILogger<XiaoController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<string> GotoHomeGame()
|
||||
{
|
||||
await WxNotify.SendCommonAsync("接收到启动游戏机指令");
|
||||
|
||||
var commands = new[]
|
||||
{
|
||||
"grub-reboot 2",
|
||||
"reboot"
|
||||
};
|
||||
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
await Task.Delay(3000);
|
||||
_ = await Command.ExecAsync(commands);
|
||||
});
|
||||
|
||||
return "OK";
|
||||
}
|
||||
}
|
||||
51
src/WebApi/Program.cs
Normal file
51
src/WebApi/Program.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using System.Reflection;
|
||||
using FluentScheduler;
|
||||
using Interface.Jobs;
|
||||
using Service.Jobs;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
var interfaces = Assembly.Load("Interface");
|
||||
var services = Assembly.Load("Service");
|
||||
|
||||
foreach (var type in interfaces.GetTypes().Where(x => x.Namespace?.StartsWith("Interface") == true))
|
||||
{
|
||||
var serviceType = services.GetTypes().FirstOrDefault(x => type.IsAssignableFrom(x));
|
||||
if (serviceType != null)
|
||||
{
|
||||
builder.Services.AddSingleton(type, serviceType);
|
||||
}
|
||||
}
|
||||
|
||||
builder.Services.AddControllers();
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
builder.Services.AddHttpContextAccessor();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
app.MapControllers();
|
||||
|
||||
#if !DEBUG
|
||||
var logTotalNotifyJobRegistry = app.Services.GetRequiredService<ILogTotalNotifyJobRegistry>();
|
||||
JobManager.Initialize((LogTotalNotifyJobRegistry)logTotalNotifyJobRegistry);
|
||||
var diskActionMonitorRegistry = app.Services.GetRequiredService<IDiskActionMonitorRegistry>();
|
||||
JobManager.Initialize((DiskActionMonitorRegistry)diskActionMonitorRegistry);
|
||||
var syncTaskRegistry = app.Services.GetRequiredService<IRSyncTaskRegistry>();
|
||||
JobManager.Initialize((RSyncTaskRegistry)syncTaskRegistry);
|
||||
var healthyTaskRegistry = app.Services.GetRequiredService<IHealthyTaskRegistry>();
|
||||
JobManager.Initialize((HealthyTaskRegistry)healthyTaskRegistry);
|
||||
var rsyncTaskRegistry = app.Services.GetRequiredService<IRSyncTaskRegistry>();
|
||||
JobManager.Initialize((RSyncTaskRegistry)rsyncTaskRegistry);
|
||||
var startupRegistry = app.Services.GetRequiredService<IStartupRegistry>();
|
||||
JobManager.Initialize((StartupRegistry)startupRegistry);
|
||||
var shutdownRegistry = app.Services.GetRequiredService<IShutdownRegistry>();
|
||||
JobManager.Initialize((ShutdownRegistry)shutdownRegistry);
|
||||
var chineseNfoRegistry = app.Services.GetRequiredService<IChineseNfoRegistry>();
|
||||
JobManager.Initialize((ChineseNfoRegistry)chineseNfoRegistry);
|
||||
#endif
|
||||
|
||||
app.Run();
|
||||
15
src/WebApi/Properties/launchSettings.json
Normal file
15
src/WebApi/Properties/launchSettings.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"applicationUrl": "http://0.0.0.0:5236",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
20
src/WebApi/WebApi.csproj
Normal file
20
src/WebApi/WebApi.csproj
Normal file
@@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0"/>
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Service\Service.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
36
src/WebApi/appsettings.Development.json
Normal file
36
src/WebApi/appsettings.Development.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"Grafana": {
|
||||
"Token": "glsa_qNYNV1vbjTXVQKIFxM43nIRGlnNE1x0x_c59dd21d",
|
||||
"LokiUrl": "http://suncheng.online:3000/api/ds/query?ds_type=loki"
|
||||
},
|
||||
"DiskActionMonitor": {
|
||||
"FilePath": "D:\\OneDrive\\Desktop\\SC\\NasRobot\\src\\WebApi\\mocks\\disk_{0}\\stat.txt",
|
||||
"Disks": [
|
||||
"sdb",
|
||||
"sdc1"
|
||||
]
|
||||
},
|
||||
"SyncTask": {
|
||||
"SourceRoot": "",
|
||||
"TargetRoot": "",
|
||||
"SyncPaths": [
|
||||
{
|
||||
"Source": "",
|
||||
"Target": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
"HealthyTasks": [
|
||||
|
||||
],
|
||||
"ChineseNfo": {
|
||||
"TvFolder": "D:\\codes\\others\\ConvertChineseNfo",
|
||||
"HttpProxy": "http://suncheng.online:47890"
|
||||
}
|
||||
}
|
||||
65
src/WebApi/appsettings.json
Normal file
65
src/WebApi/appsettings.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"Grafana": {
|
||||
"Token": "glsa_qNYNV1vbjTXVQKIFxM43nIRGlnNE1x0x_c59dd21d",
|
||||
"LokiUrl": "http://192.168.31.14:3000/api/ds/query?ds_type=loki"
|
||||
},
|
||||
"DiskActionMonitor": {
|
||||
"FilePath": "/sys/block/{0}/stat",
|
||||
"Disks": [
|
||||
"sda",
|
||||
"sdc"
|
||||
]
|
||||
},
|
||||
"SyncTask": {
|
||||
"SourceRoot": "/wd",
|
||||
"TargetRoot": "aliyun",
|
||||
"SyncPaths": [
|
||||
{
|
||||
"Source": "apps",
|
||||
"Target": "/homenas/apps"
|
||||
},
|
||||
{
|
||||
"Source": "volb/media/others",
|
||||
"Target": "/homenas/jav",
|
||||
"DeleteAfter": "true"
|
||||
},
|
||||
{
|
||||
"Source": "vola/media/other",
|
||||
"Target": "/homenas/other"
|
||||
},
|
||||
{
|
||||
"Source": "volb/media/tv",
|
||||
"Target": "/homenas/tv"
|
||||
},
|
||||
{
|
||||
"Source": "vola/media/anime",
|
||||
"Target": "/homenas/anime"
|
||||
},
|
||||
{
|
||||
"Source": "vola/media/movies",
|
||||
"Target": "/homenas/movie"
|
||||
}
|
||||
]
|
||||
},
|
||||
"HealthyTasks": [
|
||||
{
|
||||
"ContainerName": "netdata_proxy",
|
||||
"Url": "http://192.168.31.14:19999"
|
||||
},
|
||||
{
|
||||
"ContainerName": "nas_robot_proxy",
|
||||
"Url": "http://192.168.31.14:35642/swagger/index.html"
|
||||
}
|
||||
],
|
||||
"ChineseNfo": {
|
||||
"TvFolder": "/data/tv",
|
||||
"HttpProxy": "http://192.168.31.14:47890"
|
||||
}
|
||||
}
|
||||
1
src/WebApi/mocks/disk_sdb/stat.txt
Normal file
1
src/WebApi/mocks/disk_sdb/stat.txt
Normal file
@@ -0,0 +1 @@
|
||||
219020 20383 38271508 2978589 12631 1972 20214944 78461 0 2973824 3057050 0 0 0 0 0 0
|
||||
1
src/WebApi/mocks/disk_sdc1/stat.txt
Normal file
1
src/WebApi/mocks/disk_sdc1/stat.txt
Normal file
@@ -0,0 +1 @@
|
||||
219020 20383 38271508 2978589 12631 1972 20214944 78461 0 2973824 3057050 0 0 0 0 0 0
|
||||
Reference in New Issue
Block a user