You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/01/13 07:01:02 UTC
[incubator-skywalking] 01/01: Refactor service instance inventory
to properties based entity.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch instance-extend
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
commit 1fccc33596834833674bbb5cada48d2d647a5e56
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Sun Jan 13 15:00:49 2019 +0800
Refactor service instance inventory to properties based entity.
---
.../skywalking/apm/agent/core/os/OSUtil.java | 7 +-
.../server/core/query/entity/LanguageTrans.java | 33 ++-------
.../core/register/ServiceInstanceInventory.java | 80 ++++++++++------------
.../service/IServiceInstanceInventoryRegister.java | 4 +-
.../service/ServiceInstanceInventoryRegister.java | 8 +--
.../mesh/ServiceMeshMetricDataDecorator.java | 9 +--
.../v5/grpc/InstanceDiscoveryServiceHandler.java | 15 ++--
.../v5/rest/InstanceDiscoveryServletHandler.java | 28 ++++----
.../handler/v6/grpc/RegisterServiceHandler.java | 36 ++++++----
.../receiver/zipkin/ZipkinTraceOSInfoBuilder.java | 9 +--
.../transform/SpringSleuthSegmentBuilderTest.java | 2 +-
.../elasticsearch/query/MetadataQueryEsDAO.java | 43 ++++++++----
.../plugin/jdbc/h2/dao/H2MetadataQueryDAO.java | 40 +++++++----
13 files changed, 164 insertions(+), 150 deletions(-)
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/os/OSUtil.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/os/OSUtil.java
index 0f4a1cb..8a2fde4 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/os/OSUtil.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/os/OSUtil.java
@@ -100,11 +100,11 @@ public class OSUtil {
String osName = getOsName();
if (osName != null) {
- osInfo.add(KeyStringValuePair.newBuilder().setKey("OSName").setValue(osName).build());
+ osInfo.add(KeyStringValuePair.newBuilder().setKey("os_name").setValue(osName).build());
}
String hostName = getHostName();
if (hostName != null) {
- osInfo.add(KeyStringValuePair.newBuilder().setKey("hostname").setValue(hostName).build());
+ osInfo.add(KeyStringValuePair.newBuilder().setKey("host_name").setValue(hostName).build());
}
List<String> allIPV4 = getAllIPV4();
if (allIPV4.size() > 0) {
@@ -112,7 +112,8 @@ public class OSUtil {
osInfo.add(KeyStringValuePair.newBuilder().setKey("ipv4").setValue(ipv4).build());
}
}
- osInfo.add(KeyStringValuePair.newBuilder().setKey("ProcessNo").setValue(getProcessNo() + "").build());
+ osInfo.add(KeyStringValuePair.newBuilder().setKey("process_no").setValue(getProcessNo() + "").build());
+ osInfo.add(KeyStringValuePair.newBuilder().setKey("language").setValue("java").build());
return osInfo;
}
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LanguageTrans.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LanguageTrans.java
index f979ef4..369fb52 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LanguageTrans.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LanguageTrans.java
@@ -24,38 +24,17 @@ package org.apache.skywalking.oap.server.core.query.entity;
public enum LanguageTrans {
INSTANCE;
- public int id(Language language) {
+ public Language value(String language) {
switch (language) {
- case UNKNOWN:
- return 1;
- case JAVA:
- return 2;
- case DOTNET:
- return 3;
- case NODEJS:
- return 4;
- case PYTHON:
- return 5;
- case RUBY:
- return 6;
- default:
- return 1;
- }
- }
-
- public Language value(int id) {
- switch (id) {
- case 1:
- return Language.UNKNOWN;
- case 2:
+ case "java":
return Language.JAVA;
- case 3:
+ case ".net":
return Language.DOTNET;
- case 4:
+ case "nodejs":
return Language.NODEJS;
- case 5:
+ case "python":
return Language.PYTHON;
- case 6:
+ case "ruby":
return Language.RUBY;
default:
return Language.UNKNOWN;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java
index 4e86974..196a674 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInstanceInventory.java
@@ -18,7 +18,7 @@
package org.apache.skywalking.oap.server.core.register;
-import com.google.gson.Gson;
+import com.google.gson.*;
import com.google.gson.reflect.TypeToken;
import java.util.*;
import lombok.*;
@@ -47,23 +47,17 @@ public class ServiceInstanceInventory extends RegisterSource {
public static final String SERVICE_ID = "service_id";
private static final String IS_ADDRESS = "is_address";
private static final String ADDRESS_ID = "address_id";
- public static final String OS_NAME = "os_name";
- public static final String HOST_NAME = "host_name";
- public static final String PROCESS_NO = "process_no";
- public static final String IPV4S = "ipv4s";
- public static final String LANGUAGE = "language";
+ public static final String PROPERTIES = "properties";
+ private static final Gson GSON = new Gson();
@Setter @Getter @Column(columnName = INSTANCE_UUID, matchQuery = true)
private String instanceUUID = Const.EMPTY_STRING;
@Setter @Getter @Column(columnName = NAME) private String name = Const.EMPTY_STRING;
@Setter @Getter @Column(columnName = SERVICE_ID) private int serviceId;
- @Setter @Getter @Column(columnName = LANGUAGE) private int language;
@Setter @Getter @Column(columnName = IS_ADDRESS) private int isAddress;
@Setter @Getter @Column(columnName = ADDRESS_ID) private int addressId;
- @Setter @Getter @Column(columnName = OS_NAME) private String osName;
- @Setter @Getter @Column(columnName = HOST_NAME) private String hostName;
- @Setter @Getter @Column(columnName = PROCESS_NO) private int processNo;
- @Setter @Getter @Column(columnName = IPV4S) private String ipv4s;
+ @Getter(AccessLevel.PRIVATE) @Column(columnName = PROPERTIES) private String prop;
+ @Getter private JsonObject properties;
public static String buildId(int serviceId, String uuid) {
return serviceId + Const.ID_SPLIT + uuid + Const.ID_SPLIT + BooleanUtils.FALSE + Const.ID_SPLIT + Const.NONE;
@@ -90,6 +84,25 @@ public class ServiceInstanceInventory extends RegisterSource {
return result;
}
+ public void setProperties(JsonObject properties) {
+ this.properties = properties;
+ if (properties != null && properties.keySet().size() > 0) {
+ this.prop = properties.toString();
+ }
+ }
+
+ private void setProp(String prop) {
+ this.prop = prop;
+ if (!Strings.isNullOrEmpty(prop)) {
+ this.properties = GSON.fromJson(prop, JsonObject.class);
+ }
+ }
+
+ public boolean hasProperties() {
+ return prop != null && prop.length() > 0;
+ }
+
+
@Override public boolean equals(Object obj) {
if (this == obj)
return true;
@@ -115,38 +128,30 @@ public class ServiceInstanceInventory extends RegisterSource {
RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
remoteBuilder.addDataIntegers(getSequence());
remoteBuilder.addDataIntegers(serviceId);
- remoteBuilder.addDataIntegers(language);
remoteBuilder.addDataIntegers(isAddress);
remoteBuilder.addDataIntegers(addressId);
- remoteBuilder.addDataIntegers(processNo);
remoteBuilder.addDataLongs(getRegisterTime());
remoteBuilder.addDataLongs(getHeartbeatTime());
remoteBuilder.addDataStrings(Strings.isNullOrEmpty(name) ? Const.EMPTY_STRING : name);
- remoteBuilder.addDataStrings(Strings.isNullOrEmpty(osName) ? Const.EMPTY_STRING : osName);
- remoteBuilder.addDataStrings(Strings.isNullOrEmpty(hostName) ? Const.EMPTY_STRING : hostName);
- remoteBuilder.addDataStrings(Strings.isNullOrEmpty(ipv4s) ? Const.EMPTY_STRING : ipv4s);
remoteBuilder.addDataStrings(Strings.isNullOrEmpty(instanceUUID) ? Const.EMPTY_STRING : instanceUUID);
+ remoteBuilder.addDataStrings(Strings.isNullOrEmpty(prop) ? Const.EMPTY_STRING : prop);
return remoteBuilder;
}
@Override public void deserialize(RemoteData remoteData) {
setSequence(remoteData.getDataIntegers(0));
setServiceId(remoteData.getDataIntegers(1));
- setLanguage(remoteData.getDataIntegers(2));
- setIsAddress(remoteData.getDataIntegers(3));
- setAddressId(remoteData.getDataIntegers(4));
- setProcessNo(remoteData.getDataIntegers(5));
+ setIsAddress(remoteData.getDataIntegers(2));
+ setAddressId(remoteData.getDataIntegers(3));
setRegisterTime(remoteData.getDataLongs(0));
setHeartbeatTime(remoteData.getDataLongs(1));
setName(remoteData.getDataStrings(0));
- setOsName(remoteData.getDataStrings(1));
- setHostName(remoteData.getDataStrings(2));
- setIpv4s(remoteData.getDataStrings(3));
- setInstanceUUID(remoteData.getDataStrings(4));
+ setInstanceUUID(remoteData.getDataStrings(1));
+ setProp(remoteData.getDataStrings(2));
}
@Override public int remoteHashCode() {
@@ -159,19 +164,15 @@ public class ServiceInstanceInventory extends RegisterSource {
ServiceInstanceInventory inventory = new ServiceInstanceInventory();
inventory.setSequence((Integer)dbMap.get(SEQUENCE));
inventory.setServiceId((Integer)dbMap.get(SERVICE_ID));
- inventory.setLanguage((Integer)dbMap.get(LANGUAGE));
inventory.setIsAddress((Integer)dbMap.get(IS_ADDRESS));
inventory.setAddressId((Integer)dbMap.get(ADDRESS_ID));
- inventory.setProcessNo((Integer)dbMap.get(PROCESS_NO));
inventory.setRegisterTime((Long)dbMap.get(REGISTER_TIME));
inventory.setHeartbeatTime((Long)dbMap.get(HEARTBEAT_TIME));
inventory.setName((String)dbMap.get(NAME));
- inventory.setOsName((String)dbMap.get(OS_NAME));
- inventory.setHostName((String)dbMap.get(HOST_NAME));
- inventory.setIpv4s((String)dbMap.get(IPV4S));
inventory.setInstanceUUID((String)dbMap.get(INSTANCE_UUID));
+ inventory.setProp((String)dbMap.get(PROPERTIES));
return inventory;
}
@@ -179,32 +180,25 @@ public class ServiceInstanceInventory extends RegisterSource {
Map<String, Object> map = new HashMap<>();
map.put(SEQUENCE, storageData.getSequence());
map.put(SERVICE_ID, storageData.getServiceId());
- map.put(LANGUAGE, storageData.getLanguage());
map.put(IS_ADDRESS, storageData.getIsAddress());
map.put(ADDRESS_ID, storageData.getAddressId());
- map.put(PROCESS_NO, storageData.getProcessNo());
map.put(REGISTER_TIME, storageData.getRegisterTime());
map.put(HEARTBEAT_TIME, storageData.getHeartbeatTime());
map.put(NAME, storageData.getName());
- map.put(OS_NAME, storageData.getOsName());
- map.put(HOST_NAME, storageData.getHostName());
- map.put(IPV4S, storageData.getIpv4s());
map.put(INSTANCE_UUID, storageData.getInstanceUUID());
+ map.put(PROPERTIES, storageData.getProp());
return map;
}
}
- public static class AgentOsInfo {
- @Setter @Getter private String osName;
- @Setter @Getter private String hostname;
- @Setter @Getter private int processNo;
- @Getter private List<String> ipv4s;
-
- public AgentOsInfo() {
- this.ipv4s = new ArrayList<>();
- }
+ public static class PropertyUtil {
+ public static final String OS_NAME = "os_name";
+ public static final String HOST_NAME = "host_name";
+ public static final String PROCESS_NO = "process_no";
+ public static final String IPV4S = "ipv4s";
+ public static final String LANGUAGE = "language";
public static String ipv4sSerialize(List<String> ipv4) {
Gson gson = new Gson();
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java
index fa55825..e4eda92 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java
@@ -18,7 +18,7 @@
package org.apache.skywalking.oap.server.core.register.service;
-import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
+import com.google.gson.JsonObject;
import org.apache.skywalking.oap.server.library.module.Service;
/**
@@ -27,7 +27,7 @@ import org.apache.skywalking.oap.server.library.module.Service;
public interface IServiceInstanceInventoryRegister extends Service {
int getOrCreate(int serviceId, String serviceInstanceName, String uuid, long registerTime,
- ServiceInstanceInventory.AgentOsInfo osInfo);
+ JsonObject properties);
int getOrCreate(int serviceId, int addressId, long registerTime);
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java
index 9a0dc76..3ea7b39 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.oap.server.core.register.service;
+import com.google.gson.JsonObject;
import java.util.Objects;
import org.apache.skywalking.oap.server.core.*;
import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
@@ -51,7 +52,7 @@ public class ServiceInstanceInventoryRegister implements IServiceInstanceInvento
}
@Override public int getOrCreate(int serviceId, String serviceInstanceName, String uuid, long registerTime,
- ServiceInstanceInventory.AgentOsInfo osInfo) {
+ JsonObject properties) {
if (logger.isDebugEnabled()) {
logger.debug("Get or create service instance by service instance name, service id: {}, service instance name: {},uuid: {}, registerTime: {}", serviceId, serviceInstanceName, uuid, registerTime);
}
@@ -69,10 +70,7 @@ public class ServiceInstanceInventoryRegister implements IServiceInstanceInvento
serviceInstanceInventory.setRegisterTime(registerTime);
serviceInstanceInventory.setHeartbeatTime(registerTime);
- serviceInstanceInventory.setOsName(osInfo.getOsName());
- serviceInstanceInventory.setHostName(osInfo.getHostname());
- serviceInstanceInventory.setProcessNo(osInfo.getProcessNo());
- serviceInstanceInventory.setIpv4s(ServiceInstanceInventory.AgentOsInfo.ipv4sSerialize(osInfo.getIpv4s()));
+ serviceInstanceInventory.setProperties(properties);
InventoryProcess.INSTANCE.in(serviceInstanceInventory);
}
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java
index abdbb10..8e6d273 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/ServiceMeshMetricDataDecorator.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.aop.server.receiver.mesh;
+import com.google.gson.JsonObject;
import org.apache.skywalking.apm.network.common.DetectPoint;
import org.apache.skywalking.apm.network.servicemesh.ServiceMeshMetric;
import org.apache.skywalking.oap.server.core.Const;
@@ -129,9 +130,9 @@ public class ServiceMeshMetricDataDecorator {
return newDataBuilder;
}
- private ServiceInstanceInventory.AgentOsInfo getOSInfoForMesh(String instanceName) {
- ServiceInstanceInventory.AgentOsInfo osInfo = new ServiceInstanceInventory.AgentOsInfo();
- osInfo.setHostname(instanceName);
- return osInfo;
+ private JsonObject getOSInfoForMesh(String instanceName) {
+ JsonObject properties = new JsonObject();
+ properties.addProperty(ServiceInstanceInventory.PropertyUtil.HOST_NAME, instanceName);
+ return properties;
}
}
diff --git a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/grpc/InstanceDiscoveryServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/grpc/InstanceDiscoveryServiceHandler.java
index f481e7d..4bb5479 100644
--- a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/grpc/InstanceDiscoveryServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/grpc/InstanceDiscoveryServiceHandler.java
@@ -19,12 +19,14 @@
package org.apache.skywalking.oap.server.receiver.register.provider.handler.v5.grpc;
import com.google.common.base.Strings;
+import com.google.gson.JsonObject;
import io.grpc.stub.StreamObserver;
import java.util.Objects;
import org.apache.skywalking.apm.network.language.agent.*;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.cache.*;
import org.apache.skywalking.oap.server.core.register.*;
+import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil;
import org.apache.skywalking.oap.server.core.register.service.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
@@ -53,11 +55,12 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp
public void registerInstance(ApplicationInstance request,
StreamObserver<ApplicationInstanceMapping> responseObserver) {
OSInfo osinfo = request.getOsinfo();
- ServiceInstanceInventory.AgentOsInfo agentOsInfo = new ServiceInstanceInventory.AgentOsInfo();
- agentOsInfo.setHostname(osinfo.getHostname());
- agentOsInfo.setOsName(osinfo.getOsName());
- agentOsInfo.setProcessNo(osinfo.getProcessNo());
- agentOsInfo.getIpv4s().addAll(osinfo.getIpv4SList());
+
+ JsonObject instanceProperties = new JsonObject();
+ instanceProperties.addProperty(PropertyUtil.HOST_NAME, osinfo.getHostname());
+ instanceProperties.addProperty(PropertyUtil.OS_NAME, osinfo.getOsName());
+ instanceProperties.addProperty(PropertyUtil.PROCESS_NO, osinfo.getProcessNo() + "");
+ instanceProperties.addProperty(PropertyUtil.IPV4S, PropertyUtil.ipv4sSerialize(osinfo.getIpv4SList()));
ServiceInventory serviceInventory = serviceInventoryCache.get(request.getApplicationId());
@@ -69,7 +72,7 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp
instanceName += "@" + osinfo.getHostname();
}
- int serviceInstanceId = serviceInstanceInventoryRegister.getOrCreate(request.getApplicationId(), instanceName, request.getAgentUUID(), request.getRegisterTime(), agentOsInfo);
+ int serviceInstanceId = serviceInstanceInventoryRegister.getOrCreate(request.getApplicationId(), instanceName, request.getAgentUUID(), request.getRegisterTime(), instanceProperties);
ApplicationInstanceMapping.Builder builder = ApplicationInstanceMapping.newBuilder();
builder.setApplicationId(request.getApplicationId());
builder.setApplicationInstanceId(serviceInstanceId);
diff --git a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/rest/InstanceDiscoveryServletHandler.java b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/rest/InstanceDiscoveryServletHandler.java
index d21b6f4..d1ba180 100644
--- a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/rest/InstanceDiscoveryServletHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/rest/InstanceDiscoveryServletHandler.java
@@ -18,9 +18,9 @@
package org.apache.skywalking.oap.server.receiver.register.provider.handler.v5.rest;
-import com.google.common.base.Strings;
import com.google.gson.*;
import java.io.IOException;
+import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
@@ -30,6 +30,8 @@ import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.jetty.*;
import org.slf4j.*;
+import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.*;
+
/**
* @author peng-yongsheng
*/
@@ -69,25 +71,27 @@ public class InstanceDiscoveryServletHandler extends JettyJsonHandler {
long registerTime = instance.get(REGISTER_TIME).getAsLong();
JsonObject osInfoJson = instance.get(OS_INFO).getAsJsonObject();
- ServiceInstanceInventory.AgentOsInfo agentOsInfo = new ServiceInstanceInventory.AgentOsInfo();
- agentOsInfo.setHostname(osInfoJson.get("hostName").getAsString());
- agentOsInfo.setOsName(osInfoJson.get("osName").getAsString());
- agentOsInfo.setProcessNo(osInfoJson.get("processId").getAsInt());
-
+ List<String> ipv4sList = new ArrayList<>();
JsonArray ipv4s = osInfoJson.get("ipv4s").getAsJsonArray();
- ipv4s.forEach(ipv4 -> agentOsInfo.getIpv4s().add(ipv4.getAsString()));
+ ipv4s.forEach(ipv4 -> ipv4sList.add(ipv4.getAsString()));
ServiceInventory serviceInventory = serviceInventoryCache.get(applicationId);
+ JsonObject instanceProperties = new JsonObject();
+ instanceProperties.addProperty(ServiceInstanceInventory.PropertyUtil.HOST_NAME, osInfoJson.get("hostName").getAsString());
+ instanceProperties.addProperty(ServiceInstanceInventory.PropertyUtil.OS_NAME, osInfoJson.get("osName").getAsString());
+ instanceProperties.addProperty(ServiceInstanceInventory.PropertyUtil.PROCESS_NO, osInfoJson.get("processId").getAsInt() + "");
+ instanceProperties.addProperty(ServiceInstanceInventory.PropertyUtil.IPV4S, ServiceInstanceInventory.PropertyUtil.ipv4sSerialize(ipv4sList));
+
String instanceName = serviceInventory.getName();
- if (agentOsInfo.getProcessNo() != 0) {
- instanceName += "-pid:" + agentOsInfo.getProcessNo();
+ if (instanceProperties.has(PROCESS_NO)) {
+ instanceName += "-pid:" + instanceProperties.get(PROCESS_NO).getAsString();
}
- if (!Strings.isNullOrEmpty(agentOsInfo.getHostname())) {
- instanceName += "@" + agentOsInfo.getHostname();
+ if (instanceProperties.has(HOST_NAME)) {
+ instanceName += "@" + instanceProperties.get(HOST_NAME).getAsString();
}
- int instanceId = serviceInstanceInventoryRegister.getOrCreate(applicationId, instanceName, agentUUID, registerTime, agentOsInfo);
+ int instanceId = serviceInstanceInventoryRegister.getOrCreate(applicationId, instanceName, agentUUID, registerTime, instanceProperties);
responseJson.addProperty(APPLICATION_ID, applicationId);
responseJson.addProperty(INSTANCE_ID, instanceId);
} catch (IOException e) {
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 f31f27f..ba922f1 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
@@ -18,8 +18,9 @@
package org.apache.skywalking.oap.server.receiver.register.provider.handler.v6.grpc;
-import com.google.common.base.Strings;
+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 org.apache.skywalking.apm.util.StringUtil;
@@ -33,6 +34,8 @@ import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
import org.apache.skywalking.oap.server.receiver.register.provider.handler.v5.grpc.InstanceDiscoveryServiceHandler;
import org.slf4j.*;
+import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.*;
+
/**
* @author wusheng
*/
@@ -83,34 +86,39 @@ public class RegisterServiceHandler extends RegisterGrpc.RegisterImplBase implem
request.getInstancesList().forEach(instance -> {
ServiceInventory serviceInventory = serviceInventoryCache.get(instance.getServiceId());
- ServiceInstanceInventory.AgentOsInfo agentOsInfo = new ServiceInstanceInventory.AgentOsInfo();
+ JsonObject instanceProperties = new JsonObject();
+ List<String> ipv4s = new ArrayList<>();
+
for (KeyStringValuePair property : instance.getPropertiesList()) {
String key = property.getKey();
switch (key) {
- case "OSName":
- agentOsInfo.setOsName(property.getValue());
+ case HOST_NAME:
+ instanceProperties.addProperty(HOST_NAME, property.getValue());
+ case OS_NAME:
+ instanceProperties.addProperty(OS_NAME, property.getValue());
break;
- case "hostname":
- agentOsInfo.setHostname(property.getValue());
+ case LANGUAGE:
+ instanceProperties.addProperty(LANGUAGE, property.getValue());
break;
case "ipv4":
- agentOsInfo.getIpv4s().add(property.getValue());
+ ipv4s.add(property.getValue());
break;
- case "ProcessNo":
- agentOsInfo.setProcessNo(Integer.parseInt(property.getValue()));
+ case PROCESS_NO:
+ instanceProperties.addProperty(PROCESS_NO, property.getValue());
break;
}
}
+ instanceProperties.addProperty(IPV4S, ServiceInstanceInventory.PropertyUtil.ipv4sSerialize(ipv4s));
String instanceName = serviceInventory.getName();
- if (agentOsInfo.getProcessNo() != 0) {
- instanceName += "-pid:" + agentOsInfo.getProcessNo();
+ if (instanceProperties.has(PROCESS_NO)) {
+ instanceName += "-pid:" + instanceProperties.get(PROCESS_NO).getAsString();
}
- if (!Strings.isNullOrEmpty(agentOsInfo.getHostname())) {
- instanceName += "@" + agentOsInfo.getHostname();
+ if (instanceProperties.has(HOST_NAME)) {
+ instanceName += "@" + instanceProperties.get(HOST_NAME).getAsString();
}
- int serviceInstanceId = serviceInstanceInventoryRegister.getOrCreate(instance.getServiceId(), instanceName, instance.getInstanceUUID(), instance.getTime(), agentOsInfo);
+ int serviceInstanceId = serviceInstanceInventoryRegister.getOrCreate(instance.getServiceId(), instanceName, instance.getInstanceUUID(), instance.getTime(), instanceProperties);
if (serviceInstanceId != Const.NONE) {
logger.info("register service instance id={} [UUID:{}]", serviceInstanceId, instance.getInstanceUUID());
diff --git a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinTraceOSInfoBuilder.java b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinTraceOSInfoBuilder.java
index cf929f5..451ba53 100644
--- a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinTraceOSInfoBuilder.java
+++ b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinTraceOSInfoBuilder.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.oap.server.receiver.zipkin;
+import com.google.gson.JsonObject;
import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
/**
@@ -25,9 +26,9 @@ import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
*/
public class ZipkinTraceOSInfoBuilder {
- public static ServiceInstanceInventory.AgentOsInfo getOSInfoForZipkin(String instanceName) {
- ServiceInstanceInventory.AgentOsInfo osInfo = new ServiceInstanceInventory.AgentOsInfo();
- osInfo.setHostname(instanceName);
- return osInfo;
+ public static JsonObject getOSInfoForZipkin(String instanceName) {
+ JsonObject properties = new JsonObject();
+ properties.addProperty(ServiceInstanceInventory.PropertyUtil.HOST_NAME, instanceName);
+ return properties;
}
}
diff --git a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java
index 5539046..3457830 100644
--- a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java
+++ b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java
@@ -91,7 +91,7 @@ public class SpringSleuthSegmentBuilderTest implements SegmentListener {
IServiceInstanceInventoryRegister instanceIDService = new IServiceInstanceInventoryRegister() {
@Override public int getOrCreate(int serviceId, String serviceInstanceName, String uuid, long registerTime,
- ServiceInstanceInventory.AgentOsInfo osInfo) {
+ JsonObject osInfo) {
String key = "AppCode:" + serviceId + ",UUID:" + uuid;
if (applicationInstRegister.containsKey(key)) {
return applicationInstRegister.get(key);
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
index 9b0fcda..80ff9a7 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetadataQueryEsDAO.java
@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query;
import com.google.common.base.Strings;
+import com.google.gson.*;
import java.io.IOException;
import java.util.*;
import org.apache.skywalking.oap.server.core.query.entity.*;
@@ -34,10 +35,13 @@ import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
+import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.*;
+
/**
* @author peng-yongsheng
*/
public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
+ private static final Gson GSON = new Gson();
public MetadataQueryEsDAO(ElasticSearchClient client) {
super(client);
@@ -72,7 +76,8 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
return (int)response.getHits().getTotalHits();
}
- @Override public int numOfConjectural(long startTimestamp, long endTimestamp, int nodeTypeValue) throws IOException {
+ @Override
+ public int numOfConjectural(long startTimestamp, long endTimestamp, int nodeTypeValue) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
sourceBuilder.query(QueryBuilders.termQuery(ServiceInventory.NODE_TYPE, nodeTypeValue));
@@ -186,23 +191,31 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
ServiceInstance serviceInstance = new ServiceInstance();
serviceInstance.setId(String.valueOf(sourceAsMap.get(ServiceInstanceInventory.SEQUENCE)));
serviceInstance.setName((String)sourceAsMap.get(ServiceInstanceInventory.NAME));
- int languageId = ((Number)sourceAsMap.get(ServiceInstanceInventory.LANGUAGE)).intValue();
- serviceInstance.setLanguage(LanguageTrans.INSTANCE.value(languageId));
- String osName = (String)sourceAsMap.get(ServiceInstanceInventory.OS_NAME);
- if (!Strings.isNullOrEmpty(osName)) {
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.OS_NAME, osName));
+ String propertiesString = (String)sourceAsMap.get(ServiceInstanceInventory.PROPERTIES);
+ if (!Strings.isNullOrEmpty(propertiesString)) {
+ JsonObject properties = GSON.fromJson(propertiesString, JsonObject.class);
+ if (properties.has(LANGUAGE)) {
+ serviceInstance.setLanguage(LanguageTrans.INSTANCE.value(properties.get(LANGUAGE).getAsString()));
+ }
+
+ if (properties.has(OS_NAME)) {
+ serviceInstance.getAttributes().add(new Attribute(OS_NAME, properties.get(OS_NAME).getAsString()));
+ }
+ if (properties.has(HOST_NAME)) {
+ serviceInstance.getAttributes().add(new Attribute(HOST_NAME, properties.get(HOST_NAME).getAsString()));
+ }
+ if (properties.has(PROCESS_NO)) {
+ serviceInstance.getAttributes().add(new Attribute(PROCESS_NO, properties.get(PROCESS_NO).getAsString()));
+ }
+ if (properties.has(IPV4S)) {
+ List<String> ipv4s = ServiceInstanceInventory.PropertyUtil.ipv4sDeserialize(properties.get(IPV4S).getAsString());
+ for (String ipv4 : ipv4s) {
+ serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.PropertyUtil.IPV4S, ipv4));
+ }
+ }
}
- String hostName = (String)sourceAsMap.get(ServiceInstanceInventory.HOST_NAME);
- if (!Strings.isNullOrEmpty(hostName)) {
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.HOST_NAME, hostName));
- }
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.PROCESS_NO, String.valueOf(((Number)sourceAsMap.get(ServiceInstanceInventory.PROCESS_NO)).intValue())));
- List<String> ipv4s = ServiceInstanceInventory.AgentOsInfo.ipv4sDeserialize((String)sourceAsMap.get(ServiceInstanceInventory.IPV4S));
- for (String ipv4 : ipv4s) {
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.IPV4S, ipv4));
- }
serviceInstances.add(serviceInstance);
}
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
index 89ecccf..301887f 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetadataQueryDAO.java
@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao;
import com.google.common.base.Strings;
+import com.google.gson.*;
import java.io.IOException;
import java.sql.*;
import java.util.*;
@@ -29,10 +30,14 @@ import org.apache.skywalking.oap.server.core.storage.query.IMetadataQueryDAO;
import org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCHikariCPClient;
import org.apache.skywalking.oap.server.library.util.BooleanUtils;
+import static org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory.PropertyUtil.*;
+
/**
* @author wusheng
*/
public class H2MetadataQueryDAO implements IMetadataQueryDAO {
+ private static final Gson GSON = new Gson();
+
private JDBCHikariCPClient h2Client;
public H2MetadataQueryDAO(JDBCHikariCPClient h2Client) {
@@ -211,22 +216,29 @@ public class H2MetadataQueryDAO implements IMetadataQueryDAO {
ServiceInstance serviceInstance = new ServiceInstance();
serviceInstance.setId(resultSet.getString(ServiceInstanceInventory.SEQUENCE));
serviceInstance.setName(resultSet.getString(ServiceInstanceInventory.NAME));
- int languageId = resultSet.getInt(ServiceInstanceInventory.LANGUAGE);
- serviceInstance.setLanguage(LanguageTrans.INSTANCE.value(languageId));
- String osName = resultSet.getString(ServiceInstanceInventory.OS_NAME);
- if (!Strings.isNullOrEmpty(osName)) {
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.OS_NAME, osName));
- }
- String hostName = resultSet.getString(ServiceInstanceInventory.HOST_NAME);
- if (!Strings.isNullOrEmpty(hostName)) {
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.HOST_NAME, hostName));
- }
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.PROCESS_NO, resultSet.getString(ServiceInstanceInventory.PROCESS_NO)));
+ String propertiesString = resultSet.getString(ServiceInstanceInventory.PROPERTIES);
+ if (!Strings.isNullOrEmpty(propertiesString)) {
+ JsonObject properties = GSON.fromJson(propertiesString, JsonObject.class);
+ if (properties.has(LANGUAGE)) {
+ serviceInstance.setLanguage(LanguageTrans.INSTANCE.value(properties.get(LANGUAGE).getAsString()));
+ }
- List<String> ipv4s = ServiceInstanceInventory.AgentOsInfo.ipv4sDeserialize(resultSet.getString(ServiceInstanceInventory.IPV4S));
- for (String ipv4 : ipv4s) {
- serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.IPV4S, ipv4));
+ if (properties.has(OS_NAME)) {
+ serviceInstance.getAttributes().add(new Attribute(OS_NAME, properties.get(OS_NAME).getAsString()));
+ }
+ if (properties.has(HOST_NAME)) {
+ serviceInstance.getAttributes().add(new Attribute(HOST_NAME, properties.get(HOST_NAME).getAsString()));
+ }
+ if (properties.has(PROCESS_NO)) {
+ serviceInstance.getAttributes().add(new Attribute(PROCESS_NO, properties.get(PROCESS_NO).getAsString()));
+ }
+ if (properties.has(IPV4S)) {
+ List<String> ipv4s = ServiceInstanceInventory.PropertyUtil.ipv4sDeserialize(properties.get(IPV4S).getAsString());
+ for (String ipv4 : ipv4s) {
+ serviceInstance.getAttributes().add(new Attribute(ServiceInstanceInventory.PropertyUtil.IPV4S, ipv4));
+ }
+ }
}
serviceInstances.add(serviceInstance);