Improve error reporting.

This commit is contained in:
Michael Lipp 2023-09-16 11:53:51 +02:00
parent f24b6aca52
commit 3b0fb02fbe
2 changed files with 32 additions and 0 deletions

View file

@ -21,9 +21,11 @@ package org.jdrupes.vmoperator.manager;
import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration; import io.kubernetes.client.openapi.Configuration;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level;
import org.jgrapes.core.Channel; import org.jgrapes.core.Channel;
import org.jgrapes.core.Component; import org.jgrapes.core.Component;
import org.jgrapes.core.annotation.Handler; import org.jgrapes.core.annotation.Handler;
import org.jgrapes.core.events.HandlingError;
import org.jgrapes.core.events.Start; import org.jgrapes.core.events.Start;
/** /**
@ -74,6 +76,20 @@ public class Controller extends Component {
attach(new Reconciler(channel())); attach(new Reconciler(channel()));
} }
/**
* Special handling of {@link ApiException} thrown by handlers.
*
* @param event the event
*/
@Handler(channels = Channel.class)
public void onHandlingError(HandlingError event) {
if (event.throwable() instanceof ApiException exc) {
logger.log(Level.WARNING, exc,
() -> "Problem accessing kubernetes: " + exc.getResponseBody());
event.stop();
}
}
/** /**
* Handle the start event. Has higher priority because it configures * Handle the start event. Has higher priority because it configures
* the default Kubernetes client. * the default Kubernetes client.

View file

@ -32,9 +32,11 @@ import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options; import org.apache.commons.cli.Options;
import static org.jdrupes.vmoperator.manager.Constants.VM_OP_NAME; import static org.jdrupes.vmoperator.manager.Constants.VM_OP_NAME;
import org.jdrupes.vmoperator.util.FsdUtils; import org.jdrupes.vmoperator.util.FsdUtils;
import org.jgrapes.core.Channel;
import org.jgrapes.core.Component; import org.jgrapes.core.Component;
import org.jgrapes.core.Components; import org.jgrapes.core.Components;
import org.jgrapes.core.annotation.Handler; import org.jgrapes.core.annotation.Handler;
import org.jgrapes.core.events.HandlingError;
import org.jgrapes.core.events.Stop; import org.jgrapes.core.events.Stop;
import org.jgrapes.io.NioDispatcher; import org.jgrapes.io.NioDispatcher;
import org.jgrapes.util.FileSystemWatcher; import org.jgrapes.util.FileSystemWatcher;
@ -95,6 +97,20 @@ public class Manager extends Component {
fire(new WatchFile(config.toPath())); fire(new WatchFile(config.toPath()));
} }
/**
* Log the exception when a handling error is reported.
*
* @param event the event
*/
@Handler(channels = Channel.class, priority = -10_000)
@SuppressWarnings("PMD.GuardLogStatement")
public void onHandlingError(HandlingError event) {
logger.log(Level.WARNING, event.throwable(),
() -> "Problem invoking handler with " + event.event() + ": "
+ event.message());
event.stop();
}
/** /**
* On stop. * On stop.
* *