Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding metadata endpoint #1049

Merged
merged 17 commits into from
Jun 25, 2024
8 changes: 8 additions & 0 deletions sdk/src/main/java/io/dapr/client/DaprClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
package io.dapr.client;

import io.dapr.client.domain.ConfigurationItem;
import io.dapr.client.domain.DaprMetadata;
import io.dapr.client.domain.DeleteStateRequest;
import io.dapr.client.domain.ExecuteStateTransactionRequest;
import io.dapr.client.domain.GetBulkSecretRequest;
Expand Down Expand Up @@ -671,6 +672,13 @@ Flux<SubscribeConfigurationResponse> subscribeConfiguration(String storeName, Li
*/
<T extends AbstractStub<T>> T newGrpcStub(String appId, Function<Channel, T> stubBuilder);

/**
* Fetches Dapr Metadata from the metadata endpoint.
*
* @return DaprMetadata containing Dapr Metadata from the metadata endpoint.
*/
Mono<DaprMetadata> getMetadata();

/**
* Gracefully shutdown the dapr runtime.
*
Expand Down
55 changes: 51 additions & 4 deletions sdk/src/main/java/io/dapr/client/DaprClientImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
import io.dapr.client.domain.BulkPublishRequest;
import io.dapr.client.domain.BulkPublishResponse;
import io.dapr.client.domain.BulkPublishResponseFailedEntry;
import io.dapr.client.domain.ComponentMetadata;
import io.dapr.client.domain.ConfigurationItem;
import io.dapr.client.domain.DaprMetadata;
import io.dapr.client.domain.DeleteStateRequest;
import io.dapr.client.domain.ExecuteStateTransactionRequest;
import io.dapr.client.domain.GetBulkSecretRequest;
Expand All @@ -36,11 +38,13 @@
import io.dapr.client.domain.QueryStateItem;
import io.dapr.client.domain.QueryStateRequest;
import io.dapr.client.domain.QueryStateResponse;
import io.dapr.client.domain.RuleMetadata;
import io.dapr.client.domain.SaveStateRequest;
import io.dapr.client.domain.State;
import io.dapr.client.domain.StateOptions;
import io.dapr.client.domain.SubscribeConfigurationRequest;
import io.dapr.client.domain.SubscribeConfigurationResponse;
import io.dapr.client.domain.SubscriptionMetadata;
import io.dapr.client.domain.TransactionalStateOperation;
import io.dapr.client.domain.UnlockRequest;
import io.dapr.client.domain.UnlockResponseStatus;
Expand All @@ -58,6 +62,10 @@
import io.dapr.v1.CommonProtos;
import io.dapr.v1.DaprGrpc;
import io.dapr.v1.DaprProtos;
import io.dapr.v1.DaprProtos.PubsubSubscription;
import io.dapr.v1.DaprProtos.PubsubSubscriptionRule;
import io.dapr.v1.DaprProtos.RegisteredComponents;
import io.grpc.CallOptions;
import io.grpc.Channel;
import io.grpc.stub.AbstractStub;
import io.grpc.stub.StreamObserver;
Expand Down Expand Up @@ -118,7 +126,8 @@ public class DaprClientImpl extends AbstractDaprClient {
private final DaprHttp httpClient;

/**
* Default access level constructor, in order to create an instance of this class use io.dapr.client.DaprClientBuilder
* Default access level constructor, in order to create an instance of this
* class use io.dapr.client.DaprClientBuilder
*
* @param channel Facade for the managed GRPC channel
* @param asyncStub async gRPC stub
Expand Down Expand Up @@ -1169,8 +1178,7 @@ private ConfigurationItem buildConfigurationItem(
key,
configurationItem.getValue(),
configurationItem.getVersion(),
configurationItem.getMetadataMap()
);
configurationItem.getMetadataMap());
}

/**
Expand Down Expand Up @@ -1231,4 +1239,43 @@ public void onCompleted() {
}
};
}
}

@Override
public Mono<DaprMetadata> getMetadata() {
DaprProtos.GetMetadataRequest metadataRequest = DaprProtos.GetMetadataRequest.newBuilder().build();
return Mono.deferContextual(
context -> this.<DaprProtos.GetMetadataResponse>createMono(
it -> intercept(context, asyncStub).getMetadata(metadataRequest, it)))
.map(
it -> {
try {
return buildDaprMetadata(it);
} catch (IOException ex) {
throw DaprException.propagate(ex);
}
});
}

private DaprMetadata buildDaprMetadata(
DaprProtos.GetMetadataResponse response) throws IOException {
List<RegisteredComponents> registeredComponentsList = response.getRegisteredComponentsList();

List<ComponentMetadata> components = new ArrayList<>();
for (RegisteredComponents rc : registeredComponentsList) {
components.add(new ComponentMetadata(rc.getName(), rc.getType(), rc.getVersion()));
}

List<PubsubSubscription> subscriptionsList = response.getSubscriptionsList();
List<SubscriptionMetadata> subscriptions = new ArrayList<>();
for (PubsubSubscription s : subscriptionsList) {
List<PubsubSubscriptionRule> rulesList = s.getRules().getRulesList();
List<RuleMetadata> rules = new ArrayList<>();
for (PubsubSubscriptionRule r : rulesList) {
rules.add(new RuleMetadata(r.getPath()));
}
subscriptions.add(new SubscriptionMetadata(s.getTopic(), s.getPubsubName(), s.getDeadLetterTopic(), rules));
}

return new DaprMetadata(response.getId(), response.getRuntimeVersion(), components, subscriptions);
}
}
52 changes: 52 additions & 0 deletions sdk/src/main/java/io/dapr/client/domain/ComponentMetadata.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Copyright 2024 The Dapr Authors
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
limitations under the License.
*/

package io.dapr.client.domain;
salaboy marked this conversation as resolved.
Show resolved Hide resolved

import java.util.Objects;

/**
* ComponentMetadata describes a Dapr Component.
*/
public final class ComponentMetadata {

private String name;
private String type;
private String version;

/**
* Constructor for a ComponentMetadata.
*
* @param name of the component
* @param type component type
* @param version version of the component
*/
public ComponentMetadata(String name, String type, String version) {
this.name = name;
this.type = type;
this.version = version;
}

public String getName() {
return name;
}

public String getType() {
return type;
}

public String getVersion() {
return version;
}

}
62 changes: 62 additions & 0 deletions sdk/src/main/java/io/dapr/client/domain/DaprMetadata.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* Copyright 2024 The Dapr Authors
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
limitations under the License.
*/

package io.dapr.client.domain;
salaboy marked this conversation as resolved.
Show resolved Hide resolved

import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
* DaprMetadata describes the Dapr Metadata.
*/
public final class DaprMetadata {

private String id;
private String runtimeVersion;
private List<ComponentMetadata> components;
private List<SubscriptionMetadata> subscriptions;

/**
* Constructor for a DaprMetadata.
*
* @param id of the application
* @param runtimeVersion Dapr version
* @param components list of registered componnets
salaboy marked this conversation as resolved.
Show resolved Hide resolved
* @param subscriptions list of registered subscription
*/
public DaprMetadata(String id, String runtimeVersion, List<ComponentMetadata> components,
List<SubscriptionMetadata> subscriptions) {
this.id = id;
this.runtimeVersion = runtimeVersion;
this.components = components == null ? Collections.emptyList() : Collections.unmodifiableList(components);
this.subscriptions = subscriptions == null ? Collections.emptyList() : Collections.unmodifiableList(subscriptions);
}

public String getId() {
return id;
}

public String getRuntimeVersion() {
return runtimeVersion;
}

public List<ComponentMetadata> getComponents() {
return components;
}

public List<SubscriptionMetadata> getSubscriptions() {
return subscriptions;
}

}
30 changes: 30 additions & 0 deletions sdk/src/main/java/io/dapr/client/domain/RuleMetadata.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright 2024 The Dapr Authors
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
limitations under the License.
*/

package io.dapr.client.domain;
salaboy marked this conversation as resolved.
Show resolved Hide resolved

/**
* RuleMetadata describes the Subscription Rule's Metadata.
*/
public final class RuleMetadata {
private String path;

public RuleMetadata(String path) {
this.path = path;
}

public String getPath() {
return path;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* Copyright 2024 The Dapr Authors
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
limitations under the License.
*/

package io.dapr.client.domain;
salaboy marked this conversation as resolved.
Show resolved Hide resolved

import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
* SubscriptionMetadata describes the Subscription Metadata.
*/
public final class SubscriptionMetadata {
private String topic;
private String pubsubname;
private String deadLetterTopic;
private List<RuleMetadata> rules;

/**
* Constructor for a SubscriptionMetadata.
*
* @param topic of the pubsub component
* @param pubsubname component name
* @param deadLetterTopic dead letter topic
* @param rules subscription path rules
*/
public SubscriptionMetadata(String topic, String pubsubname, String deadLetterTopic, List<RuleMetadata> rules) {
this.topic = topic;
this.pubsubname = pubsubname;
this.deadLetterTopic = deadLetterTopic;
this.rules = rules == null ? Collections.emptyList() : Collections.unmodifiableList(rules);
}

public String getTopic() {
return topic;
}

public String getPubsubname() {
return pubsubname;
}


public String getDeadLetterTopic() {
return deadLetterTopic;
}


public List<RuleMetadata> getRules() {
return rules;
}

}
Loading
Loading