Init data collect protocol from SkyWalking 5.0.0-alpha develop branch.
diff --git a/ApplicationRegisterService.proto b/ApplicationRegisterService.proto
new file mode 100644
index 0000000..e5b4dee
--- /dev/null
+++ b/ApplicationRegisterService.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+import "KeyWithIntegerValue.proto";
+
+//register service for ApplicationCode, this service is called when service starts.
+service ApplicationRegisterService {
+ rpc applicationCodeRegister (Application) returns (ApplicationMapping) {
+ }
+}
+
+message Application {
+ string applicationCode = 1;
+}
+
+message ApplicationMapping {
+ KeyWithIntegerValue application = 1;
+}
diff --git a/Common.proto b/Common.proto
new file mode 100644
index 0000000..9142490
--- /dev/null
+++ b/Common.proto
@@ -0,0 +1,10 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+enum SpanType {
+ Entry = 0;
+ Exit = 1;
+ Local = 2;
+}
\ No newline at end of file
diff --git a/DiscoveryService.proto b/DiscoveryService.proto
new file mode 100644
index 0000000..c4c06ca
--- /dev/null
+++ b/DiscoveryService.proto
@@ -0,0 +1,72 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+import "Common.proto";
+import "Downstream.proto";
+
+service InstanceDiscoveryService {
+ rpc registerInstance (ApplicationInstance) returns (ApplicationInstanceMapping) {
+ }
+
+ rpc heartbeat (ApplicationInstanceHeartbeat) returns (Downstream) {
+ }
+
+}
+
+message ApplicationInstance {
+ int32 applicationId = 1;
+ string agentUUID = 2;
+ int64 registerTime = 3;
+ OSInfo osinfo = 4;
+}
+
+message ApplicationInstanceMapping {
+ int32 applicationId = 1;
+ int32 applicationInstanceId = 2;
+}
+
+message ApplicationInstanceRecover {
+ int32 applicationId = 1;
+ int32 applicationInstanceId = 2;
+ int64 registerTime = 3;
+ OSInfo osinfo = 4;
+}
+
+message ApplicationInstanceHeartbeat {
+ int32 applicationInstanceId = 1;
+ int64 heartbeatTime = 2;
+}
+
+message OSInfo {
+ string osName = 1;
+ string hostname = 2;
+ int32 processNo = 3;
+ repeated string ipv4s = 4;
+}
+
+//discovery service for ServiceName by Network address or application code
+service ServiceNameDiscoveryService {
+ rpc discovery (ServiceNameCollection) returns (ServiceNameMappingCollection) {
+ }
+}
+
+message ServiceNameCollection {
+ repeated ServiceNameElement elements = 1;
+}
+
+message ServiceNameMappingCollection {
+ repeated ServiceNameMappingElement elements = 1;
+}
+
+message ServiceNameMappingElement {
+ int32 serviceId = 1;
+ ServiceNameElement element = 2;
+}
+
+message ServiceNameElement {
+ string serviceName = 1;
+ int32 applicationId = 2;
+ SpanType srcSpanType = 3;
+}
diff --git a/Downstream.proto b/Downstream.proto
new file mode 100644
index 0000000..bf38d53
--- /dev/null
+++ b/Downstream.proto
@@ -0,0 +1,8 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+// nothing down stream from collector yet.
+message Downstream {
+}
diff --git a/JVMMetricsService.proto b/JVMMetricsService.proto
new file mode 100644
index 0000000..6e07434
--- /dev/null
+++ b/JVMMetricsService.proto
@@ -0,0 +1,64 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+import "Downstream.proto";
+
+service JVMMetricsService {
+ rpc collect (JVMMetrics) returns (Downstream) {
+ }
+}
+
+message JVMMetrics {
+ repeated JVMMetric metrics = 1;
+ int32 applicationInstanceId = 2;
+}
+
+message JVMMetric {
+ int64 time = 1;
+ CPU cpu = 2;
+ repeated Memory memory = 3;
+ repeated MemoryPool memoryPool = 4;
+ repeated GC gc = 5;
+}
+
+message CPU {
+ double usagePercent = 2;
+}
+
+message Memory {
+ bool isHeap = 1;
+ int64 init = 2;
+ int64 max = 3;
+ int64 used = 4;
+ int64 committed = 5;
+}
+
+message MemoryPool {
+ PoolType type = 1;
+ int64 init = 2;
+ int64 max = 3;
+ int64 used = 4;
+ int64 commited = 5;
+}
+
+enum PoolType {
+ CODE_CACHE_USAGE = 0;
+ NEWGEN_USAGE = 1;
+ OLDGEN_USAGE = 2;
+ SURVIVOR_USAGE = 3;
+ PERMGEN_USAGE = 4;
+ METASPACE_USAGE = 5;
+}
+
+message GC {
+ GCPhrase phrase = 1;
+ int64 count = 2;
+ int64 time = 3;
+}
+
+enum GCPhrase {
+ NEW = 0;
+ OLD = 1;
+}
diff --git a/KeyWithIntegerValue.proto b/KeyWithIntegerValue.proto
new file mode 100644
index 0000000..c01f498
--- /dev/null
+++ b/KeyWithIntegerValue.proto
@@ -0,0 +1,9 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+message KeyWithIntegerValue {
+ string key = 1;
+ int32 value = 2;
+}
diff --git a/KeyWithStringValue.proto b/KeyWithStringValue.proto
new file mode 100644
index 0000000..92cbd45
--- /dev/null
+++ b/KeyWithStringValue.proto
@@ -0,0 +1,9 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+message KeyWithStringValue {
+ string key = 1;
+ string value = 2;
+}
diff --git a/NetworkAddressRegisterService.proto b/NetworkAddressRegisterService.proto
new file mode 100644
index 0000000..15a6b31
--- /dev/null
+++ b/NetworkAddressRegisterService.proto
@@ -0,0 +1,19 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+import "KeyWithIntegerValue.proto";
+
+service NetworkAddressRegisterService {
+ rpc batchRegister (NetworkAddresses) returns (NetworkAddressMappings) {
+ }
+}
+
+message NetworkAddresses {
+ repeated string addresses = 1;
+}
+
+message NetworkAddressMappings {
+ repeated KeyWithIntegerValue addressIds = 1;
+}
diff --git a/TraceSegmentService.proto b/TraceSegmentService.proto
new file mode 100644
index 0000000..f58fbbf
--- /dev/null
+++ b/TraceSegmentService.proto
@@ -0,0 +1,82 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+option java_package = "org.apache.skywalking.apm.network.proto";
+
+import "Common.proto";
+import "Downstream.proto";
+import "KeyWithStringValue.proto";
+
+service TraceSegmentService {
+ rpc collect (stream UpstreamSegment) returns (Downstream) {
+ }
+}
+
+message UpstreamSegment {
+ repeated UniqueId globalTraceIds = 1;
+ bytes segment = 2; // the byte array of TraceSegmentObject
+}
+
+message UniqueId {
+ repeated int64 idParts = 1;
+}
+
+message TraceSegmentObject {
+ UniqueId traceSegmentId = 1;
+ repeated SpanObject spans = 2;
+ int32 applicationId = 3;
+ int32 applicationInstanceId = 4;
+ bool isSizeLimited = 5;
+}
+
+message TraceSegmentReference {
+ RefType refType = 1;
+ UniqueId parentTraceSegmentId = 2;
+ int32 parentSpanId = 3;
+ int32 parentApplicationInstanceId = 4;
+ string networkAddress = 5;
+ int32 networkAddressId = 6;
+ int32 entryApplicationInstanceId = 7;
+ string entryServiceName = 8;
+ int32 entryServiceId = 9;
+ string parentServiceName = 10;
+ int32 parentServiceId = 11;
+}
+
+message SpanObject {
+ int32 spanId = 1;
+ int32 parentSpanId = 2;
+ int64 startTime = 3;
+ int64 endTime = 4;
+ repeated TraceSegmentReference refs = 5;
+ int32 operationNameId = 6;
+ string operationName = 7;
+ int32 peerId = 8;
+ string peer = 9;
+ SpanType spanType = 10;
+ SpanLayer spanLayer = 11;
+ int32 componentId = 12;
+ string component = 13;
+ bool isError = 14;
+ repeated KeyWithStringValue tags = 15;
+ repeated LogMessage logs = 16;
+}
+
+enum RefType {
+ CrossProcess = 0;
+ CrossThread = 1;
+}
+
+enum SpanLayer {
+ Unknown = 0;
+ Database = 1;
+ RPCFramework = 2;
+ Http = 3;
+ MQ = 4;
+ Cache = 5;
+}
+
+message LogMessage {
+ int64 time = 1;
+ repeated KeyWithStringValue data = 2;
+}