summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-06-08 14:57:57 +0200
committerGitHub <noreply@github.com>2018-06-08 14:57:57 +0200
commit9fa71da75e98f8486884a45ef4035763997fd620 (patch)
tree4ad7c0d49ccedbfc2758ee6da29d6e1df8db3fe6
parent87ccad88a9f9c30a9fb924d1f2e5638f8930406a (diff)
parent078f9fd5e50d49e37e8328a68a27eb9d3fbb7a03 (diff)
Merge pull request #6134 from vespa-engine/mpolden/application-activity
Add application level activity
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java8
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationActivity.java56
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java5
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json4
6 files changed, 81 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
index 295b1adbca9..295e0102782 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
@@ -10,6 +10,7 @@ import com.yahoo.config.provision.Environment;
import com.yahoo.vespa.hosted.controller.api.integration.MetricsService.ApplicationMetrics;
import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.application.ApplicationActivity;
import com.yahoo.vespa.hosted.controller.application.ApplicationRotation;
import com.yahoo.vespa.hosted.controller.application.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.application.Change;
@@ -142,14 +143,21 @@ public class Application {
*/
public Change outstandingChange() { return outstandingChange; }
+ /** Returns ID of the last ownership issue filed for this */
public Optional<IssueId> ownershipIssueId() {
return ownershipIssueId;
}
+ /** Returns metrics for this */
public ApplicationMetrics metrics() {
return metrics;
}
+ /** Returns activity for this */
+ public ApplicationActivity activity() {
+ return ApplicationActivity.from(deployments.values());
+ }
+
/**
* Returns the oldest platform version this has deployed in a permanent zone (not test or staging).
*/
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationActivity.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationActivity.java
new file mode 100644
index 00000000000..ddd519382a6
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationActivity.java
@@ -0,0 +1,56 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.application;
+
+import java.time.Instant;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Optional;
+import java.util.function.Function;
+
+/**
+ * Recent activity in an application.
+ *
+ * @author mpolden
+ */
+public class ApplicationActivity {
+
+ public static final ApplicationActivity none = new ApplicationActivity(Optional.empty(), Optional.empty());
+
+ private final Optional<Instant> lastQueried;
+ private final Optional<Instant> lastWritten;
+
+ private ApplicationActivity(Optional<Instant> lastQueried, Optional<Instant> lastWritten) {
+ this.lastQueried = lastQueried;
+ this.lastWritten = lastWritten;
+ }
+
+ /** The last time any deployment in this was queried */
+ public Optional<Instant> lastQueried() {
+ return lastQueried;
+ }
+
+ /** The last time any deployment in this was written */
+ public Optional<Instant> lastWritten() {
+ return lastWritten;
+ }
+
+ public static ApplicationActivity from(Collection<Deployment> deployments) {
+ Optional<Instant> lastQueried = lastActivity(deployments, DeploymentActivity::lastQueried);
+ Optional<Instant> lastWritten = lastActivity(deployments, DeploymentActivity::lastWritten);
+ if (!lastQueried.isPresent() && !lastWritten.isPresent()) {
+ return none;
+ }
+ return new ApplicationActivity(lastQueried, lastWritten);
+ }
+
+ private static Optional<Instant> lastActivity(Collection<Deployment> deployments,
+ Function<DeploymentActivity, Optional<Instant>> activityField) {
+ return deployments.stream()
+ .map(Deployment::activity)
+ .map(activityField)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .max(Comparator.naturalOrder());
+ }
+
+}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 6b35e09e049..3eced6d943e 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -425,6 +425,11 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
metricsObject.setDouble("queryServiceQuality", application.metrics().queryServiceQuality());
metricsObject.setDouble("writeServiceQuality", application.metrics().writeServiceQuality());
+ // Activity
+ Cursor activity = object.setObject("activity");
+ application.activity().lastQueried().ifPresent(lastQueried -> activity.setLong("queriedAt", lastQueried.toEpochMilli()));
+ application.activity().lastWritten().ifPresent(lastQueried -> activity.setLong("writtenAt", lastQueried.toEpochMilli()));
+
application.ownershipIssueId().ifPresent(issueId -> object.setString("ownershipIssueId", issueId.value()));
application.deploymentJobs().issueId().ifPresent(issueId -> object.setString("deploymentIssueId", issueId.value()));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json
index 30070e509c7..f8c4c26d6a8 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json
@@ -249,5 +249,9 @@
"metrics": {
"queryServiceQuality": 0.5,
"writeServiceQuality": 0.7
+ },
+ "activity": {
+ "queriedAt": 1527848130000,
+ "writtenAt": 1527848130000
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json
index dabeb3239aa..fc0f83c2cdc 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json
@@ -234,5 +234,9 @@
"metrics": {
"queryServiceQuality": 0.5,
"writeServiceQuality": 0.7
+ },
+ "activity": {
+ "queriedAt": 1527848130000,
+ "writtenAt": 1527848130000
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json
index 174bb2f1ba7..8bb1ee83282 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json
@@ -222,6 +222,10 @@
"queryServiceQuality": 0.5,
"writeServiceQuality": 0.7
},
+ "activity": {
+ "queriedAt": 1527848130000,
+ "writtenAt": 1527848130000
+ },
"ownershipIssueId": "321",
"deploymentIssueId": "123"
}