Skip to content

Commit 44976f7

Browse files
committed
CR1 changes
1 parent 062a8a6 commit 44976f7

File tree

7 files changed

+144
-106
lines changed

7 files changed

+144
-106
lines changed

services-api/src/main/java/io/scalecube/services/ServiceInfo.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import java.util.Collections;
77
import java.util.HashMap;
88
import java.util.Map;
9+
import java.util.StringJoiner;
910

11+
@SuppressWarnings("rawtypes")
1012
public class ServiceInfo {
1113

1214
private final Object serviceInstance;
@@ -23,6 +25,10 @@ private ServiceInfo(Builder builder) {
2325
this.authenticator = builder.authenticator;
2426
}
2527

28+
public static Builder from(ServiceInfo serviceInfo) {
29+
return new Builder(serviceInfo);
30+
}
31+
2632
public static Builder fromServiceInstance(Object serviceInstance) {
2733
return new Builder(serviceInstance);
2834
}
@@ -47,13 +53,34 @@ public Authenticator authenticator() {
4753
return authenticator;
4854
}
4955

56+
@Override
57+
public String toString() {
58+
return new StringJoiner(", ", ServiceInfo.class.getSimpleName() + "[", "]")
59+
.add("serviceInstance=" + serviceInstance)
60+
.add("tags=" + tags)
61+
.add("errorMapper=" + errorMapper)
62+
.add("dataDecoder=" + dataDecoder)
63+
.add("authenticator=" + authenticator)
64+
.toString();
65+
}
66+
67+
@SuppressWarnings("rawtypes")
5068
public static class Builder {
51-
private final Object serviceInstance;
52-
private final Map<String, String> tags = new HashMap<>();
69+
70+
private Object serviceInstance;
71+
private Map<String, String> tags = new HashMap<>();
5372
private ServiceProviderErrorMapper errorMapper;
5473
private ServiceMessageDataDecoder dataDecoder;
5574
private Authenticator authenticator;
5675

76+
public Builder(ServiceInfo serviceInfo) {
77+
this.serviceInstance = serviceInfo.serviceInstance;
78+
this.tags.putAll(new HashMap<>(serviceInfo.tags));
79+
this.errorMapper = serviceInfo.errorMapper;
80+
this.dataDecoder = serviceInfo.dataDecoder;
81+
this.authenticator = serviceInfo.authenticator;
82+
}
83+
5784
public Builder(Object serviceInstance) {
5885
this.serviceInstance = serviceInstance;
5986
}

services-api/src/main/java/io/scalecube/services/methods/MethodInfo.java

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.scalecube.services.CommunicationMode;
44
import io.scalecube.services.api.Qualifier;
55
import java.lang.reflect.Type;
6+
import java.util.StringJoiner;
67

78
public final class MethodInfo {
89

@@ -97,33 +98,19 @@ public boolean isAuth() {
9798
return auth;
9899
}
99100

100-
/**
101-
* Shortened version of {@code toString} method.
102-
*
103-
* @return method info as string
104-
*/
105-
public String asString() {
106-
final StringBuilder sb = new StringBuilder("MethodInfo{");
107-
sb.append("qualifier='").append(qualifier).append('\'');
108-
sb.append(", auth=").append(auth);
109-
sb.append('}');
110-
return sb.toString();
111-
}
112-
113101
@Override
114102
public String toString() {
115-
final StringBuilder sb = new StringBuilder("MethodInfo{");
116-
sb.append("serviceName='").append(serviceName).append('\'');
117-
sb.append(", methodName='").append(methodName).append('\'');
118-
sb.append(", qualifier='").append(qualifier).append('\'');
119-
sb.append(", parameterizedReturnType=").append(parameterizedReturnType);
120-
sb.append(", isReturnTypeServiceMessage=").append(isReturnTypeServiceMessage);
121-
sb.append(", communicationMode=").append(communicationMode);
122-
sb.append(", parameterCount=").append(parameterCount);
123-
sb.append(", requestType=").append(requestType);
124-
sb.append(", isRequestTypeServiceMessage=").append(isRequestTypeServiceMessage);
125-
sb.append(", auth=").append(auth);
126-
sb.append('}');
127-
return sb.toString();
103+
return new StringJoiner(", ", MethodInfo.class.getSimpleName() + "[", "]")
104+
.add("serviceName='" + serviceName + "'")
105+
.add("methodName='" + methodName + "'")
106+
.add("qualifier='" + qualifier + "'")
107+
.add("parameterizedReturnType=" + parameterizedReturnType)
108+
.add("isReturnTypeServiceMessage=" + isReturnTypeServiceMessage)
109+
.add("communicationMode=" + communicationMode)
110+
.add("parameterCount=" + parameterCount)
111+
.add("requestType=" + requestType)
112+
.add("isRequestTypeServiceMessage=" + isRequestTypeServiceMessage)
113+
.add("auth=" + auth)
114+
.toString();
128115
}
129116
}

services-api/src/main/java/io/scalecube/services/methods/ServiceMethodInvoker.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
import io.scalecube.services.transport.api.ServiceMessageDataDecoder;
1010
import java.lang.reflect.InvocationTargetException;
1111
import java.lang.reflect.Method;
12-
import java.lang.reflect.Parameter;
1312
import java.util.Optional;
13+
import java.util.StringJoiner;
1414
import java.util.function.Consumer;
15-
import java.util.stream.Collectors;
16-
import java.util.stream.Stream;
1715
import org.reactivestreams.Publisher;
1816
import reactor.core.publisher.Flux;
1917
import reactor.core.publisher.Mono;
@@ -211,12 +209,13 @@ public MethodInfo methodInfo() {
211209

212210
@Override
213211
public String toString() {
214-
String classAndMethod = service.getClass().getCanonicalName() + "." + method.getName();
215-
String args =
216-
Stream.of(method.getParameters())
217-
.map(Parameter::getType)
218-
.map(Class::getSimpleName)
219-
.collect(Collectors.joining(", ", "(", ")"));
220-
return classAndMethod + args;
212+
return new StringJoiner(", ", ServiceMethodInvoker.class.getSimpleName() + "[", "]")
213+
.add("method=" + method)
214+
.add("service=" + service)
215+
.add("methodInfo=" + methodInfo)
216+
.add("errorMapper=" + errorMapper)
217+
.add("dataDecoder=" + dataDecoder)
218+
.add("authenticator=" + authenticator)
219+
.toString();
221220
}
222221
}
Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
package io.scalecube.services.methods;
22

3-
import io.scalecube.services.auth.Authenticator;
4-
import io.scalecube.services.exceptions.ServiceProviderErrorMapper;
5-
import io.scalecube.services.transport.api.ServiceMessageDataDecoder;
3+
import io.scalecube.services.ServiceInfo;
64
import java.util.List;
75

86
public interface ServiceMethodRegistry {
97

10-
@SuppressWarnings("rawtypes")
11-
void registerService(
12-
Object serviceInstance,
13-
ServiceProviderErrorMapper errorMapper,
14-
ServiceMessageDataDecoder dataDecoder,
15-
Authenticator authenticator);
8+
void registerService(ServiceInfo serviceInfo);
169

1710
boolean containsInvoker(String qualifier);
1811

1912
ServiceMethodInvoker getInvoker(String qualifier);
2013

2114
List<ServiceMethodInvoker> listInvokers();
15+
16+
List<ServiceInfo> listServices();
2217
}

services-discovery/src/main/java/io/scalecube/services/discovery/ScalecubeServiceDiscovery.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@ public void serialize(Message message, OutputStream stream) throws Exception {
363363
}
364364
}
365365

366+
@SuppressWarnings("unused")
366367
public interface MonitorMBean {
367368

368369
String getClusterConfig();

services/src/main/java/io/scalecube/services/Microservices.java

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.scalecube.services.exceptions.ServiceProviderErrorMapper;
99
import io.scalecube.services.gateway.Gateway;
1010
import io.scalecube.services.gateway.GatewayOptions;
11+
import io.scalecube.services.methods.MethodInfo;
1112
import io.scalecube.services.methods.ServiceMethodInvoker;
1213
import io.scalecube.services.methods.ServiceMethodRegistry;
1314
import io.scalecube.services.methods.ServiceMethodRegistryImpl;
@@ -226,10 +227,11 @@ private Mono<Microservices> start() {
226227

227228
private void registerInMethodRegistry(ServiceInfo serviceInfo) {
228229
methodRegistry.registerService(
229-
serviceInfo.serviceInstance(),
230-
Optional.ofNullable(serviceInfo.errorMapper()).orElse(errorMapper),
231-
Optional.ofNullable(serviceInfo.dataDecoder()).orElse(dataDecoder),
232-
Optional.ofNullable(serviceInfo.authenticator()).orElse(authenticator));
230+
ServiceInfo.from(serviceInfo)
231+
.errorMapper(Optional.ofNullable(serviceInfo.errorMapper()).orElse(errorMapper))
232+
.dataDecoder(Optional.ofNullable(serviceInfo.dataDecoder()).orElse(dataDecoder))
233+
.authenticator(Optional.ofNullable(serviceInfo.authenticator()).orElse(authenticator))
234+
.build());
233235
}
234236

235237
private Mono<GatewayBootstrap> startGateway(ServiceCall call) {
@@ -308,8 +310,8 @@ private Mono<Void> doShutdown() {
308310

309311
private Mono<Void> processBeforeDestroy() {
310312
return Mono.whenDelayError(
311-
methodRegistry.listInvokers().stream()
312-
.map(ServiceMethodInvoker::service)
313+
methodRegistry.listServices().stream()
314+
.map(ServiceInfo::serviceInstance)
313315
.map(s -> Mono.fromRunnable(() -> Injector.processBeforeDestroy(this, s)))
314316
.collect(Collectors.toList()));
315317
}
@@ -644,13 +646,16 @@ private Mono<Void> shutdown() {
644646
}
645647
}
646648

649+
@SuppressWarnings("unused")
647650
public interface MonitorMBean {
648651

649652
String getServiceEndpoint();
650653

651654
String getAllServiceEndpoints();
652655

653656
String getServiceMethodInvokers();
657+
658+
String getServiceInfos();
654659
}
655660

656661
private static class JmxMonitorMBean implements MonitorMBean {
@@ -689,18 +694,39 @@ public String getServiceMethodInvokers() {
689694
.collect(Collectors.joining(",", "[", "]"));
690695
}
691696

697+
@Override
698+
public String getServiceInfos() {
699+
return microservices.methodRegistry.listServices().stream()
700+
.map(JmxMonitorMBean::asString)
701+
.collect(Collectors.joining(",", "[", "]"));
702+
}
703+
692704
private static String asString(ServiceMethodInvoker invoker) {
693705
return new StringJoiner(", ", ServiceMethodInvoker.class.getSimpleName() + "[", "]")
694-
.add("methodInfo=" + invoker.methodInfo().asString())
706+
.add("methodInfo=" + asString(invoker.methodInfo()))
695707
.add(
696-
"serviceMethod='"
708+
"serviceMethod="
697709
+ invoker.service().getClass().getCanonicalName()
698710
+ "."
699711
+ invoker.methodInfo().methodName()
700712
+ "("
701713
+ invoker.methodInfo().parameterCount()
702-
+ ")"
703-
+ "'")
714+
+ ")")
715+
.toString();
716+
}
717+
718+
private static String asString(MethodInfo methodInfo) {
719+
return new StringJoiner(", ", MethodInfo.class.getSimpleName() + "[", "]")
720+
.add("qualifier=" + methodInfo.qualifier())
721+
.add("auth=" + methodInfo.isAuth())
722+
.toString();
723+
}
724+
725+
private static String asString(ServiceInfo serviceInfo) {
726+
return new StringJoiner(", ", ServiceMethodInvoker.class.getSimpleName() + "[", "]")
727+
.add("serviceInstance=" + serviceInfo.serviceInstance())
728+
.add("tags=tags(" + serviceInfo.tags().size() + ")")
729+
.add("authenticator=" + serviceInfo.authenticator())
704730
.toString();
705731
}
706732
}

0 commit comments

Comments
 (0)