mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
feat: systemd management (#532)
This commit is contained in:
118
lib/data/model/server/systemd.dart
Normal file
118
lib/data/model/server/systemd.dart
Normal file
@@ -0,0 +1,118 @@
|
||||
import 'package:fl_lib/fl_lib.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
enum SystemdUnitFunc {
|
||||
start,
|
||||
stop,
|
||||
restart,
|
||||
reload,
|
||||
enable,
|
||||
disable,
|
||||
status,
|
||||
;
|
||||
|
||||
IconData get icon => switch (this) {
|
||||
start => Icons.play_arrow,
|
||||
stop => Icons.stop,
|
||||
restart => Icons.refresh,
|
||||
reload => Icons.refresh,
|
||||
enable => Icons.check,
|
||||
disable => Icons.close,
|
||||
status => Icons.info,
|
||||
};
|
||||
}
|
||||
|
||||
enum SystemdUnitType {
|
||||
service,
|
||||
socket,
|
||||
mount,
|
||||
timer,
|
||||
;
|
||||
|
||||
static SystemdUnitType? fromString(String? value) {
|
||||
return values.firstWhereOrNull((e) => e.name == value?.toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
enum SystemdUnitScope {
|
||||
system,
|
||||
user,
|
||||
;
|
||||
|
||||
Color? get color => switch (this) {
|
||||
system => Colors.red,
|
||||
_ => null,
|
||||
};
|
||||
|
||||
String getCmdPrefix(bool isRoot) {
|
||||
if (this == system) {
|
||||
return isRoot ? 'systemctl' : 'sudo systemctl';
|
||||
}
|
||||
return 'systemctl --user';
|
||||
}
|
||||
}
|
||||
|
||||
enum SystemdUnitState {
|
||||
active,
|
||||
inactive,
|
||||
failed,
|
||||
activating,
|
||||
deactivating,
|
||||
;
|
||||
|
||||
static SystemdUnitState? fromString(String? value) {
|
||||
return values.firstWhereOrNull((e) => e.name == value?.toLowerCase());
|
||||
}
|
||||
|
||||
Color? get color => switch (this) {
|
||||
failed => Colors.red,
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
final class SystemdUnit {
|
||||
final String name;
|
||||
final String? description;
|
||||
final SystemdUnitType type;
|
||||
final SystemdUnitScope scope;
|
||||
final SystemdUnitState state;
|
||||
|
||||
SystemdUnit({
|
||||
required this.name,
|
||||
this.description,
|
||||
required this.type,
|
||||
required this.scope,
|
||||
required this.state,
|
||||
});
|
||||
|
||||
String getCmd({
|
||||
required SystemdUnitFunc func,
|
||||
required bool isRoot,
|
||||
}) {
|
||||
final prefix = scope.getCmdPrefix(isRoot);
|
||||
return '$prefix ${func.name} $name';
|
||||
}
|
||||
|
||||
List<SystemdUnitFunc> get availableFuncs {
|
||||
final funcs = <SystemdUnitFunc>{};
|
||||
switch (state) {
|
||||
case SystemdUnitState.active:
|
||||
funcs.addAll([SystemdUnitFunc.stop, SystemdUnitFunc.restart]);
|
||||
break;
|
||||
case SystemdUnitState.inactive:
|
||||
funcs.addAll([SystemdUnitFunc.start]);
|
||||
break;
|
||||
case SystemdUnitState.failed:
|
||||
funcs.addAll([SystemdUnitFunc.restart]);
|
||||
break;
|
||||
case SystemdUnitState.activating:
|
||||
funcs.addAll([SystemdUnitFunc.stop]);
|
||||
break;
|
||||
case SystemdUnitState.deactivating:
|
||||
funcs.addAll([SystemdUnitFunc.start]);
|
||||
break;
|
||||
}
|
||||
funcs.addAll([SystemdUnitFunc.status]);
|
||||
return funcs.toList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user