Naming fix
This commit is contained in:
@@ -15,17 +15,20 @@ namespace DiunaBI.Core.Services;
|
|||||||
|
|
||||||
public class JobQueueProcessor : BackgroundService
|
public class JobQueueProcessor : BackgroundService
|
||||||
{
|
{
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceScopeFactory _scopeFactory; // ✅ GOOD - używa scope factory
|
||||||
private readonly ILogger<JobQueueProcessor> _logger;
|
private readonly ILogger<JobQueueProcessor> _logger;
|
||||||
private readonly ManualResetEventSlim _processSignal;
|
private readonly ManualResetEventSlim _processSignal = new(false);
|
||||||
|
|
||||||
|
// ❌ USUŃ DIRECT INJECTION scoped services:
|
||||||
|
// private readonly IJobQueueService _queueService;
|
||||||
|
// private readonly AppDbContext _db;
|
||||||
|
|
||||||
public JobQueueProcessor(
|
public JobQueueProcessor(
|
||||||
IServiceProvider serviceProvider,
|
IServiceScopeFactory scopeFactory, // ✅ GOOD - inject scope factory
|
||||||
ILogger<JobQueueProcessor> logger)
|
ILogger<JobQueueProcessor> logger)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
_scopeFactory = scopeFactory;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_processSignal = new ManualResetEventSlim(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||||
@@ -36,19 +39,18 @@ public class JobQueueProcessor : BackgroundService
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Wait for manual trigger or cancellation
|
// Wait for manual trigger
|
||||||
_processSignal.Wait(stoppingToken);
|
_processSignal.Wait(stoppingToken);
|
||||||
_processSignal.Reset();
|
_processSignal.Reset();
|
||||||
|
|
||||||
_logger.LogInformation("JobQueueProcessor: Processing triggered manually");
|
_logger.LogInformation("JobQueueProcessor: Processing triggered");
|
||||||
|
|
||||||
using var scope = _serviceProvider.CreateScope();
|
// ✅ GOOD - create scope for each processing cycle
|
||||||
|
using var scope = _scopeFactory.CreateScope();
|
||||||
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
||||||
|
var pluginManager = scope.ServiceProvider.GetRequiredService<PluginManager>();
|
||||||
|
|
||||||
// Process all jobs until queue is empty
|
await ProcessQueueAsync(queueService, pluginManager, stoppingToken);
|
||||||
await ProcessAllJobs(queueService, stoppingToken);
|
|
||||||
|
|
||||||
_logger.LogInformation("JobQueueProcessor: Manual processing completed");
|
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
@@ -57,8 +59,8 @@ public class JobQueueProcessor : BackgroundService
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "JobQueueProcessor: Unexpected error in queue processor");
|
_logger.LogError(ex, "JobQueueProcessor: Error in processing loop");
|
||||||
await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
|
await Task.Delay(5000, stoppingToken); // Wait before retry
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +73,7 @@ public class JobQueueProcessor : BackgroundService
|
|||||||
_processSignal.Set();
|
_processSignal.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ProcessAllJobs(IJobQueueService queueService, CancellationToken cancellationToken)
|
private async Task ProcessQueueAsync(IJobQueueService queueService, PluginManager pluginManager, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var startTime = DateTime.UtcNow;
|
var startTime = DateTime.UtcNow;
|
||||||
var initialQueueSize = await queueService.GetQueueCountAsync();
|
var initialQueueSize = await queueService.GetQueueCountAsync();
|
||||||
@@ -131,7 +133,8 @@ public class JobQueueProcessor : BackgroundService
|
|||||||
_logger.LogInformation("JobQueueProcessor: Processing {JobType} job {JobId} for layer {LayerName} (attempt {RetryCount}/{MaxRetries}, priority {Priority})",
|
_logger.LogInformation("JobQueueProcessor: Processing {JobType} job {JobId} for layer {LayerName} (attempt {RetryCount}/{MaxRetries}, priority {Priority})",
|
||||||
job.JobType, job.Id, job.LayerName, job.RetryCount + 1, job.MaxRetries, job.Priority);
|
job.JobType, job.Id, job.LayerName, job.RetryCount + 1, job.MaxRetries, job.Priority);
|
||||||
|
|
||||||
using var scope = _serviceProvider.CreateScope();
|
// POPRAWKA: używaj _scopeFactory zamiast _serviceProvider
|
||||||
|
using var scope = _scopeFactory.CreateScope();
|
||||||
var dbContext = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
var dbContext = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
||||||
var pluginManager = scope.ServiceProvider.GetRequiredService<PluginManager>();
|
var pluginManager = scope.ServiceProvider.GetRequiredService<PluginManager>();
|
||||||
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
||||||
@@ -199,7 +202,8 @@ public class JobQueueProcessor : BackgroundService
|
|||||||
_logger.LogError(ex, "JobQueueProcessor: Error processing {JobType} job {JobId} for layer {LayerName}",
|
_logger.LogError(ex, "JobQueueProcessor: Error processing {JobType} job {JobId} for layer {LayerName}",
|
||||||
job.JobType, job.Id, job.LayerName);
|
job.JobType, job.Id, job.LayerName);
|
||||||
|
|
||||||
using var scope = _serviceProvider.CreateScope();
|
// POPRAWKA: tutaj też używaj _scopeFactory
|
||||||
|
using var scope = _scopeFactory.CreateScope();
|
||||||
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
||||||
|
|
||||||
// Check if it's a retriable error
|
// Check if it's a retriable error
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ using Microsoft.Extensions.Logging;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T1R1Processor : MorskaBaseProcessor
|
public class MorskaT1R1Processor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T1.R1";
|
public override string ProcessorType => "Morska.Process.T1.R1";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
||||||
private readonly ILogger<T1R1Processor> _logger;
|
private readonly ILogger<MorskaT1R1Processor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
@@ -24,10 +24,10 @@ public class T1R1Processor : MorskaBaseProcessor
|
|||||||
private List<Record>? DynamicCodes { get; set; }
|
private List<Record>? DynamicCodes { get; set; }
|
||||||
private string? GoogleSheetName { get; set; }
|
private string? GoogleSheetName { get; set; }
|
||||||
|
|
||||||
public T1R1Processor(
|
public MorskaT1R1Processor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||||
ILogger<T1R1Processor> logger)
|
ILogger<MorskaT1R1Processor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_googleSheetValues = googleSheetValues;
|
_googleSheetValues = googleSheetValues;
|
||||||
@@ -10,22 +10,22 @@ using Microsoft.Extensions.Logging;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T1R3Processor : MorskaBaseProcessor
|
public class MorskaT1R3Processor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T1.R3";
|
public override string ProcessorType => "Morska.Process.T1.R3";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
||||||
private readonly ILogger<T1R3Processor> _logger;
|
private readonly ILogger<MorskaT1R3Processor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
private string? Source { get; set; }
|
private string? Source { get; set; }
|
||||||
|
|
||||||
public T1R3Processor(
|
public MorskaT1R3Processor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||||
ILogger<T1R3Processor> logger)
|
ILogger<MorskaT1R3Processor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_googleSheetValues = googleSheetValues;
|
_googleSheetValues = googleSheetValues;
|
||||||
@@ -6,12 +6,12 @@ using Microsoft.Extensions.Logging;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T3MultiSourceCopySelectedCodesProcessor : MorskaBaseProcessor
|
public class MorskaT3MultiSourceCopySelectedCodesProcessor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "T3.MultiSourceCopySelectedCodes";
|
public override string ProcessorType => "T3.MultiSourceCopySelectedCodes";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly ILogger<T3MultiSourceCopySelectedCodesProcessor> _logger;
|
private readonly ILogger<MorskaT3MultiSourceCopySelectedCodesProcessor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
@@ -20,9 +20,9 @@ public class T3MultiSourceCopySelectedCodesProcessor : MorskaBaseProcessor
|
|||||||
private string? Codes { get; set; }
|
private string? Codes { get; set; }
|
||||||
private List<int>? CodesList { get; set; }
|
private List<int>? CodesList { get; set; }
|
||||||
|
|
||||||
public T3MultiSourceCopySelectedCodesProcessor(
|
public MorskaT3MultiSourceCopySelectedCodesProcessor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
ILogger<T3MultiSourceCopySelectedCodesProcessor> logger)
|
ILogger<MorskaT3MultiSourceCopySelectedCodesProcessor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@@ -6,19 +6,19 @@ using Microsoft.Extensions.Logging;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T3MultiSourceCopySelectedCodesYearSummaryProcessor : MorskaBaseProcessor
|
public class MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "T3.MultiSourceCopySelectedCodesYearSummary";
|
public override string ProcessorType => "T3.MultiSourceCopySelectedCodesYearSummary";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly ILogger<T3MultiSourceCopySelectedCodesYearSummaryProcessor> _logger;
|
private readonly ILogger<MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
|
|
||||||
public T3MultiSourceCopySelectedCodesYearSummaryProcessor(
|
public MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
ILogger<T3MultiSourceCopySelectedCodesYearSummaryProcessor> logger)
|
ILogger<MorskaT3MultiSourceCopySelectedCodesYearSummaryProcessor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@@ -7,12 +7,12 @@ using DiunaBI.Core.Services.Calculations;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T3MultiSourceSummaryProcessor : MorskaBaseProcessor
|
public class MorskaT3MultiSourceSummaryProcessor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T3.MultiSourceSummary";
|
public override string ProcessorType => "Morska.Process.T3.MultiSourceSummary";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly ILogger<T3MultiSourceSummaryProcessor> _logger;
|
private readonly ILogger<MorskaT3MultiSourceSummaryProcessor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
@@ -20,9 +20,9 @@ public class T3MultiSourceSummaryProcessor : MorskaBaseProcessor
|
|||||||
private List<Record>? Sources { get; set; }
|
private List<Record>? Sources { get; set; }
|
||||||
private List<Record>? DynamicCodes { get; set; }
|
private List<Record>? DynamicCodes { get; set; }
|
||||||
|
|
||||||
public T3MultiSourceSummaryProcessor(
|
public MorskaT3MultiSourceSummaryProcessor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
ILogger<T3MultiSourceSummaryProcessor> logger)
|
ILogger<MorskaT3MultiSourceSummaryProcessor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@@ -7,21 +7,21 @@ using DiunaBI.Core.Services.Calculations;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T3MultiSourceYearSummaryProcessor : MorskaBaseProcessor
|
public class MorskaT3MultiSourceYearSummaryProcessor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T3.MultiSourceYearSummary";
|
public override string ProcessorType => "Morska.Process.T3.MultiSourceYearSummary";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly ILogger<T3MultiSourceYearSummaryProcessor> _logger;
|
private readonly ILogger<MorskaT3MultiSourceYearSummaryProcessor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
private List<Record>? Sources { get; set; }
|
private List<Record>? Sources { get; set; }
|
||||||
private List<Record>? DynamicCodes { get; set; }
|
private List<Record>? DynamicCodes { get; set; }
|
||||||
|
|
||||||
public T3MultiSourceYearSummaryProcessor(
|
public MorskaT3MultiSourceYearSummaryProcessor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
ILogger<T3MultiSourceYearSummaryProcessor> logger)
|
ILogger<MorskaT3MultiSourceYearSummaryProcessor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@@ -7,22 +7,22 @@ using DiunaBI.Core.Services;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T3SourceYearSummaryProcessor : MorskaBaseProcessor
|
public class MorskaT3SourceYearSummaryProcessor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T3.SourceYearSummary";
|
public override string ProcessorType => "Morska.Process.T3.SourceYearSummary";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
||||||
private readonly ILogger<T3SourceYearSummaryProcessor> _logger;
|
private readonly ILogger<MorskaT3SourceYearSummaryProcessor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
private string? Source { get; set; }
|
private string? Source { get; set; }
|
||||||
|
|
||||||
public T3SourceYearSummaryProcessor(
|
public MorskaT3SourceYearSummaryProcessor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||||
ILogger<T3SourceYearSummaryProcessor> logger)
|
ILogger<MorskaT3SourceYearSummaryProcessor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_googleSheetValues = googleSheetValues;
|
_googleSheetValues = googleSheetValues;
|
||||||
@@ -9,13 +9,13 @@ using DiunaBI.Core.Services;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T4R2Processor : MorskaBaseProcessor
|
public class MorskaT4R2Processor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T4.R2";
|
public override string ProcessorType => "Morska.Process.T4.R2";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
||||||
private readonly ILogger<T4R2Processor> _logger;
|
private readonly ILogger<MorskaT4R2Processor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
@@ -24,10 +24,10 @@ public class T4R2Processor : MorskaBaseProcessor
|
|||||||
private string? ReportSheetName { get; set; }
|
private string? ReportSheetName { get; set; }
|
||||||
private string? InvoicesSheetName { get; set; }
|
private string? InvoicesSheetName { get; set; }
|
||||||
|
|
||||||
public T4R2Processor(
|
public MorskaT4R2Processor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||||
ILogger<T4R2Processor> logger)
|
ILogger<MorskaT4R2Processor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_googleSheetValues = googleSheetValues;
|
_googleSheetValues = googleSheetValues;
|
||||||
@@ -6,13 +6,13 @@ using DiunaBI.Core.Database.Context;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T4SingleSourceProcessor : MorskaBaseProcessor
|
public class MorskaT4SingleSourceProcessor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T4.SingleSource";
|
public override string ProcessorType => "Morska.Process.T4.SingleSource";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
private readonly SpreadsheetsResource.ValuesResource _googleSheetValues;
|
||||||
private readonly ILogger<T4SingleSourceProcessor> _logger;
|
private readonly ILogger<MorskaT4SingleSourceProcessor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
@@ -20,10 +20,10 @@ public class T4SingleSourceProcessor : MorskaBaseProcessor
|
|||||||
private string? SourceLayer { get; set; }
|
private string? SourceLayer { get; set; }
|
||||||
private string? Source { get; set; }
|
private string? Source { get; set; }
|
||||||
|
|
||||||
public T4SingleSourceProcessor(
|
public MorskaT4SingleSourceProcessor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
SpreadsheetsResource.ValuesResource googleSheetValues,
|
SpreadsheetsResource.ValuesResource googleSheetValues,
|
||||||
ILogger<T4SingleSourceProcessor> logger)
|
ILogger<MorskaT4SingleSourceProcessor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_googleSheetValues = googleSheetValues;
|
_googleSheetValues = googleSheetValues;
|
||||||
@@ -6,12 +6,12 @@ using Microsoft.Extensions.Logging;
|
|||||||
|
|
||||||
namespace DiunaBI.Plugins.Morska.Processors;
|
namespace DiunaBI.Plugins.Morska.Processors;
|
||||||
|
|
||||||
public class T5LastValuesProcessor : MorskaBaseProcessor
|
public class MorskaT5LastValuesProcessor : MorskaBaseProcessor
|
||||||
{
|
{
|
||||||
public override string ProcessorType => "Morska.Process.T5.LastValues";
|
public override string ProcessorType => "Morska.Process.T5.LastValues";
|
||||||
|
|
||||||
private readonly AppDbContext _db;
|
private readonly AppDbContext _db;
|
||||||
private readonly ILogger<T5LastValuesProcessor> _logger;
|
private readonly ILogger<MorskaT5LastValuesProcessor> _logger;
|
||||||
|
|
||||||
// Configuration properties loaded from layer records
|
// Configuration properties loaded from layer records
|
||||||
private int Year { get; set; }
|
private int Year { get; set; }
|
||||||
@@ -19,9 +19,9 @@ public class T5LastValuesProcessor : MorskaBaseProcessor
|
|||||||
private string? SourceLayer { get; set; }
|
private string? SourceLayer { get; set; }
|
||||||
private string? Source { get; set; }
|
private string? Source { get; set; }
|
||||||
|
|
||||||
public T5LastValuesProcessor(
|
public MorskaT5LastValuesProcessor(
|
||||||
AppDbContext db,
|
AppDbContext db,
|
||||||
ILogger<T5LastValuesProcessor> logger)
|
ILogger<MorskaT5LastValuesProcessor> logger)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@@ -829,7 +829,7 @@ public class LayersController : Controller
|
|||||||
x.Records!.Any(y => y.Code == "Type" && y.Desc1 == "ImportWorker") &&
|
x.Records!.Any(y => y.Code == "Type" && y.Desc1 == "ImportWorker") &&
|
||||||
x.Records!.Any(y => y.Code == "IsEnabled" && y.Desc1 == "True") &&
|
x.Records!.Any(y => y.Code == "IsEnabled" && y.Desc1 == "True") &&
|
||||||
!x.IsDeleted && !x.IsCancelled
|
!x.IsDeleted && !x.IsCancelled
|
||||||
);
|
).Take(5);
|
||||||
|
|
||||||
// If specific layerId is provided, filter to that layer only
|
// If specific layerId is provided, filter to that layer only
|
||||||
if (layerId.HasValue)
|
if (layerId.HasValue)
|
||||||
@@ -935,7 +935,7 @@ public class LayersController : Controller
|
|||||||
x.Records!.Any(y => y.Code == "Type" && y.Desc1 == "ProcessWorker") &&
|
x.Records!.Any(y => y.Code == "Type" && y.Desc1 == "ProcessWorker") &&
|
||||||
x.Records!.Any(y => y.Code == "IsEnabled" && y.Desc1 == "True") &&
|
x.Records!.Any(y => y.Code == "IsEnabled" && y.Desc1 == "True") &&
|
||||||
!x.IsDeleted && !x.IsCancelled
|
!x.IsDeleted && !x.IsCancelled
|
||||||
);
|
).Take(5);
|
||||||
|
|
||||||
// If specific layerId is provided, filter to that layer only
|
// If specific layerId is provided, filter to that layer only
|
||||||
if (layerId.HasValue)
|
if (layerId.HasValue)
|
||||||
@@ -966,6 +966,7 @@ public class LayersController : Controller
|
|||||||
|
|
||||||
foreach (var processWorker in processWorkerLayers)
|
foreach (var processWorker in processWorkerLayers)
|
||||||
{
|
{
|
||||||
|
// POPRAWIONE: Używaj Plugin zamiast ProcessorType
|
||||||
var pluginName = processWorker.Records!.FirstOrDefault(x => x.Code == "Plugin")?.Desc1;
|
var pluginName = processWorker.Records!.FirstOrDefault(x => x.Code == "Plugin")?.Desc1;
|
||||||
if (string.IsNullOrEmpty(pluginName))
|
if (string.IsNullOrEmpty(pluginName))
|
||||||
{
|
{
|
||||||
@@ -974,20 +975,12 @@ public class LayersController : Controller
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var processorType = processWorker.Records!.FirstOrDefault(x => x.Code == "ProcessorType")?.Desc1;
|
// POPRAWIONE: Sprawdź czy processor istnieje przez pluginName
|
||||||
if (string.IsNullOrEmpty(processorType))
|
var processor = _pluginManager.GetProcessor(pluginName);
|
||||||
{
|
|
||||||
_logger.LogWarning("EnqueueProcessWorkers: No processor type found for layer {LayerName} ({LayerId}), skipping",
|
|
||||||
processWorker.Name, processWorker.Id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if processor exists
|
|
||||||
var processor = _pluginManager.GetProcessor(processorType);
|
|
||||||
if (processor == null)
|
if (processor == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("EnqueueProcessWorkers: Processor {ProcessorType} not found for layer {LayerName} ({LayerId}), skipping",
|
_logger.LogWarning("EnqueueProcessWorkers: Processor {PluginName} not found for layer {LayerName} ({LayerId}), skipping",
|
||||||
processorType, processWorker.Name, processWorker.Id);
|
pluginName, processWorker.Name, processWorker.Id);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1003,7 +996,7 @@ public class LayersController : Controller
|
|||||||
{
|
{
|
||||||
LayerId = processWorker.Id,
|
LayerId = processWorker.Id,
|
||||||
LayerName = processWorker.Name ?? "Unknown",
|
LayerName = processWorker.Name ?? "Unknown",
|
||||||
PluginName = processorType, // Use processorType as PluginName for process jobs
|
PluginName = pluginName, // POPRAWIONE: Używaj pluginName bezpośrednio
|
||||||
JobType = JobType.Process,
|
JobType = JobType.Process,
|
||||||
Priority = priority,
|
Priority = priority,
|
||||||
MaxRetries = 3,
|
MaxRetries = 3,
|
||||||
@@ -1014,8 +1007,8 @@ public class LayersController : Controller
|
|||||||
await _queueService.EnqueueJobAsync(job);
|
await _queueService.EnqueueJobAsync(job);
|
||||||
queuedCount++;
|
queuedCount++;
|
||||||
|
|
||||||
_logger.LogDebug("EnqueueProcessWorkers: Queued process job for layer {LayerName} ({LayerId}) with processor {ProcessorType}, priority {Priority}",
|
_logger.LogDebug("EnqueueProcessWorkers: Queued process job for layer {LayerName} ({LayerId}) with plugin {PluginName}, priority {Priority}",
|
||||||
processWorker.Name, processWorker.Id, processorType, priority);
|
processWorker.Name, processWorker.Id, pluginName, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
var totalQueueSize = await _queueService.GetQueueCountAsync();
|
var totalQueueSize = await _queueService.GetQueueCountAsync();
|
||||||
@@ -1065,8 +1058,16 @@ public class LayersController : Controller
|
|||||||
|
|
||||||
_logger.LogInformation("RunQueueJobs: Triggering queue processing for {QueueSize} jobs", queueSize);
|
_logger.LogInformation("RunQueueJobs: Triggering queue processing for {QueueSize} jobs", queueSize);
|
||||||
|
|
||||||
// PRZYWRÓĆ SINGLETON ACCESS:
|
// ZMIEŃ NA DOSTĘP PRZEZ IHostedService:
|
||||||
var queueProcessor = HttpContext.RequestServices.GetRequiredService<JobQueueProcessor>();
|
var hostedServices = HttpContext.RequestServices.GetServices<IHostedService>();
|
||||||
|
var queueProcessor = hostedServices.OfType<JobQueueProcessor>().FirstOrDefault();
|
||||||
|
|
||||||
|
if (queueProcessor == null)
|
||||||
|
{
|
||||||
|
_logger.LogError("RunQueueJobs: JobQueueProcessor not found");
|
||||||
|
return BadRequest("JobQueueProcessor not found");
|
||||||
|
}
|
||||||
|
|
||||||
queueProcessor.TriggerProcessing();
|
queueProcessor.TriggerProcessing();
|
||||||
|
|
||||||
return Ok(new
|
return Ok(new
|
||||||
|
|||||||
@@ -71,9 +71,10 @@ builder.Services.AddAuthentication(options =>
|
|||||||
|
|
||||||
// Queue services
|
// Queue services
|
||||||
builder.Services.AddScoped<IJobQueueService, JobQueueService>();
|
builder.Services.AddScoped<IJobQueueService, JobQueueService>();
|
||||||
builder.Services.AddSingleton<JobQueueProcessor>();
|
builder.Services.AddHostedService<JobQueueProcessor>(); // ✅ GOOD - with proper scope factory
|
||||||
|
|
||||||
// Google Sheets dependencies
|
// Google Sheets dependencies
|
||||||
|
Console.WriteLine("Adding Google Sheets dependencies...");
|
||||||
builder.Services.AddSingleton<GoogleSheetsHelper>();
|
builder.Services.AddSingleton<GoogleSheetsHelper>();
|
||||||
builder.Services.AddSingleton<GoogleDriveHelper>();
|
builder.Services.AddSingleton<GoogleDriveHelper>();
|
||||||
builder.Services.AddSingleton<SpreadsheetsResource.ValuesResource>(provider =>
|
builder.Services.AddSingleton<SpreadsheetsResource.ValuesResource>(provider =>
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
###
|
###
|
||||||
GET http://localhost:5400/api/Layers/AddPriorityRecords
|
GET http://localhost:5400/api/Layers/RunQueueJobs/10763478CB738D4ecb2h76g803478CB738D4e
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user