/ Framework / Core / PluginTools.cs
PluginTools.cs
 1  using FileUtils;
 2  using KubernetesWorkflow;
 3  using Logging;
 4  using WebUtils;
 5  
 6  namespace Core
 7  {
 8      public interface IPluginTools : IWorkflowTool, ILogTool, IHttpFactory, IFileTool
 9      {
10          IK8sTimeSet K8STimeSet { get; }
11  
12          /// <summary>
13          /// Deletes kubernetes and tracked file resources.
14          /// when `waitTillDone` is true, this function will block until resources are deleted.
15          /// </summary>
16          void Decommission(bool deleteKubernetesResources, bool deleteTrackedFiles, bool waitTillDone);
17      }
18  
19      public interface IWorkflowTool
20      {
21          IStartupWorkflow CreateWorkflow(string? namespaceOverride = null);
22      }
23  
24      public interface ILogTool
25      {
26          ILog GetLog();
27      }
28  
29      public interface IFileTool
30      {
31          IFileManager GetFileManager();
32      }
33  
34      internal class PluginTools : IPluginTools
35      {
36          private readonly WorkflowCreator workflowCreator;
37          private readonly HttpFactory httpFactory;
38          private readonly IFileManager fileManager;
39          private readonly LogPrefixer log;
40  
41          internal PluginTools(ILog log, WorkflowCreator workflowCreator, string fileManagerRootFolder, IWebCallTimeSet webCallTimeSet, IK8sTimeSet k8STimeSet)
42          {
43              this.log = new LogPrefixer(log);
44              this.workflowCreator = workflowCreator;
45              httpFactory = new HttpFactory(log, webCallTimeSet);
46              WebCallTimeSet = webCallTimeSet;
47              K8STimeSet = k8STimeSet;
48              fileManager = new FileManager(log, fileManagerRootFolder);
49          }
50  
51          public IWebCallTimeSet WebCallTimeSet { get; }
52          public IK8sTimeSet K8STimeSet { get; }
53  
54          public void ApplyLogPrefix(string prefix)
55          {
56              log.Prefix = prefix;
57          }
58  
59          public IHttp CreateHttp(string id, Action<HttpClient> onClientCreated)
60          {
61              return httpFactory.CreateHttp(id, onClientCreated);
62          }
63  
64          public IHttp CreateHttp(string id, Action<HttpClient> onClientCreated, IWebCallTimeSet timeSet)
65          {
66              return httpFactory.CreateHttp(id, onClientCreated, timeSet);
67          }
68  
69          public IHttp CreateHttp(string id)
70          {
71              return httpFactory.CreateHttp(id);
72          }
73  
74          public IStartupWorkflow CreateWorkflow(string? namespaceOverride = null)
75          {
76              return workflowCreator.CreateWorkflow(namespaceOverride);
77          }
78  
79          public void Decommission(bool deleteKubernetesResources, bool deleteTrackedFiles, bool waitTillDone)
80          {
81              if (deleteKubernetesResources) CreateWorkflow().DeleteNamespace(waitTillDone);
82              if (deleteTrackedFiles) fileManager.DeleteAllFiles();
83          }
84  
85          public IFileManager GetFileManager()
86          {
87              return fileManager;
88          }
89  
90          public ILog GetLog()
91          {
92              return log;
93          }
94      }
95  }