import 'package:freezed_annotation/freezed_annotation.dart'; part 'system_stats_model.freezed.dart'; part 'system_stats_model.g.dart'; /// System statistics response from Core API. @freezed sealed class SystemStats with _$SystemStats { const factory SystemStats({ required CpuStats cpu, required MemoryStats memory, required List disks, required NetworkStats network, required GpuStats gpu, required String hostname, @JsonKey(name: 'queried_at') required DateTime queriedAt, }) = _SystemStats; factory SystemStats.fromJson(Map json) => _$SystemStatsFromJson(json); } @freezed sealed class CpuStats with _$CpuStats { const factory CpuStats({ @JsonKey(name: 'usage_percent') required double usagePercent, required int cores, @JsonKey(name: 'load_1m') double? load1m, @JsonKey(name: 'load_5m') double? load5m, @JsonKey(name: 'load_15m') double? load15m, }) = _CpuStats; factory CpuStats.fromJson(Map json) => _$CpuStatsFromJson(json); } @freezed sealed class MemoryStats with _$MemoryStats { const factory MemoryStats({ @JsonKey(name: 'usage_percent') required double usagePercent, @JsonKey(name: 'total_bytes') required int totalBytes, @JsonKey(name: 'used_bytes') required int usedBytes, @JsonKey(name: 'available_bytes') required int availableBytes, }) = _MemoryStats; factory MemoryStats.fromJson(Map json) => _$MemoryStatsFromJson(json); } @freezed sealed class DiskStats with _$DiskStats { const factory DiskStats({ @JsonKey(name: 'mount_point') required String mountPoint, required String device, required String fstype, @JsonKey(name: 'usage_percent') required double usagePercent, @JsonKey(name: 'total_bytes') required int totalBytes, @JsonKey(name: 'used_bytes') required int usedBytes, @JsonKey(name: 'free_bytes') required int freeBytes, }) = _DiskStats; factory DiskStats.fromJson(Map json) => _$DiskStatsFromJson(json); } @freezed sealed class NetworkStats with _$NetworkStats { const factory NetworkStats({ @JsonKey(name: 'bytes_sent') required int bytesSent, @JsonKey(name: 'bytes_recv') required int bytesRecv, @JsonKey(name: 'bytes_total') required int bytesTotal, }) = _NetworkStats; factory NetworkStats.fromJson(Map json) => _$NetworkStatsFromJson(json); } @freezed sealed class GpuStats with _$GpuStats { const factory GpuStats({ required bool available, String? name, @JsonKey(name: 'usage_percent') double? usagePercent, @JsonKey(name: 'total_bytes') int? totalBytes, @JsonKey(name: 'used_bytes') int? usedBytes, @JsonKey(name: 'free_bytes') int? freeBytes, }) = _GpuStats; factory GpuStats.fromJson(Map json) => _$GpuStatsFromJson(json); }