wabbajack/Wabbajack.BuildServer/Controllers/Heartbeat.cs

90 lines
2.5 KiB
C#
Raw Normal View History

2020-01-10 02:06:11 +00:00
using System;
using System.Collections.Generic;
2020-01-10 02:06:11 +00:00
using System.Linq;
using System.Text;
2020-01-10 02:06:11 +00:00
using System.Threading.Tasks;
2020-03-30 20:53:59 +00:00
using Alphaleonis.Win32.Filesystem;
2020-01-16 05:06:25 +00:00
using Microsoft.AspNetCore.Authorization;
2020-01-10 02:06:11 +00:00
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using MongoDB.Bson;
2020-03-30 20:53:59 +00:00
using MongoDB.Driver;
using Wabbajack.BuildServer.Model.Models;
2020-01-10 02:06:11 +00:00
using Wabbajack.BuildServer.Models;
using Wabbajack.Common;
using Wabbajack.Common.StatusFeed;
2020-01-10 02:06:11 +00:00
namespace Wabbajack.BuildServer.Controllers
{
[Route("/heartbeat")]
public class Heartbeat : AControllerBase<Heartbeat>
{
static Heartbeat()
{
_startTime = DateTime.Now;
}
private static DateTime _startTime;
public Heartbeat(ILogger<Heartbeat> logger, DBContext db, SqlService sql) : base(logger, db, sql)
2020-01-10 02:06:11 +00:00
{
}
private const int MAX_LOG_SIZE = 128;
private static List<string> Log = new List<string>();
public static void AddToLog(IStatusMessage msg)
{
lock (Log)
{
Log.Add(msg.ToString());
if (Log.Count > MAX_LOG_SIZE)
Log.RemoveAt(0);
}
}
2020-01-10 02:06:11 +00:00
[HttpGet]
public async Task<TimeSpan> GetHeartbeat()
{
return DateTime.Now - _startTime;
}
2020-01-16 05:06:25 +00:00
[HttpGet("only-authenticated")]
[Authorize]
public IActionResult OnlyAuthenticated()
{
var message = $"Hello from {nameof(OnlyAuthenticated)}";
return new ObjectResult(message);
}
[HttpGet("logs")]
[Authorize]
public IActionResult GetLogs()
{
string[] lst;
lock (Log)
{
lst = Log.ToArray();
}
return Ok(string.Join("\n", lst));
}
2020-03-30 20:53:59 +00:00
[HttpPost("export_inis")]
[Authorize]
public async Task<IActionResult> ExportInis()
{
if (!Directory.Exists("exported_inis"))
Directory.CreateDirectory("exported_inis");
var loaded = 0;
foreach (var ini in await Db.DownloadStates.AsQueryable().ToListAsync())
{
2020-03-30 22:12:12 +00:00
var file = Path.Combine("exported_inis", ini.Hash.FromBase64().ToHex() + "_" + ini.Key.StringSHA256Hex() + ".ini");
2020-03-30 20:53:59 +00:00
Alphaleonis.Win32.Filesystem.File.WriteAllLines(file, ini.State.GetMetaIni());
loaded += 1;
}
return Ok(loaded);
}
2020-01-10 02:06:11 +00:00
}
}