mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-12 03:24:14 +00:00
Removing scheduler
- not needed
This commit is contained in:
+29
-1
@@ -6,6 +6,7 @@ import art.arcane.iris.generation.runtime.IrisTelemetrySnapshot;
|
|||||||
import art.arcane.iris.Iris;
|
import art.arcane.iris.Iris;
|
||||||
import art.arcane.iris.generation.runtime.EngineTelemetrySnapshot;
|
import art.arcane.iris.generation.runtime.EngineTelemetrySnapshot;
|
||||||
import art.arcane.iris.spi.IrisServices;
|
import art.arcane.iris.spi.IrisServices;
|
||||||
|
import art.arcane.iris.world.task.J;
|
||||||
import art.arcane.iris.platform.bukkit.plugin.IrisService;
|
import art.arcane.iris.platform.bukkit.plugin.IrisService;
|
||||||
import art.arcane.volmlib.integration.IntegrationHandshakeRequest;
|
import art.arcane.volmlib.integration.IntegrationHandshakeRequest;
|
||||||
import art.arcane.volmlib.integration.IntegrationHandshakeResponse;
|
import art.arcane.volmlib.integration.IntegrationHandshakeResponse;
|
||||||
@@ -13,6 +14,9 @@ import art.arcane.volmlib.integration.IntegrationHeartbeat;
|
|||||||
import art.arcane.volmlib.integration.IntegrationMetricDescriptor;
|
import art.arcane.volmlib.integration.IntegrationMetricDescriptor;
|
||||||
import art.arcane.volmlib.integration.IntegrationMetricGroup;
|
import art.arcane.volmlib.integration.IntegrationMetricGroup;
|
||||||
import art.arcane.volmlib.integration.IntegrationMetricSample;
|
import art.arcane.volmlib.integration.IntegrationMetricSample;
|
||||||
|
import art.arcane.volmlib.integration.IntegrationMetricPublisher;
|
||||||
|
import art.arcane.volmlib.integration.IntegrationMetricSnapshot;
|
||||||
|
import art.arcane.volmlib.integration.IntegrationSnapshotProvider;
|
||||||
import art.arcane.volmlib.integration.IntegrationMetricSchema;
|
import art.arcane.volmlib.integration.IntegrationMetricSchema;
|
||||||
import art.arcane.volmlib.integration.IntegrationProtocolNegotiator;
|
import art.arcane.volmlib.integration.IntegrationProtocolNegotiator;
|
||||||
import art.arcane.volmlib.integration.IntegrationProtocolVersion;
|
import art.arcane.volmlib.integration.IntegrationProtocolVersion;
|
||||||
@@ -30,7 +34,7 @@ import java.util.Optional;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class IrisIntegrationService implements IrisService, IntegrationServiceContract {
|
public class IrisIntegrationService implements IrisService, IntegrationSnapshotProvider {
|
||||||
private static final IntegrationProtocolVersion CURRENT_PROTOCOL = new IntegrationProtocolVersion(1, 2);
|
private static final IntegrationProtocolVersion CURRENT_PROTOCOL = new IntegrationProtocolVersion(1, 2);
|
||||||
private static final Set<IntegrationProtocolVersion> SUPPORTED_PROTOCOLS = Set.of(
|
private static final Set<IntegrationProtocolVersion> SUPPORTED_PROTOCOLS = Set.of(
|
||||||
new IntegrationProtocolVersion(1, 0),
|
new IntegrationProtocolVersion(1, 0),
|
||||||
@@ -41,6 +45,7 @@ public class IrisIntegrationService implements IrisService, IntegrationServiceCo
|
|||||||
"handshake",
|
"handshake",
|
||||||
"heartbeat",
|
"heartbeat",
|
||||||
"metrics",
|
"metrics",
|
||||||
|
IntegrationSnapshotProvider.CAPABILITY,
|
||||||
"metric-groups",
|
"metric-groups",
|
||||||
"iris-engine-metrics",
|
"iris-engine-metrics",
|
||||||
"iris-world-metrics"
|
"iris-world-metrics"
|
||||||
@@ -63,6 +68,9 @@ public class IrisIntegrationService implements IrisService, IntegrationServiceCo
|
|||||||
);
|
);
|
||||||
|
|
||||||
private final Supplier<IrisTelemetrySnapshot> telemetrySupplier;
|
private final Supplier<IrisTelemetrySnapshot> telemetrySupplier;
|
||||||
|
private final IntegrationMetricPublisher snapshots = new IntegrationMetricPublisher(
|
||||||
|
IntegrationMetricSchema.irisKeys().size(), 30_000L);
|
||||||
|
private int snapshotTaskId = -1;
|
||||||
|
|
||||||
public IrisIntegrationService() {
|
public IrisIntegrationService() {
|
||||||
this(IrisIntegrationService::currentTelemetry);
|
this(IrisIntegrationService::currentTelemetry);
|
||||||
@@ -77,11 +85,17 @@ public class IrisIntegrationService implements IrisService, IntegrationServiceCo
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Bukkit.getServicesManager().register(IntegrationServiceContract.class, this, Iris.instance, ServicePriority.Normal);
|
Bukkit.getServicesManager().register(IntegrationServiceContract.class, this, Iris.instance, ServicePriority.Normal);
|
||||||
|
snapshotTaskId = J.ar(this::publishSnapshots, 20);
|
||||||
Iris.verbose("Integration provider registered for Iris");
|
Iris.verbose("Integration provider registered for Iris");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
|
if (snapshotTaskId != -1) {
|
||||||
|
J.car(snapshotTaskId);
|
||||||
|
snapshotTaskId = -1;
|
||||||
|
}
|
||||||
|
snapshots.clear();
|
||||||
Bukkit.getServicesManager().unregister(IntegrationServiceContract.class, this);
|
Bukkit.getServicesManager().unregister(IntegrationServiceContract.class, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,6 +202,20 @@ public class IrisIntegrationService implements IrisService, IntegrationServiceCo
|
|||||||
return Map.copyOf(selected);
|
return Map.copyOf(selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntegrationMetricSnapshot snapshotMetrics(Set<String> metricKeys) {
|
||||||
|
return snapshots.snapshotMetrics(metricKeys, System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
|
void publishSnapshots() {
|
||||||
|
IntegrationMetricPublisher.Demand demand = snapshots.demandedKeys(System.currentTimeMillis());
|
||||||
|
if (demand.keys().isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, IntegrationMetricSample> samples = sampleMetrics(demand.keys());
|
||||||
|
snapshots.publish(demand, System.currentTimeMillis(), samples);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<IntegrationMetricGroup> metricGroups() {
|
public List<IntegrationMetricGroup> metricGroups() {
|
||||||
IrisTelemetrySnapshot snapshot = safeSnapshot();
|
IrisTelemetrySnapshot snapshot = safeSnapshot();
|
||||||
|
|||||||
+47
@@ -5,19 +5,66 @@ import art.arcane.iris.generation.runtime.IrisTelemetrySnapshot;
|
|||||||
import art.arcane.iris.generation.runtime.EngineTelemetrySnapshot;
|
import art.arcane.iris.generation.runtime.EngineTelemetrySnapshot;
|
||||||
import art.arcane.volmlib.integration.IntegrationMetricGroup;
|
import art.arcane.volmlib.integration.IntegrationMetricGroup;
|
||||||
import art.arcane.volmlib.integration.IntegrationMetricSample;
|
import art.arcane.volmlib.integration.IntegrationMetricSample;
|
||||||
|
import art.arcane.volmlib.integration.IntegrationMetricSnapshot;
|
||||||
|
import art.arcane.volmlib.integration.IntegrationSnapshotProvider;
|
||||||
import art.arcane.volmlib.integration.IntegrationMetricSchema;
|
import art.arcane.volmlib.integration.IntegrationMetricSchema;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.plugin.ServicesManager;
|
||||||
|
import org.mockito.MockedStatic;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
public class IrisIntegrationServiceTest {
|
public class IrisIntegrationServiceTest {
|
||||||
|
@Test
|
||||||
|
public void disableClearsPublishedSnapshots() {
|
||||||
|
IrisIntegrationService service = new IrisIntegrationService(() -> IrisTelemetrySnapshot.EMPTY);
|
||||||
|
Set<String> keys = Set.of(IntegrationMetricSchema.IRIS_WORLD_COUNT);
|
||||||
|
service.snapshotMetrics(keys);
|
||||||
|
service.publishSnapshots();
|
||||||
|
long generation = service.snapshotMetrics(keys).generation();
|
||||||
|
try (MockedStatic<Bukkit> bukkit = Mockito.mockStatic(Bukkit.class)) {
|
||||||
|
bukkit.when(Bukkit::getServicesManager).thenReturn(Mockito.mock(ServicesManager.class));
|
||||||
|
service.onDisable();
|
||||||
|
}
|
||||||
|
assertTrue(service.snapshotMetrics(keys).samples().isEmpty());
|
||||||
|
assertTrue(service.snapshotMetrics(keys).generation() > generation);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void snapshotRequestsDoNotCollectAndKeepOriginalTelemetryTime() {
|
||||||
|
long sampledAt = System.currentTimeMillis() - 5_000L;
|
||||||
|
IrisTelemetrySnapshot source = telemetry(List.of(), IrisTelemetrySnapshot.PregenSnapshot.INACTIVE, sampledAt);
|
||||||
|
AtomicInteger reads = new AtomicInteger();
|
||||||
|
IrisIntegrationService service = new IrisIntegrationService(() -> {
|
||||||
|
reads.incrementAndGet();
|
||||||
|
return source;
|
||||||
|
});
|
||||||
|
Set<String> keys = Set.of(IntegrationMetricSchema.IRIS_WORLD_COUNT);
|
||||||
|
assertTrue(service.capabilities().contains(IntegrationSnapshotProvider.CAPABILITY));
|
||||||
|
service.publishSnapshots();
|
||||||
|
assertEquals(0, reads.get());
|
||||||
|
assertTrue(service.snapshotMetrics(keys).samples().isEmpty());
|
||||||
|
assertEquals(0, reads.get());
|
||||||
|
|
||||||
|
service.publishSnapshots();
|
||||||
|
IntegrationMetricSnapshot publication = service.snapshotMetrics(keys);
|
||||||
|
assertEquals(1, reads.get());
|
||||||
|
assertEquals(sampledAt, publication.samples().get(IntegrationMetricSchema.IRIS_WORLD_COUNT).sampledAtMs());
|
||||||
|
assertTrue(publication.capturedAtMs() >= sampledAt);
|
||||||
|
assertEquals(publication, service.snapshotMetrics(keys));
|
||||||
|
assertEquals(1, reads.get());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void unavailableTelemetryDoesNotPublishFalseZeroes() {
|
public void unavailableTelemetryDoesNotPublishFalseZeroes() {
|
||||||
IrisIntegrationService service = new IrisIntegrationService(() -> IrisTelemetrySnapshot.EMPTY);
|
IrisIntegrationService service = new IrisIntegrationService(() -> IrisTelemetrySnapshot.EMPTY);
|
||||||
|
|||||||
@@ -311,7 +311,6 @@ List<String> unusedVolmLibClasses = [
|
|||||||
'art/arcane/volmlib/util/hud/HudTitleService',
|
'art/arcane/volmlib/util/hud/HudTitleService',
|
||||||
'art/arcane/volmlib/util/scheduling/GroupedExecutor',
|
'art/arcane/volmlib/util/scheduling/GroupedExecutor',
|
||||||
'art/arcane/volmlib/util/scheduling/SchedulerRuntime',
|
'art/arcane/volmlib/util/scheduling/SchedulerRuntime',
|
||||||
'art/arcane/volmlib/util/scheduling/SchedulerUtils',
|
|
||||||
'art/arcane/volmlib/util/scheduling/TaskExecutor',
|
'art/arcane/volmlib/util/scheduling/TaskExecutor',
|
||||||
'art/arcane/volmlib/util/parallel/StreamUtilsSupport',
|
'art/arcane/volmlib/util/parallel/StreamUtilsSupport',
|
||||||
'art/arcane/volmlib/util/parallel/SyncExecutorSupport',
|
'art/arcane/volmlib/util/parallel/SyncExecutorSupport',
|
||||||
|
|||||||
Reference in New Issue
Block a user