fix: add admin collection start route
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
@page
|
||||
@model QuantEngine.Web.Pages.Admin.Collection.StartModel
|
||||
@{
|
||||
ViewData["Title"] = "수집 시작";
|
||||
}
|
||||
|
||||
<div class="page-header d-print-none">
|
||||
<div class="row align-items-center">
|
||||
<div class="col">
|
||||
<h2 class="page-title">데이터 수집 시작</h2>
|
||||
<div class="text-muted">Hangfire 백그라운드 작업으로 수집을 시작합니다.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
@if (!string.IsNullOrWhiteSpace(Model.ErrorMessage))
|
||||
{
|
||||
<div class="alert alert-danger">@Model.ErrorMessage</div>
|
||||
<a href="/Admin/Collection" class="btn btn-secondary">목록으로</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="alert alert-success">수집 작업이 등록되었습니다. 실행 ID: <code>@Model.RunId</code></div>
|
||||
<a href="/Admin/Collection/Detail?runId=@Uri.EscapeDataString(Model.RunId!)" class="btn btn-primary">실행 상세 보기</a>
|
||||
<a href="/Admin/Collection" class="btn btn-secondary">목록으로</a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,48 @@
|
||||
using Hangfire;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using QuantEngine.Application.Interfaces;
|
||||
using QuantEngine.Web.Services;
|
||||
|
||||
namespace QuantEngine.Web.Pages.Admin.Collection;
|
||||
|
||||
[Authorize(AuthenticationSchemes = AdminAuthDefaults.Scheme)]
|
||||
public class StartModel : PageModel
|
||||
{
|
||||
private readonly IBackgroundJobClient _jobClient;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly ILogger<StartModel> _logger;
|
||||
|
||||
public string? RunId { get; private set; }
|
||||
public string? ErrorMessage { get; private set; }
|
||||
|
||||
public StartModel(
|
||||
IBackgroundJobClient jobClient,
|
||||
IConfiguration configuration,
|
||||
ILogger<StartModel> logger)
|
||||
{
|
||||
_jobClient = jobClient;
|
||||
_configuration = configuration;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void OnGet()
|
||||
{
|
||||
try
|
||||
{
|
||||
RunId = $"admin-{DateTime.Now:yyyyMMdd-HHmmss}";
|
||||
var accountMode = _configuration["Kis:AccountMode"] ?? "mock";
|
||||
var tickers = new[] { "005930", "000660", "051910", "005380", "010140", "005490" }.ToList();
|
||||
|
||||
_jobClient.Enqueue<ICollectionOrchestrator>(orchestrator =>
|
||||
orchestrator.RunCollectionAsync(RunId!, accountMode, tickers));
|
||||
|
||||
_logger.LogInformation("Collection run {RunId} enqueued from admin page", RunId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Failed to enqueue collection run from admin page");
|
||||
ErrorMessage = "수집 작업을 등록하지 못했습니다. Hangfire 상태와 서버 로그를 확인하세요.";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user