aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorMichael H. Gimle <michael@gimle.io>2019-08-06 15:38:49 +0200
committerGitHub <noreply@github.com>2019-08-06 15:38:49 +0200
commita3118293c12db437b83abddac401199ee4408172 (patch)
tree46a874b60c30a886b867238499bdfa8499bca558 /controller-api
parent496b13cb2e8dae4f9402d4bf11bbe97b5caec8ee (diff)
parent881dba1b59163b5a42537d93d17a020b28ed9631 (diff)
Merge pull request #10131 from vespa-engine/mgimle/aws-event-fetcher
Automatically file a JIRA ticket for AWS events.
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/AwsEventFetcher.java11
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/CloudEvent.java30
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockAwsEventFetcher.java19
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/package-info.java5
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java5
6 files changed, 78 insertions, 0 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/AwsEventFetcher.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/AwsEventFetcher.java
new file mode 100644
index 00000000000..d17f046c5ca
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/AwsEventFetcher.java
@@ -0,0 +1,11 @@
+package com.yahoo.vespa.hosted.controller.api.integration.aws;
+
+import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.api.integration.organization.Issue;
+
+import java.util.List;
+
+public interface AwsEventFetcher {
+ List<CloudEvent> getEvents(ZoneId zoneId);
+ Issue createIssue(CloudEvent event);
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/CloudEvent.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/CloudEvent.java
new file mode 100644
index 00000000000..59fd84aec74
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/CloudEvent.java
@@ -0,0 +1,30 @@
+package com.yahoo.vespa.hosted.controller.api.integration.aws;
+
+import java.util.Date;
+import java.util.Optional;
+import java.util.Set;
+
+public final class CloudEvent {
+ public final String instanceEventId;
+ public final String code;
+ public final String description;
+ public final Optional<Date> notBefore;
+ public final Optional<Date> notBeforeDeadline;
+ public final Optional<Date> notAfter;
+
+ public String awsRegionName;
+ public Set<String> affectedHostnames;
+
+ public CloudEvent(String instanceEventId, String code, String description, Date notAfter, Date notBefore, Date notBeforeDeadline,
+ String awsRegionName, Set<String> affectedHostnames) {
+ this.instanceEventId = instanceEventId;
+ this.code = code;
+ this.description = description;
+ this.notBefore = Optional.ofNullable(notBefore);
+ this.notBeforeDeadline = Optional.ofNullable(notBeforeDeadline);
+ this.notAfter = Optional.ofNullable(notAfter);
+
+ this.awsRegionName = awsRegionName;
+ this.affectedHostnames = affectedHostnames;
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockAwsEventFetcher.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockAwsEventFetcher.java
new file mode 100644
index 00000000000..73b1942de44
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockAwsEventFetcher.java
@@ -0,0 +1,19 @@
+package com.yahoo.vespa.hosted.controller.api.integration.aws;
+
+import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.api.integration.organization.Issue;
+
+import java.util.List;
+import java.util.Optional;
+
+public class MockAwsEventFetcher implements AwsEventFetcher {
+ @Override
+ public List<CloudEvent> getEvents(ZoneId zoneId) {
+ return List.of();
+ }
+
+ @Override
+ public Issue createIssue(CloudEvent event) {
+ return new Issue("summary", "description", "VESPA", Optional.empty());
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/package-info.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/package-info.java
new file mode 100644
index 00000000000..31aa5291547
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+package com.yahoo.vespa.hosted.controller.api.integration.aws;
+
+import com.yahoo.osgi.annotation.ExportPackage;
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java
index db4f0eb5c59..80e23249daa 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/IssueHandler.java
@@ -83,4 +83,12 @@ public interface IssueHandler {
*/
Optional<User> escalate(IssueId issueId, Contact contact);
+ /**
+ * Returns whether there exists an issue with an exactly matching summary.
+ *
+ * @param issue The summary of the issue.
+ * @return Whether the issue exists.
+ */
+ boolean issueExists(Issue issue);
+
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java
index 674523ba26b..2e92c993686 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockIssueHandler.java
@@ -101,6 +101,11 @@ public class MockIssueHandler implements IssueHandler {
return Optional.empty();
}
+ @Override
+ public boolean issueExists(Issue issue) {
+ return issues.values().stream().anyMatch(i -> i.issue.summary().equals(issue.summary()));
+ }
+
public MockIssueHandler close(IssueId issueId) {
issues.get(issueId).open = false;
touch(issueId);