Added document generation

This commit is contained in:
Simon Gruber
2023-11-22 15:23:23 +01:00
parent 8ada606fa6
commit 3c50e7121d
2056 changed files with 2654 additions and 199 deletions
@@ -0,0 +1,42 @@
using System.Text;
namespace CLI.Monitor;
public class CompactCliTaskMonitor : TaskMonitor
{
/// <inheritdoc />
public CompactCliTaskMonitor(IEnumerable<(string? Name, Task Task)> tasks) : base(tasks) { }
/// <inheritdoc />
public CompactCliTaskMonitor(IEnumerable<Task> tasks) : base(tasks) { }
#region Overrides of TaskMonitor
/// <inheritdoc />
protected override void OnUpdate(ICollection<(string? Name, Task Task)> tasks)
{
int completed = 0;
int total = tasks.Count;
var sb = new StringBuilder(total * 30);
foreach (var (_, task) in tasks)
{
var status = task.Status;
if (status > TaskStatus.WaitingForChildrenToComplete)
{
completed++;
}
sb.Append(task.Exception is not null ? 'X' : StatusMap[status].First());
}
sb.AppendLine($" ({completed}/{total - 1})");
Console.Clear();
Console.Write(sb.ToString());
}
#endregion
}
+4 -2
View File
@@ -2,5 +2,7 @@
public interface ITaskMonitor
{
Task Run();
}
TimeSpan Interval { get; init; }
Task Run();
}
+23 -20
View File
@@ -2,9 +2,14 @@
public abstract class TaskMonitor : ITaskMonitor
{
protected static IReadOnlyDictionary<TaskStatus, string> StatusMap { get; } =
new Dictionary<TaskStatus, string>
{
/// <inheritdoc />
public TimeSpan Interval { get; init; } = TimeSpan.FromSeconds(1);
private readonly ICollection<(string? Name, Task Task)> _tasks;
protected static IReadOnlyDictionary<TaskStatus, string> StatusMap { get; } =
new Dictionary<TaskStatus, string>
{
{ TaskStatus.RanToCompletion, "DONE" },
{ TaskStatus.Faulted, "FAULT" },
{ TaskStatus.Canceled, "CANCL" },
@@ -13,27 +18,25 @@ public abstract class TaskMonitor : ITaskMonitor
{ TaskStatus.WaitingForActivation, "WAIT" },
{ TaskStatus.Running, "RUN" },
{ TaskStatus.WaitingForChildrenToComplete, "RUN" },
};
};
private readonly ICollection<(string? Name, Task Task)> _tasks;
protected TaskMonitor(IEnumerable<(string? Name, Task Task)> tasks) => _tasks = tasks.ToArray();
protected TaskMonitor(IEnumerable<(string? Name, Task Task)> tasks) => _tasks = tasks.ToArray();
protected TaskMonitor(IEnumerable<Task> tasks) :
this(tasks.Select(t => (t.Id.ToString(), t))!)
{ }
protected TaskMonitor(IEnumerable<Task> tasks) :
this(tasks.Select(t => (t.Id.ToString(), t))!)
{ }
public Task Run()
{
var waitTask = Task.WhenAll(_tasks.Select(i => i.Task));
public Task Run()
while (!waitTask.Wait(Interval))
{
var waitTask = Task.WhenAll(_tasks.Select(i => i.Task));
while (!waitTask.Wait(TimeSpan.FromSeconds(1)))
{
OnUpdate(_tasks);
}
return waitTask;
OnUpdate(_tasks);
}
protected abstract void OnUpdate(ICollection<(string? Name, Task Task)> tasks);
}
return waitTask;
}
protected abstract void OnUpdate(ICollection<(string? Name, Task Task)> tasks);
}