blob: ead11fdc08bca6f32bbca798f99a771c522db12f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
using System.Text.Json;
using System.Text.Json.Nodes;
using LibSystemdCli.Models;
namespace LibSystemdCli;
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 {
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 { }
yield return unit;
// await Task.Delay(100);
}
}
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!;
}
}
|