This is an automated email from the ASF dual-hosted git repository.

tanjian pushed a commit to branch service_props
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 01d8e216ded660a68e4f4e0c4c5c18e9a9dbce12
Author: Jared.Tan <jian....@daocloud.io>
AuthorDate: Thu Aug 29 10:09:17 2019 +0800

    agent support custom properties.
---
 .../skywalking/apm/agent/core/conf/Config.java     |  7 ++++
 .../remote/ServiceAndEndpointRegisterClient.java   | 15 ++++++-
 docs/en/setup/service-agent/java-agent/README.md   |  1 +
 .../register/service/ServiceInventoryRegister.java |  1 +
 .../handler/v6/grpc/RegisterServiceHandler.java    | 48 +++++++++++++++++-----
 5 files changed, 60 insertions(+), 12 deletions(-)

diff --git 
a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java
 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java
index 376ee6b..a0b57d0 100755
--- 
a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java
+++ 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java
@@ -110,6 +110,13 @@ public class Config {
          * Limit the length of the operationName to prevent errors when 
inserting elasticsearch
          **/
         public static int OPERATION_NAME_THRESHOLD = 500;
+
+        /*
+        * service properties
+        * e.g.
+        *   agent.properties[org]=apache
+        */
+        public static Map<String, String> PROPERTIES = new HashMap<String, 
String>();
     }
 
     public static class Collector {
diff --git 
a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java
 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java
index 51f98bd..5648047 100755
--- 
a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java
+++ 
b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/remote/ServiceAndEndpointRegisterClient.java
@@ -19,11 +19,12 @@
 package org.apache.skywalking.apm.agent.core.remote;
 
 import io.grpc.Channel;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
-
 import org.apache.skywalking.apm.agent.core.boot.BootService;
 import org.apache.skywalking.apm.agent.core.boot.DefaultImplementor;
 import org.apache.skywalking.apm.agent.core.boot.DefaultNamedThreadFactory;
@@ -39,6 +40,7 @@ import 
org.apache.skywalking.apm.agent.core.logging.api.LogManager;
 import org.apache.skywalking.apm.agent.core.os.OSUtil;
 import org.apache.skywalking.apm.network.common.Commands;
 import org.apache.skywalking.apm.network.common.KeyIntValuePair;
+import org.apache.skywalking.apm.network.common.KeyStringValuePair;
 import org.apache.skywalking.apm.network.register.v2.RegisterGrpc;
 import org.apache.skywalking.apm.network.register.v2.Service;
 import org.apache.skywalking.apm.network.register.v2.ServiceInstance;
@@ -58,6 +60,7 @@ import org.apache.skywalking.apm.util.StringUtil;
 public class ServiceAndEndpointRegisterClient implements BootService, 
Runnable, GRPCChannelListener {
     private static final ILog logger = 
LogManager.getLogger(ServiceAndEndpointRegisterClient.class);
     private static String INSTANCE_UUID;
+    private static List<KeyStringValuePair> SERVICE_PROPERTIES;
 
     private volatile GRPCChannelStatus status = GRPCChannelStatus.DISCONNECT;
     private volatile RegisterGrpc.RegisterBlockingStub registerBlockingStub;
@@ -84,6 +87,13 @@ public class ServiceAndEndpointRegisterClient implements 
BootService, Runnable,
 
         INSTANCE_UUID = StringUtil.isEmpty(Config.Agent.INSTANCE_UUID) ? 
UUID.randomUUID().toString()
             .replaceAll("-", "") : Config.Agent.INSTANCE_UUID;
+
+        SERVICE_PROPERTIES = new ArrayList<KeyStringValuePair>();
+
+        for (String key : Config.Agent.PROPERTIES.keySet()) {
+            SERVICE_PROPERTIES.add(KeyStringValuePair.newBuilder()
+                
.setKey(key).setValue(Config.Agent.PROPERTIES.get(key)).build());
+        }
     }
 
     @Override
@@ -129,7 +139,8 @@ public class ServiceAndEndpointRegisterClient implements 
BootService, Runnable,
                 if (RemoteDownstreamConfig.Agent.SERVICE_ID == 
DictionaryUtil.nullValue()) {
                     if (registerBlockingStub != null) {
                         ServiceRegisterMapping serviceRegisterMapping = 
registerBlockingStub.withDeadlineAfter(10, TimeUnit.SECONDS).doServiceRegister(
-                            
Services.newBuilder().addServices(Service.newBuilder().setServiceName(Config.Agent.SERVICE_NAME)).build());
+                            
Services.newBuilder().addServices(Service.newBuilder().setServiceName(Config.Agent.SERVICE_NAME)
+                                
.addAllProperties(SERVICE_PROPERTIES)).build());
                         if (serviceRegisterMapping != null) {
                             for (KeyIntValuePair registered : 
serviceRegisterMapping.getServicesList()) {
                                 if 
(Config.Agent.SERVICE_NAME.equals(registered.getKey())) {
diff --git a/docs/en/setup/service-agent/java-agent/README.md 
b/docs/en/setup/service-agent/java-agent/README.md
index 26e4c79..e2c4980 100755
--- a/docs/en/setup/service-agent/java-agent/README.md
+++ b/docs/en/setup/service-agent/java-agent/README.md
@@ -78,6 +78,7 @@ property key | Description | Default |
 `agent.cool_down_threshold `|How long should the agent wait (in minute) before 
re-registering to the OAP server after receiving reset command.|`10`|
 `agent.force_reconnection_period `|Force reconnection period of grpc, based on 
grpc_channel_check_interval.|`1`|
 `agent.operation_name_threshold `|The operationName max length, setting this 
value > 500 is not recommended.|`500`|
+`agent.properties[key]=value` | Add custom properties. | Not set|
 `collector.grpc_channel_check_interval`|grpc channel status check 
interval.|`30`|
 `collector.app_and_service_register_check_interval`|application and service 
registry check interval.|`3`|
 `collector.backend_service`|Collector SkyWalking trace receiver service 
addresses.|`127.0.0.1:11800`|
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java
index b5640b3..2d4447a 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java
@@ -85,6 +85,7 @@ public class ServiceInventoryRegister implements 
IServiceInventoryRegister {
             serviceInventory.setRegisterTime(now);
             serviceInventory.setHeartbeatTime(now);
             serviceInventory.setLastUpdateTime(now);
+            serviceInventory.setProperties(properties);
 
             InventoryStreamProcessor.getInstance().in(serviceInventory);
         }
diff --git 
a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java
 
b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java
index 6bdb842..3683523 100644
--- 
a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java
+++ 
b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v6/grpc/RegisterServiceHandler.java
@@ -20,20 +20,44 @@ package 
org.apache.skywalking.oap.server.receiver.register.provider.handler.v6.g
 
 import com.google.gson.JsonObject;
 import io.grpc.stub.StreamObserver;
-import java.util.*;
-import org.apache.skywalking.apm.network.common.*;
-import org.apache.skywalking.apm.network.register.v2.*;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.skywalking.apm.network.common.Commands;
+import org.apache.skywalking.apm.network.common.KeyIntValuePair;
+import org.apache.skywalking.apm.network.common.KeyStringValuePair;
+import org.apache.skywalking.apm.network.register.v2.EndpointMapping;
+import org.apache.skywalking.apm.network.register.v2.EndpointMappingElement;
+import org.apache.skywalking.apm.network.register.v2.Endpoints;
+import org.apache.skywalking.apm.network.register.v2.NetAddressMapping;
+import org.apache.skywalking.apm.network.register.v2.NetAddresses;
+import org.apache.skywalking.apm.network.register.v2.RegisterGrpc;
+import 
org.apache.skywalking.apm.network.register.v2.ServiceAndNetworkAddressMappings;
+import 
org.apache.skywalking.apm.network.register.v2.ServiceInstanceRegisterMapping;
+import org.apache.skywalking.apm.network.register.v2.ServiceInstances;
+import org.apache.skywalking.apm.network.register.v2.ServiceRegisterMapping;
+import org.apache.skywalking.apm.network.register.v2.Services;
 import org.apache.skywalking.apm.util.StringUtil;
-import org.apache.skywalking.oap.server.core.*;
-import org.apache.skywalking.oap.server.core.cache.*;
-import org.apache.skywalking.oap.server.core.register.*;
-import org.apache.skywalking.oap.server.core.register.service.*;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.CoreModule;
+import 
org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
+import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
+import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
+import org.apache.skywalking.oap.server.core.register.ServiceInventory;
+import 
org.apache.skywalking.oap.server.core.register.service.IEndpointInventoryRegister;
+import 
org.apache.skywalking.oap.server.core.register.service.INetworkAddressInventoryRegister;
+import 
org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
+import 
org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
 import org.apache.skywalking.oap.server.core.source.DetectPoint;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
-import org.slf4j.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import static 
org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.*;
+import static 
org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.HOST_NAME;
+import static 
org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.IPV4S;
+import static 
org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.LANGUAGE;
+import static 
org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.OS_NAME;
+import static 
org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.PROCESS_NO;
 
 /**
  * @author wusheng
@@ -62,10 +86,14 @@ public class RegisterServiceHandler extends 
RegisterGrpc.RegisterImplBase implem
         ServiceRegisterMapping.Builder builder = 
ServiceRegisterMapping.newBuilder();
         request.getServicesList().forEach(service -> {
             String serviceName = service.getServiceName();
+            JsonObject serviceProperties = new JsonObject();
+            for (KeyStringValuePair property : service.getPropertiesList()) {
+                serviceProperties.addProperty(property.getKey(), 
property.getValue());
+            }
             if (logger.isDebugEnabled()) {
                 logger.debug("Register service, service code: {}", 
serviceName);
             }
-            int serviceId = serviceInventoryRegister.getOrCreate(serviceName, 
null);
+            int serviceId = serviceInventoryRegister.getOrCreate(serviceName, 
serviceProperties);
 
             if (serviceId != Const.NONE) {
                 KeyIntValuePair value = 
KeyIntValuePair.newBuilder().setKey(serviceName).setValue(serviceId).build();

Reply via email to