/ ProjectPlugins / CodexPlugin / CodexContainerProcessControl.cs
CodexContainerProcessControl.cs
 1  using CodexClient;
 2  using Core;
 3  using KubernetesWorkflow;
 4  using KubernetesWorkflow.Types;
 5  using Logging;
 6  
 7  namespace CodexPlugin
 8  {
 9      public class CodexContainerProcessControl : IProcessControl
10      {
11          private readonly IPluginTools tools;
12          private readonly RunningPod pod;
13          private readonly Action onStop;
14          private readonly ContainerCrashWatcher crashWatcher;
15  
16          public CodexContainerProcessControl(IPluginTools tools, RunningPod pod, Action onStop)
17          {
18              this.tools = tools;
19              this.pod = pod;
20              this.onStop = onStop;
21  
22              crashWatcher = tools.CreateWorkflow().CreateCrashWatcher(pod.Containers.Single());
23              crashWatcher.Start();
24          }
25  
26          public void Stop(bool waitTillStopped)
27          {
28              Log($"Stopping node...");
29              crashWatcher.Stop();
30              var workflow = tools.CreateWorkflow();
31              workflow.Stop(pod, waitTillStopped);
32              onStop();
33              Log("Stopped.");
34          }
35  
36          public IDownloadedLog DownloadLog(LogFile file)
37          {
38              var workflow = tools.CreateWorkflow();
39              return workflow.DownloadContainerLog(pod.Containers.Single());
40          }
41  
42          public void DeleteDataDirFolder()
43          {
44              var container = pod.Containers.Single();
45  
46              try
47              {
48                  var dataDirVar = container.Recipe.EnvVars.Single(e => e.Name == "CODEX_DATA_DIR");
49                  var dataDir = dataDirVar.Value;
50                  var workflow = tools.CreateWorkflow();
51                  workflow.ExecuteCommand(container, "rm", "-Rfv", $"/codex/{dataDir}/repo");
52                  Log("Deleted repo folder.");
53              }
54              catch (Exception e)
55              {
56                  Log("Unable to delete repo folder: " + e);
57              }
58          }
59  
60          public bool HasCrashed()
61          {
62              return crashWatcher.HasCrashed();
63          }
64  
65          private void Log(string message)
66          {
67              tools.GetLog().Log(message);
68          }
69      }
70  }