Add actions and unit data
1 files changed, 27 insertions, 16 deletions
diff --git a/LibSystemdCli/SystemdExecutor.cs b/LibSystemdCli/SystemdExecutor.cs
index 06c9538..ead11fd 100644
--- a/LibSystemdCli/SystemdExecutor.cs
+++ b/LibSystemdCli/SystemdExecutor.cs
@@ -4,35 +4,46 @@ using LibSystemdCli.Models;
namespace LibSystemdCli;
-public class SystemdExecutor
-{
- public static async IAsyncEnumerable<SystemdUnitListItem> GetUnits()
- {
+public class SystemdExecutor {
+ public static async IAsyncEnumerable<SystemdUnitListItem> GetUnits() {
var output = await CommandExecutor.ExecuteCommand("systemctl", "list-units --all --no-legend --no-pager --no-legend -o json-pretty");
-
+
var data = JsonSerializer.Deserialize<List<SystemdUnitListItem>>(output);
-
- foreach (var unit in data)
- {
- try
- {
+
+ foreach (var unit in data) {
+ try {
var fragmentOutput = await CommandExecutor.ExecuteCommand("systemctl", $"show -P FragmentPath --no-pager --no-legend -- {unit.Unit} ");
// Console.WriteLine(fragmentOutput);
unit.FragmentPaths = fragmentOutput.Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries).ToList();
}
- catch
- {
- }
+ catch { }
yield return unit;
// await Task.Delay(100);
}
}
- public static async IAsyncEnumerable<SystemdJournalLogItem> GetUnitLogs(string serviceName) {
- await foreach (var line in CommandExecutor.ExecuteCommandAsync("journalctl", $"--catalog --all --pager-end --follow --output=json --unit={serviceName}"))
- {
+ public static async IAsyncEnumerable<SystemdJournalLogItem> GetUnitLogs(string serviceName, int contextLines = 100) {
+ await foreach (var line in CommandExecutor.ExecuteCommandAsync("journalctl", $"--catalog --all --pager-end --output=json --follow --lines={contextLines} --unit={serviceName}")) {
yield return JsonSerializer.Deserialize<SystemdJournalLogItem>(line)!;
}
}
+
+ public static async Task<SystemdServiceData> GetUnitData(string serviceName) {
+ var output = await CommandExecutor.ExecuteCommand("systemctl", $"show --no-pager --no-legend -- {serviceName} ");
+ var data = new SystemdServiceData();
+ foreach (var line in output.Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)) {
+ var parts = line.Split('=', 2);
+ var key = parts[0];
+ var value = parts[1];
+ data.AddData(key, value);
+ }
+
+ return data;
+ }
+
+ private class TypeDef {
+ public bool IsList { get; set; }
+ public string Type { get; set; } = null!;
+ }
}
\ No newline at end of file
|