Added allowlist and denylist, fixed patchy configuration with proper options models, fixed api middleware authorization issues
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
||||
<PackageReference Include="System.Configuration.ConfigurationManager" Version="9.0.3" />
|
||||
<PackageReference Include="Python" Version="3.13.3" />
|
||||
<PackageReference Include="Pythonnet" Version="3.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
9
src/Indexer/Models/OptionModels.cs
Normal file
9
src/Indexer/Models/OptionModels.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Shared.Models;
|
||||
namespace Indexer.Models;
|
||||
|
||||
public class IndexerOptions : ApiKeyOptions
|
||||
{
|
||||
public required WorkerConfig[] Workers { get; set; }
|
||||
public required ServerOptions Server { get; set;}
|
||||
public required string PythonRuntime { get; set; } = "libpython3.13.so";
|
||||
}
|
||||
@@ -15,11 +15,11 @@ public class ScriptToolSet
|
||||
public Client.Client Client;
|
||||
public LoggerWrapper Logger;
|
||||
public ICallbackInfos? CallbackInfos;
|
||||
public IConfiguration Configuration;
|
||||
public IndexerOptions Configuration;
|
||||
public CancellationToken CancellationToken;
|
||||
public string Name;
|
||||
|
||||
public ScriptToolSet(string filePath, Client.Client client, ILogger<WorkerManager> logger, IConfiguration configuration, CancellationToken cancellationToken, string name)
|
||||
public ScriptToolSet(string filePath, Client.Client client, ILogger<WorkerManager> logger, IndexerOptions configuration, CancellationToken cancellationToken, string name)
|
||||
{
|
||||
Configuration = configuration;
|
||||
Name = name;
|
||||
|
||||
@@ -6,6 +6,8 @@ using ElmahCore.Mvc;
|
||||
using ElmahCore.Mvc.Logger;
|
||||
using Serilog;
|
||||
using Quartz;
|
||||
using System.Configuration;
|
||||
using Shared.Models;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
@@ -21,6 +23,12 @@ Log.Logger = new LoggerConfiguration()
|
||||
builder.Logging.AddSerilog();
|
||||
builder.Services.AddHttpContextAccessor();
|
||||
builder.Services.AddSingleton<IConfigurationRoot>(builder.Configuration);
|
||||
|
||||
IConfigurationSection configurationSection = builder.Configuration.GetSection("Indexer");
|
||||
IndexerOptions configuration = configurationSection.Get<IndexerOptions>() ?? throw new ConfigurationErrorsException("Unable to start server due to an invalid configration");
|
||||
builder.Services.Configure<IndexerOptions>(configurationSection);
|
||||
builder.Services.Configure<ServerOptions>(configurationSection.GetSection("Server"));
|
||||
builder.Services.Configure<ApiKeyOptions>(configurationSection);
|
||||
builder.Services.AddSingleton<Client.Client>();
|
||||
builder.Services.AddSingleton<WorkerManager>();
|
||||
builder.Services.AddHostedService<IndexerService>();
|
||||
|
||||
@@ -15,11 +15,8 @@ public class PythonScriptable : IScriptContainer
|
||||
public ILogger _logger { get; set; }
|
||||
public PythonScriptable(ScriptToolSet toolSet, ILogger logger)
|
||||
{
|
||||
string? runtime = toolSet.Configuration.GetValue<string>("EmbeddingsearchIndexer:PythonRuntime");
|
||||
if (runtime is not null)
|
||||
{
|
||||
Runtime.PythonDLL ??= runtime;
|
||||
}
|
||||
string runtime = toolSet.Configuration.PythonRuntime;
|
||||
Runtime.PythonDLL ??= runtime;
|
||||
_logger = logger;
|
||||
SourceLoaded = false;
|
||||
if (!PythonEngine.IsInitialized)
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
using Indexer.Exceptions;
|
||||
using Indexer.Models;
|
||||
using Indexer.ScriptContainers;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
public class WorkerManager
|
||||
{
|
||||
public Dictionary<string, Worker> Workers;
|
||||
public List<Type> types;
|
||||
private readonly ILogger<WorkerManager> _logger;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly IndexerOptions _configuration;
|
||||
private readonly Client.Client client;
|
||||
|
||||
public WorkerManager(ILogger<WorkerManager> logger, IConfiguration configuration, Client.Client client)
|
||||
public WorkerManager(ILogger<WorkerManager> logger, IOptions<IndexerOptions> configuration, Client.Client client)
|
||||
{
|
||||
Workers = [];
|
||||
types = [typeof(PythonScriptable), typeof(CSharpScriptable)];
|
||||
_logger = logger;
|
||||
_configuration = configuration;
|
||||
_configuration = configuration.Value;
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
@@ -23,27 +24,12 @@ public class WorkerManager
|
||||
{
|
||||
_logger.LogInformation("Initializing workers");
|
||||
// Load and configure all workers
|
||||
var sectionMain = _configuration.GetSection("EmbeddingsearchIndexer");
|
||||
if (!sectionMain.Exists())
|
||||
{
|
||||
_logger.LogCritical("Unable to load section \"EmbeddingsearchIndexer\"");
|
||||
throw new IndexerConfigurationException("Unable to load section \"EmbeddingsearchIndexer\"");
|
||||
}
|
||||
|
||||
WorkerCollectionConfig? sectionWorker = (WorkerCollectionConfig?)sectionMain.Get(typeof(WorkerCollectionConfig)); //GetValue<WorkerCollectionConfig>("Worker");
|
||||
if (sectionWorker is not null)
|
||||
foreach (WorkerConfig workerConfig in _configuration.Workers)
|
||||
{
|
||||
foreach (WorkerConfig workerConfig in sectionWorker.Worker)
|
||||
{
|
||||
CancellationTokenSource cancellationTokenSource = new();
|
||||
ScriptToolSet toolSet = new(workerConfig.Script, client, _logger, _configuration, cancellationTokenSource.Token, workerConfig.Name);
|
||||
InitializeWorker(toolSet, workerConfig, cancellationTokenSource);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogCritical("Unable to load section \"Worker\"");
|
||||
throw new IndexerConfigurationException("Unable to load section \"Worker\"");
|
||||
CancellationTokenSource cancellationTokenSource = new();
|
||||
ScriptToolSet toolSet = new(workerConfig.Script, client, _logger, _configuration, cancellationTokenSource.Token, workerConfig.Name);
|
||||
InitializeWorker(toolSet, workerConfig, cancellationTokenSource);
|
||||
}
|
||||
_logger.LogInformation("Initialized workers");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user