Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,9 @@ public static class StatusConfig {
private Boolean console = false;
private String service;

@JsonProperty("resource")
private String resource = "/status";

public Boolean getConsole() {
return console;
}
Expand All @@ -470,9 +473,27 @@ public StatusConfig setService(String service) {
return this;
}

public String getResource() {
return resource;
}

public StatusConfig setResource(String resource) {
this.resource = resource;
return this;
}

@Override
public String toString() {
return "StatusConfig{" + "console=" + console + ", service='" + service + '\'' + '}';
return "StatusConfig{"
+ "console="
+ console
+ ", service='"
+ service
+ '\''
+ ", resource='"
+ resource
+ '\''
+ '}';
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ public Plugin initialize(PluginManager manager) {
plugin.status =
new Status(manager, manager.getLogger())
.setConsole(statusConfig.getConsole())
.setService(statusConfig.getService());
.setService(statusConfig.getService())
.setResource(statusConfig.getResource());
}

return plugin;
Expand Down Expand Up @@ -107,6 +108,7 @@ public static class Status {
private final Logger logger;
private Boolean console;
private String service;
private String resource;

private Status(PluginManager manager, Logger logger) {
this.manager = manager;
Expand All @@ -131,6 +133,15 @@ public Status setService(String service) {
return this;
}

public String getResource() {
return resource;
}

public Status setResource(String resource) {
this.resource = resource;
return this;
}

/** Collect and report current status. */
void reportStatus() {
try {
Expand Down Expand Up @@ -225,9 +236,10 @@ private void sendToService(ObjectNode statusReport) {
}

try {
// Send status report to service
// Default resource path is /status (same as OPA)
svc.post("/status", statusReport.toString());
// Determine resource path (default: /status)
String path = (resource != null && !resource.isEmpty()) ? resource : "/status";

svc.post(path, statusReport.toString());
logger.debug("Status report sent to service '%s'", service);
} catch (Exception e) {
logger.error("Failed to send status to service '%s': %s", service, e.getMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ void config_statusDefaults() {
Config.StatusConfig status = new Config.StatusConfig();

assertFalse(status.getConsole());
assertEquals("/status", status.getResource());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,15 +178,63 @@ void configDefaults_consoleIsFalse() {
Config.StatusConfig status = new Config.StatusConfig();

assertFalse(status.getConsole());
assertEquals("/status", status.getResource());
}

@Test
void configBuilder_setsAllFields() {
Config.StatusConfig status =
new Config.StatusConfig().setService("test-service").setConsole(true);
new Config.StatusConfig()
.setService("test-service")
.setConsole(true)
.setResource("/custom/status");

assertEquals("test-service", status.getService());
assertTrue(status.getConsole());
assertEquals("/custom/status", status.getResource());
}

@Test
void initialize_wiresDefaultResourcePath() throws Exception {
Config.StatusConfig status =
new Config.StatusConfig().setService("test-service").setConsole(false);
config.setStatus(status);

manager =
new PluginManager.Builder()
.withId("test-opa")
.withStore(store)
.withConfig(config)
.withLogger(mockLogger)
.build();

StatusPlugin plugin = (StatusPlugin) new StatusPlugin().initialize(manager);
StatusPlugin.Status statusReporter = getStatusReporter(plugin);

assertEquals("/status", statusReporter.getResource());
}

@Test
void initialize_wiresCustomResourcePath() throws Exception {
Config.StatusConfig status =
new Config.StatusConfig()
.setService("test-service")
.setConsole(false)
.setResource("/custom/status");
config.setStatus(status);

manager =
new PluginManager.Builder()
.withId("test-opa")
.withStore(store)
.withConfig(config)
.withLogger(mockLogger)
.build();

StatusPlugin plugin = (StatusPlugin) new StatusPlugin().initialize(manager);
StatusPlugin.Status statusReporter = getStatusReporter(plugin);

assertEquals("/custom/status", statusReporter.getResource());
}

@Test
Expand Down Expand Up @@ -382,10 +430,16 @@ void statusReport_includesInstanceId() throws Exception {
}

private ObjectNode buildStatusReport(StatusPlugin plugin) throws Exception {
return buildStatusReport(getStatusReporter(plugin));
}

private static StatusPlugin.Status getStatusReporter(StatusPlugin plugin) throws Exception {
java.lang.reflect.Field statusField = StatusPlugin.class.getDeclaredField("status");
statusField.setAccessible(true);
StatusPlugin.Status statusReporter = (StatusPlugin.Status) statusField.get(plugin);
return (StatusPlugin.Status) statusField.get(plugin);
}

private ObjectNode buildStatusReport(StatusPlugin.Status statusReporter) throws Exception {
java.lang.reflect.Method buildStatusMethod =
StatusPlugin.Status.class.getDeclaredMethod("buildStatusReport");
buildStatusMethod.setAccessible(true);
Expand Down
Loading