From 1dbf36c4c6edae51b0070488088770f70c3760e3 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Fri, 23 Oct 2020 02:35:17 -0500 Subject: [PATCH] add grafana annotation client --- .../nosqlbench/engine/clients/grafana/By.java | 91 +++++++++++++++++++ .../clients/grafana/transfer/Annotations.java | 6 ++ .../clients/grafana/GrafanaClientTest.java | 32 +++++++ 3 files changed, 129 insertions(+) create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java create mode 100644 engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java create mode 100644 engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java new file mode 100644 index 000000000..110b251de --- /dev/null +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/By.java @@ -0,0 +1,91 @@ +package io.nosqlbench.engine.clients.grafana; + +import java.util.ArrayList; +import java.util.List; + +public class By { + + private final String key; + private final Object value; + + public By(String key, Object value) { + this.key = key; + this.value = value; + } + + /** + * epoch datetime in milliseconds + */ + public static By from(long epoch) { + return new By("from", epoch); + } + + /** + * epoch datetime in milliseconds + */ + public static By to(long epoch) { + return new By("to", epoch); + } + + /** + * number. Optional - default is 100. Max limit for results returned. + */ + public static By limit(long limit) { + return new By("limit", limit); + } + + /** + * Find annotations for a specified alert. + */ + public static By alertId(String id) { + return new By("alertId", id); + } + + public static By panelId(String panelId) { + return new By("panelId", panelId); + } + + public static By userId(String userId) { + return new By("userId", userId); + } + + public static By typeAnnotation() { + return new By("type", "annotation"); + } + + public static By typeAlert() { + return new By("type", "alert"); + } + + public static By tags(String tag) { + return new By("tags", tag); + } + + public static By id(int id) { + return new By("id", id); + } + + public static String urlEncoded(By... bys) { + List tags = new ArrayList<>(); + StringBuilder sb = new StringBuilder(); + for (By by : bys) { + if (by.key.equals("tags")) { + tags.add(by.value.toString()); + } + sb.append(by.key).append("=").append(by.value); + sb.append("&"); + } + for (String tag : tags) { + sb.append("tags=").append(tag).append("&"); + } + if (sb.length() > 0) { + sb.setLength(sb.length() - 1); + } + return sb.toString(); + } + + + public static String fields(By... by) { + return urlEncoded(by); + } +} diff --git a/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java new file mode 100644 index 000000000..02bcc093d --- /dev/null +++ b/engine-clients/src/main/java/io/nosqlbench/engine/clients/grafana/transfer/Annotations.java @@ -0,0 +1,6 @@ +package io.nosqlbench.engine.clients.grafana.transfer; + +import java.util.ArrayList; + +public class Annotations extends ArrayList { +} diff --git a/engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java b/engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java new file mode 100644 index 000000000..09681fa0e --- /dev/null +++ b/engine-clients/src/test/java/io/nosqlbench/engine/clients/grafana/GrafanaClientTest.java @@ -0,0 +1,32 @@ +package io.nosqlbench.engine.clients.grafana; + +import io.nosqlbench.engine.clients.grafana.transfer.Annotation; +import io.nosqlbench.engine.clients.grafana.transfer.Annotations; +import org.junit.Ignore; +import org.junit.Test; + +public class GrafanaClientTest { + private static final String testurl = "http://localhost:3000/"; + + @Test + @Ignore + public void testCreateAnnotation() { + GrafanaClient client = new GrafanaClient(testurl); + client.basicAuth("admin", "admin"); + Annotation a = new Annotation(); + a.setDashboardId(2); + a.setText("testingAnnotation"); + Annotation created = client.createAnnotation(a); + System.out.println(created); + } + + @Test + @Ignore + public void testFindAnnotations() { + GrafanaClient client = new GrafanaClient(testurl); + client.basicAuth("admin", "admin"); + Annotations annotations = client.findAnnotations(By.id(1)); + System.out.println(annotations); + + } +}