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 991694868381e4183398bfe3c4dab946a3004767 Author: Megrez Lu <[email protected]> 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 {
