package com.xfestudio.xfeservermanager.api.status;
import com.xfestudio.xfeservermanager.api.util.ApiChecks;
import java.time.Duration;
import java.time.Instant;
import java.util.Map;
import java.util.Objects;
/** One immutable sample suitable for REST and server-sent events. */
public record ServerStatusSnapshot(
Instant sampledAt,
Duration uptime,
TickMetrics ticks,
double processCpuLoad,
MemoryMetrics heap,
long usableDiskBytes,
int onlinePlayers,
int maximumPlayers,
double averagePingMillis,
Map<String, DimensionMetrics> dimensions
) {
public ServerStatusSnapshot {
Objects.requireNonNull(sampledAt, "sampledAt");
Objects.requireNonNull(uptime, "uptime");
if (uptime.isNegative()) {
throw new IllegalArgumentException("uptime must be non-negative");
}
Objects.requireNonNull(ticks, "ticks");
if (!Double.isFinite(processCpuLoad) || processCpuLoad < 0.0 || processCpuLoad > 1.0) {
throw new IllegalArgumentException("processCpuLoad must be between 0 and 1");
}
Objects.requireNonNull(heap, "heap");
if (usableDiskBytes < 0 || onlinePlayers < 0 || maximumPlayers < onlinePlayers
|| !Double.isFinite(averagePingMillis) || averagePingMillis < 0.0) {
throw new IllegalArgumentException("status values must be ordered and non-negative");
}
dimensions = ApiChecks.immutableMap(dimensions, "dimensions");
}
}
package com.xfestudio.xfeservermanager.api.status;
import com.xfestudio.xfeservermanager.api.util.ApiChecks;
import java.time.Duration;
import java.time.Instant;
import java.util.Map;
import java.util.Objects;
/** One immutable sample suitable for REST and server-sent events. */
public record ServerStatusSnapshot(
Instant sampledAt,
Duration uptime,
TickMetrics ticks,
double processCpuLoad,
MemoryMetrics heap,
long usableDiskBytes,
int onlinePlayers,
int maximumPlayers,
double averagePingMillis,
Map<String, DimensionMetrics> dimensions
) {
public ServerStatusSnapshot {
Objects.requireNonNull(sampledAt, "sampledAt");
Objects.requireNonNull(uptime, "uptime");
if (uptime.isNegative()) {
throw new IllegalArgumentException("uptime must be non-negative");
}
Objects.requireNonNull(ticks, "ticks");
if (!Double.isFinite(processCpuLoad) || processCpuLoad < 0.0 || processCpuLoad > 1.0) {
throw new IllegalArgumentException("processCpuLoad must be between 0 and 1");
}
Objects.requireNonNull(heap, "heap");
if (usableDiskBytes < 0 || onlinePlayers < 0 || maximumPlayers < onlinePlayers
|| !Double.isFinite(averagePingMillis) || averagePingMillis < 0.0) {
throw new IllegalArgumentException("status values must be ordered and non-negative");
}
dimensions = ApiChecks.immutableMap(dimensions, "dimensions");
}
}