Renamed IScriptable to IScriptContainer, added Stop() function to Calls

This commit is contained in:
2025-08-31 03:02:43 +02:00
parent 92bf48d06a
commit 0647f10ca1
7 changed files with 29 additions and 8 deletions

View File

@@ -38,6 +38,11 @@ public class RunOnceCall : ICall
public void Dispose() {}
public void Stop()
{
Worker.Scriptable.Stop();
}
private async void IndexAsync()
{
try
@@ -73,7 +78,7 @@ public class RunOnceCall : ICall
public class IntervalCall : ICall
{
public System.Timers.Timer Timer;
public IScriptable Scriptable;
public IScriptContainer Scriptable;
public ILogger _logger;
public bool IsEnabled { get; set; }
public bool IsExecuting { get; set; }
@@ -145,6 +150,11 @@ public class IntervalCall : ICall
Timer.Dispose();
}
public void Stop()
{
Scriptable.Stop();
}
public HealthCheckResult HealthCheck()
{
if (!Scriptable.UpdateInfo.Successful)
@@ -241,6 +251,11 @@ public class ScheduleCall : ICall
Scheduler.DeleteJob(JobKey);
}
public void Stop()
{
Worker.Scriptable.Stop();
}
private async Task CreateJob()
{
if (CallConfig.Schedule is null)
@@ -341,6 +356,11 @@ public class FileUpdateCall : ICall
_watcher.Dispose();
}
public void Stop()
{
Worker.Scriptable.Stop();
}
private void OnFileChanged(object sender, FileSystemEventArgs e)
{
if (!IsEnabled)

View File

@@ -19,6 +19,7 @@ public interface ICall
public void Enable();
public void Disable();
public void Dispose();
public void Stop();
public string Name { get; set; }
public bool IsEnabled { get; set; }
public bool IsExecuting { get; set; }

View File

@@ -1,6 +1,6 @@
namespace Indexer.Models;
public interface IScriptable
public interface IScriptContainer
{
ScriptToolSet ToolSet { get; set; }
ScriptUpdateInfo UpdateInfo { get; set; }

View File

@@ -5,7 +5,7 @@ using Indexer.Models;
namespace Indexer.ScriptContainers;
public class CSharpScriptable : IScriptable
public class CSharpScriptable : IScriptContainer
{
public ScriptToolSet ToolSet { get; set; }
public ScriptUpdateInfo UpdateInfo { get; set; }

View File

@@ -3,7 +3,7 @@ using Indexer.Models;
namespace Indexer.ScriptContainers;
public class PythonScriptable : IScriptable
public class PythonScriptable : IScriptContainer
{
public ScriptToolSet ToolSet { get; set; }
public PyObject? pyToolSet;

View File

@@ -5,13 +5,13 @@ public class Worker
{
public string Name { get; set; }
public WorkerConfig Config { get; set; }
public IScriptable Scriptable { get; set; }
public IScriptContainer Scriptable { get; set; }
public List<ICall> Calls { get; set; }
public bool IsExecuting { get; set; }
public DateTime? LastExecution { get; set; }
public DateTime? LastSuccessfulExecution { get; set; }
public Worker(string name, WorkerConfig workerConfig, IScriptable scriptable)
public Worker(string name, WorkerConfig workerConfig, IScriptContainer scriptable)
{
Name = name;
Config = workerConfig;

View File

@@ -106,7 +106,7 @@ public class WorkerManager
return preexistingDateTime;
}
public IScriptable GetScriptable(ScriptToolSet toolSet)
public IScriptContainer GetScriptable(ScriptToolSet toolSet)
{
string fileName = toolSet.FilePath ?? throw new IndexerConfigurationException($"\"Script\" not set for Worker \"{toolSet.Name}\"");
foreach (Type type in types)
@@ -115,7 +115,7 @@ public class WorkerManager
bool? isInstance = method is not null ? (bool?)method.Invoke(null, [fileName]) : null;
if (isInstance == true)
{
IScriptable? instance = (IScriptable?)Activator.CreateInstance(type, [toolSet, _logger]);
IScriptContainer? instance = (IScriptContainer?)Activator.CreateInstance(type, [toolSet, _logger]);
if (instance is null)
{
_logger.LogError("Unable to initialize script: \"{fileName}\"", fileName);