aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java')
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java23
1 files changed, 15 insertions, 8 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java
index 140257cbcef..6234a96d7a0 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java
@@ -6,6 +6,7 @@ import com.yahoo.component.AbstractComponent;
import com.yahoo.container.jdisc.config.HealthMonitorConfig;
import com.yahoo.jdisc.Timer;
import com.yahoo.jdisc.application.MetricConsumer;
+import com.yahoo.log.LogLevel;
import java.util.Map;
import java.util.TreeSet;
@@ -14,7 +15,7 @@ import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
/**
- * A statemonitor keeps track of the current metrics state of a container.
+ * A state monitor keeps track of the current health and metrics state of a container.
* It is used by jDisc to hand out metric update API endpoints to workers through {@link #newMetricConsumer},
* and to inspect the current accumulated state of metrics through {@link #snapshot}.
*
@@ -23,12 +24,16 @@ import java.util.logging.Logger;
public class StateMonitor extends AbstractComponent {
private final static Logger log = Logger.getLogger(StateMonitor.class.getName());
+
+ public enum Status {up, down, initializing};
+
private final CopyOnWriteArrayList<StateMetricConsumer> consumers = new CopyOnWriteArrayList<>();
private final Thread thread;
private final Timer timer;
private final long snapshotIntervalMs;
private long lastSnapshotTimeMs;
private volatile MetricSnapshot snapshot;
+ private volatile Status status;
private final TreeSet<String> valueNames = new TreeSet<>();
@Inject
@@ -36,13 +41,8 @@ public class StateMonitor extends AbstractComponent {
this.timer = timer;
this.snapshotIntervalMs = (long)(config.snapshot_interval() * TimeUnit.SECONDS.toMillis(1));
this.lastSnapshotTimeMs = timer.currentTimeMillis();
- thread = new Thread(new Runnable() {
-
- @Override
- public void run() {
- StateMonitor.this.run();
- }
- }, "StateMonitor");
+ this.status = Status.valueOf(config.initialStatus());
+ thread = new Thread(StateMonitor.this::run, "StateMonitor");
thread.setDaemon(true);
thread.start();
}
@@ -54,6 +54,13 @@ public class StateMonitor extends AbstractComponent {
return consumer;
}
+ public void status(Status status) {
+ log.log(LogLevel.INFO, "Changing health status code from '" + this.status + "' to '" + status.name() + "'");
+ this.status = status;
+ }
+
+ public Status status() { return status; }
+
/** Returns the last snapshot taken of the metrics in this system */
public MetricSnapshot snapshot() {
return snapshot;