You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by lu...@apache.org on 2022/04/30 12:56:48 UTC
[skywalking] 22/25: support UI Template
This is an automated email from the ASF dual-hosted git repository.
lujiajing pushed a commit to branch banyandb-integration-stream
in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit fe289acdc5faf816157eab25903524c3a1f45245
Author: Megrez Lu <lu...@gmail.com>
AuthorDate: Fri Apr 22 11:18:03 2022 +0800
support UI Template
---
.../plugin/banyandb/BanyanDBIndexInstaller.java | 4 +-
.../plugin/banyandb/BanyanDBManagementDAO.java | 4 +-
.../plugin/banyandb/BanyanDBStorageClient.java | 60 +++++++++++-
.../plugin/banyandb/BanyanDBStorageProvider.java | 2 +-
.../measure/BanyanDBUITemplateManagementDAO.java | 108 +++++++++++++++++++--
.../banyandb/stream/AbstractBanyanDBDAO.java | 7 +-
6 files changed, 163 insertions(+), 22 deletions(-)
diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBIndexInstaller.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBIndexInstaller.java
index d894c9990a..32f3480769 100644
--- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBIndexInstaller.java
+++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBIndexInstaller.java
@@ -31,6 +31,8 @@ import org.apache.skywalking.oap.server.core.storage.model.ModelInstaller;
import org.apache.skywalking.oap.server.library.client.Client;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import java.io.IOException;
+
@Slf4j
public class BanyanDBIndexInstaller extends ModelInstaller {
private final ConfigService configService;
@@ -75,7 +77,7 @@ public class BanyanDBIndexInstaller extends ModelInstaller {
} else if (!model.isTimeSeries()) { // UITemplate
log.info("skip property index {}", model.getName());
}
- } catch (BanyanDBException ex) {
+ } catch (IOException ex) {
throw new StorageException("fail to install schema", ex);
}
}
diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBManagementDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBManagementDAO.java
index 080bf4577a..44a5f91874 100644
--- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBManagementDAO.java
+++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBManagementDAO.java
@@ -1,6 +1,7 @@
package org.apache.skywalking.oap.server.storage.plugin.banyandb;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.oap.server.core.analysis.management.ManagementData;
import org.apache.skywalking.oap.server.core.storage.IManagementDAO;
import org.apache.skywalking.oap.server.core.storage.model.Model;
@@ -9,12 +10,13 @@ import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
import java.io.IOException;
@RequiredArgsConstructor
+@Slf4j
public class BanyanDBManagementDAO implements IManagementDAO {
private final BanyanDBStorageClient client;
private final StorageBuilder<ManagementData> storageBuilder;
@Override
public void insert(Model model, ManagementData storageData) throws IOException {
-
+ log.info("insert Model {}", model);
}
}
diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
index dd92c6fd08..2df53a2ed9 100644
--- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
+++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageClient.java
@@ -18,12 +18,14 @@
package org.apache.skywalking.oap.server.storage.plugin.banyandb;
+import io.grpc.Status;
import org.apache.skywalking.banyandb.v1.client.BanyanDBClient;
import org.apache.skywalking.banyandb.v1.client.StreamBulkWriteProcessor;
import org.apache.skywalking.banyandb.v1.client.StreamQuery;
import org.apache.skywalking.banyandb.v1.client.StreamQueryResponse;
import org.apache.skywalking.banyandb.v1.client.StreamWrite;
import org.apache.skywalking.banyandb.v1.client.grpc.exception.BanyanDBException;
+import org.apache.skywalking.banyandb.v1.client.metadata.Property;
import org.apache.skywalking.banyandb.v1.client.metadata.Stream;
import org.apache.skywalking.oap.server.library.client.Client;
import org.apache.skywalking.oap.server.library.client.healthcheck.DelegatedHealthChecker;
@@ -31,6 +33,8 @@ import org.apache.skywalking.oap.server.library.client.healthcheck.HealthCheckab
import org.apache.skywalking.oap.server.library.util.HealthChecker;
import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
/**
* BanyanDBStorageClient is a simple wrapper for the underlying {@link BanyanDBClient},
@@ -54,19 +58,67 @@ public class BanyanDBStorageClient implements Client, HealthCheckable {
this.client.close();
}
- public StreamQueryResponse query(StreamQuery streamQuery) throws BanyanDBException {
+ public List<Property> listProperties(String group, String name) throws IOException {
+ try {
+ List<Property> properties = this.client.findProperties(group, name);
+ this.healthChecker.health();
+ return properties;
+ } catch (BanyanDBException ex) {
+ if (ex.getStatus().equals(Status.Code.NOT_FOUND)) {
+ this.healthChecker.health();
+ return Collections.emptyList();
+ }
+
+ healthChecker.unHealth(ex);
+ throw new IOException("fail to list properties", ex);
+ }
+ }
+
+ public Property queryProperty(String group, String name, String id) throws IOException {
+ try {
+ Property p = this.client.findProperty(group, name, id);
+ this.healthChecker.health();
+ return p;
+ } catch (BanyanDBException ex) {
+ if (ex.getStatus().equals(Status.Code.NOT_FOUND)) {
+ this.healthChecker.health();
+ return null;
+ }
+
+ healthChecker.unHealth(ex);
+ throw new IOException("fail to query property", ex);
+ }
+ }
+
+ public StreamQueryResponse query(StreamQuery streamQuery) throws IOException {
try {
StreamQueryResponse response = this.client.query(streamQuery);
this.healthChecker.health();
return response;
} catch (BanyanDBException ex) {
healthChecker.unHealth(ex);
- throw ex;
+ throw new IOException("fail to query stream", ex);
+ }
+ }
+
+ public void define(Property property) throws IOException {
+ try {
+ this.client.save(property);
+ this.healthChecker.health();
+ } catch (BanyanDBException ex) {
+ healthChecker.unHealth(ex);
+ throw new IOException("fail to define property", ex);
}
}
- public void define(Stream stream) throws BanyanDBException {
- this.client.define(stream);
+ public void define(Stream stream) throws IOException {
+ try {
+ this.client.define(stream);
+ this.healthChecker.health();
+ } catch (BanyanDBException ex) {
+ healthChecker.unHealth(ex);
+ throw new IOException("fail to define stream", ex);
+ }
}
public void write(StreamWrite streamWrite) {
diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java
index 88a81d3372..26c0e8d501 100644
--- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java
+++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBStorageProvider.java
@@ -115,7 +115,7 @@ public class BanyanDBStorageProvider extends ModuleProvider {
this.registerServiceImplementation(IProfileTaskQueryDAO.class, new BanyanDBProfileTaskQueryDAO());
this.registerServiceImplementation(IProfileTaskLogQueryDAO.class, new BanyanDBProfileTaskLogQueryDAO(client, this.config.getFetchTaskLogMaxSize()));
this.registerServiceImplementation(IProfileThreadSnapshotQueryDAO.class, new BanyanDBProfileThreadSnapshotQueryDAO(client));
- this.registerServiceImplementation(UITemplateManagementDAO.class, new BanyanDBUITemplateManagementDAO());
+ this.registerServiceImplementation(UITemplateManagementDAO.class, new BanyanDBUITemplateManagementDAO(client));
this.registerServiceImplementation(IEventQueryDAO.class, new BanyanDBEventQueryDAO());
this.registerServiceImplementation(ITopologyQueryDAO.class, new BanyanDBTopologyQueryDAO());
this.registerServiceImplementation(IEBPFProfilingTaskDAO.class, new BanyanDBEBPFProfilingTaskDAO());
diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBUITemplateManagementDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBUITemplateManagementDAO.java
index efbd9ce106..dba7844413 100644
--- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBUITemplateManagementDAO.java
+++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBUITemplateManagementDAO.java
@@ -18,38 +18,128 @@
package org.apache.skywalking.oap.server.storage.plugin.banyandb.measure;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.banyandb.v1.client.TagAndValue;
+import org.apache.skywalking.banyandb.v1.client.metadata.Property;
+import org.apache.skywalking.oap.server.core.management.ui.template.UITemplate;
import org.apache.skywalking.oap.server.core.query.input.DashboardSetting;
import org.apache.skywalking.oap.server.core.query.type.DashboardConfiguration;
import org.apache.skywalking.oap.server.core.query.type.TemplateChangeStatus;
import org.apache.skywalking.oap.server.core.storage.management.UITemplateManagementDAO;
+import org.apache.skywalking.oap.server.library.util.BooleanUtils;
+import org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
+import org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.AbstractBanyanDBDAO;
import java.io.IOException;
-import java.util.Collections;
import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+public class BanyanDBUITemplateManagementDAO extends AbstractBanyanDBDAO implements UITemplateManagementDAO {
+ private static final String GROUP = "sw";
+
+ public BanyanDBUITemplateManagementDAO(BanyanDBStorageClient client) {
+ super(client);
+ }
-public class BanyanDBUITemplateManagementDAO implements UITemplateManagementDAO {
@Override
public DashboardConfiguration getTemplate(String id) throws IOException {
- return null;
+ Property p = getClient().queryProperty(GROUP, UITemplate.INDEX_NAME, id);
+ if (p == null) {
+ return null;
+ }
+ return fromEntity(parse(p));
}
@Override
public List<DashboardConfiguration> getAllTemplates(Boolean includingDisabled) throws IOException {
- return Collections.emptyList();
+ List<Property> propertyList = getClient().listProperties(GROUP, UITemplate.INDEX_NAME);
+ return propertyList.stream().map(p -> fromEntity(parse(p)))
+ .filter(conf -> includingDisabled || !conf.isDisabled())
+ .collect(Collectors.toList());
}
@Override
- public TemplateChangeStatus addTemplate(DashboardSetting setting) throws IOException {
- return null;
+ public TemplateChangeStatus addTemplate(DashboardSetting setting) {
+ Property newTemplate = convert(setting.toEntity());
+ try {
+ this.getClient().define(newTemplate);
+ return TemplateChangeStatus.builder()
+ .status(true)
+ .id(newTemplate.id())
+ .build();
+ } catch (IOException ioEx) {
+ log.error("fail to add new template", ioEx);
+ return TemplateChangeStatus.builder().status(false).id(setting.getId()).message("Can't add a new template")
+ .build();
+ }
}
@Override
- public TemplateChangeStatus changeTemplate(DashboardSetting setting) throws IOException {
- return null;
+ public TemplateChangeStatus changeTemplate(DashboardSetting setting) {
+ Property newTemplate = convert(setting.toEntity());
+ try {
+ this.getClient().define(newTemplate);
+ return TemplateChangeStatus.builder()
+ .status(true)
+ .id(newTemplate.id())
+ .build();
+ } catch (IOException ioEx) {
+ log.error("fail to modify the template", ioEx);
+ return TemplateChangeStatus.builder().status(false).id(setting.getId()).message("Can't change an existed template")
+ .build();
+ }
}
@Override
public TemplateChangeStatus disableTemplate(String id) throws IOException {
- return null;
+ Property oldProperty = this.getClient().queryProperty(GROUP, UITemplate.INDEX_NAME, id);
+ if (oldProperty == null) {
+ return TemplateChangeStatus.builder().status(false).id(id).message("Can't find the template")
+ .build();
+ }
+ UITemplate uiTemplate = parse(oldProperty);
+ uiTemplate.setDisabled(BooleanUtils.FALSE);
+ try {
+ this.getClient().define(convert(uiTemplate));
+ return TemplateChangeStatus.builder()
+ .status(true)
+ .id(uiTemplate.id())
+ .build();
+ } catch (IOException ioEx) {
+ log.error("fail to disable the template", ioEx);
+ return TemplateChangeStatus.builder().status(false).id(uiTemplate.id()).message("Can't disable the template")
+ .build();
+ }
+ }
+
+ public DashboardConfiguration fromEntity(UITemplate uiTemplate) {
+ DashboardConfiguration conf = new DashboardConfiguration();
+ conf.fromEntity(uiTemplate);
+ return conf;
+ }
+
+ public UITemplate parse(Property property) {
+ UITemplate uiTemplate = new UITemplate();
+ uiTemplate.setTemplateId(property.id());
+
+ for (TagAndValue<?> tagAndValue : property.tags()) {
+ if (tagAndValue.getTagName().equals(UITemplate.CONFIGURATION)) {
+ uiTemplate.setConfiguration((String) tagAndValue.getValue());
+ } else if (tagAndValue.getTagName().equals(UITemplate.DISABLED)) {
+ uiTemplate.setDisabled(((Number) tagAndValue.getValue()).intValue());
+ } else if (tagAndValue.getTagName().equals(UITemplate.UPDATE_TIME)) {
+ uiTemplate.setUpdateTime(((Number) tagAndValue.getValue()).longValue());
+ }
+ }
+ return uiTemplate;
+ }
+
+ public Property convert(UITemplate uiTemplate) {
+ return Property.create(GROUP, UITemplate.INDEX_NAME, uiTemplate.id())
+ .addTag(TagAndValue.newStringTag(UITemplate.CONFIGURATION, uiTemplate.getConfiguration()))
+ .addTag(TagAndValue.newLongTag(UITemplate.DISABLED, uiTemplate.getDisabled()))
+ .addTag(TagAndValue.newLongTag(UITemplate.UPDATE_TIME, uiTemplate.getUpdateTime()))
+ .build();
}
}
diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java
index c40ac35924..53e8cc4f80 100644
--- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java
+++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/AbstractBanyanDBDAO.java
@@ -22,7 +22,6 @@ import org.apache.skywalking.banyandb.v1.client.PairQueryCondition;
import org.apache.skywalking.banyandb.v1.client.StreamQuery;
import org.apache.skywalking.banyandb.v1.client.StreamQueryResponse;
import org.apache.skywalking.banyandb.v1.client.TimestampRange;
-import org.apache.skywalking.banyandb.v1.client.grpc.exception.BanyanDBException;
import org.apache.skywalking.oap.server.core.storage.AbstractDAO;
import org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
import org.apache.skywalking.oap.server.storage.plugin.banyandb.MetadataRegistry;
@@ -55,11 +54,7 @@ public abstract class AbstractBanyanDBDAO extends AbstractDAO<BanyanDBStorageCli
builder.apply(query);
- try {
- return getClient().query(query);
- } catch (BanyanDBException ex) {
- throw new IOException(ex);
- }
+ return getClient().query(query);
}
protected abstract static class QueryBuilder {