diff --git a/skywalking-api/.idea/.name b/skywalking-api/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..cfa5b9c1fde16dbd1172734a44fd368fc080fa61
--- /dev/null
+++ b/skywalking-api/.idea/.name
@@ -0,0 +1 @@
+skywalking-api
\ No newline at end of file
diff --git a/skywalking-api/.idea/compiler.xml b/skywalking-api/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ea5462d165b041153b5413825df81b6050b6845
--- /dev/null
+++ b/skywalking-api/.idea/compiler.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/copyright/profiles_settings.xml b/skywalking-api/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7bedf3377d40335424fd605124d4761390218bb
--- /dev/null
+++ b/skywalking-api/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/encodings.xml b/skywalking-api/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9696f261f256283735bb6dc145273aca326f775d
--- /dev/null
+++ b/skywalking-api/.idea/encodings.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__com_github_stephenc_findbugs_findbugs_annotations_1_3_9_1.xml b/skywalking-api/.idea/libraries/Maven__com_github_stephenc_findbugs_findbugs_annotations_1_3_9_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..da623c48a5aa8ee2f528bff3bfaf7d9af5497bd5
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__com_github_stephenc_findbugs_findbugs_annotations_1_3_9_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml b/skywalking-api/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a4a3dae02fc39e2b07e1a194cd631605c638787
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__com_google_guava_guava_12_0_1.xml b/skywalking-api/.idea/libraries/Maven__com_google_guava_guava_12_0_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b0e987e1d3a2a1085d43a7e0cceca715caca7ddd
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__com_google_guava_guava_12_0_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__com_google_protobuf_protobuf_java_2_5_0.xml b/skywalking-api/.idea/libraries/Maven__com_google_protobuf_protobuf_java_2_5_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..60e8be97710d6681598d8f3904faebd054426128
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__com_google_protobuf_protobuf_java_2_5_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__com_jcraft_jsch_0_1_42.xml b/skywalking-api/.idea/libraries/Maven__com_jcraft_jsch_0_1_42.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed1a2ba26e55c932cb923351265d0b8ab760d005
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__com_jcraft_jsch_0_1_42.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__com_thoughtworks_paranamer_paranamer_2_3.xml b/skywalking-api/.idea/libraries/Maven__com_thoughtworks_paranamer_paranamer_2_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..597c165a629677565b4936429ef119c4fd7680bf
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__com_thoughtworks_paranamer_paranamer_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml b/skywalking-api/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1eecdce3427e08ef3c591dd9cd1f5bafb3050127
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_beanutils_commons_beanutils_core_1_8_0.xml b/skywalking-api/.idea/libraries/Maven__commons_beanutils_commons_beanutils_core_1_8_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..701f938ad509a44d758ca5f424e550796a2ee24f
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_beanutils_commons_beanutils_core_1_8_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml b/skywalking-api/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bad0b912d956e2219ec74ab2f243e4668eaeca54
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml b/skywalking-api/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml
new file mode 100644
index 0000000000000000000000000000000000000000..afcb662deb5f57e2176c69106b95dda056dbaf4f
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_codec_commons_codec_1_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml b/skywalking-api/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cec842f21082b3f2b4ae465e4bfdacb376fdd9da
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_collections_commons_collections_3_2_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_configuration_commons_configuration_1_6.xml b/skywalking-api/.idea/libraries/Maven__commons_configuration_commons_configuration_1_6.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35b04840b5518774eeda73251691cd76d2b9ebde
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_configuration_commons_configuration_1_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml b/skywalking-api/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69aca6ce229cb013ec341ca04bd6d691b5345663
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_el_commons_el_1_0.xml b/skywalking-api/.idea/libraries/Maven__commons_el_commons_el_1_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96a188d12a028a48180a17bbef89dd05e1517e43
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_el_commons_el_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_1.xml b/skywalking-api/.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ad42102b2baf3a4676868d4fd71799519a0a1479
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_io_commons_io_2_4.xml b/skywalking-api/.idea/libraries/Maven__commons_io_commons_io_2_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..51db8f32a9b4ab65c9a468c1030e7fb713c607e6
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_io_commons_io_2_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml b/skywalking-api/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a4d8d611f29f7721d1762319e4524502356d6a7
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml b/skywalking-api/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b69762d52c6bd38bddcb9ecec67e6618a8f9b84b
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__commons_net_commons_net_3_1.xml b/skywalking-api/.idea/libraries/Maven__commons_net_commons_net_3_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..51fac38c45b9049ff69d6767434162075d217a3e
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__commons_net_commons_net_3_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__io_netty_netty_3_6_2_Final.xml b/skywalking-api/.idea/libraries/Maven__io_netty_netty_3_6_2_Final.xml
new file mode 100644
index 0000000000000000000000000000000000000000..07e512bce5a7f609df0cb4babb3e7f095f1f8f5a
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__io_netty_netty_3_6_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__io_netty_netty_all_4_0_32_Final.xml b/skywalking-api/.idea/libraries/Maven__io_netty_netty_all_4_0_32_Final.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ab0623dde619036d33c15f537e80557c1a8f553c
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__io_netty_netty_all_4_0_32_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__javax_activation_activation_1_1.xml b/skywalking-api/.idea/libraries/Maven__javax_activation_activation_1_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1dc383c0401d9cbe4aa1c35d1195fa8420784101
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__javax_activation_activation_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_2_2.xml b/skywalking-api/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_2_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..43529d5b5c8365fec58fbc27f00637a99acf190d
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_2_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__javax_xml_stream_stax_api_1_0_2.xml b/skywalking-api/.idea/libraries/Maven__javax_xml_stream_stax_api_1_0_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dda34546e892acf0ebba9d929095d9dbfaf644b0
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__javax_xml_stream_stax_api_1_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__junit_junit_3_8_1.xml b/skywalking-api/.idea/libraries/Maven__junit_junit_3_8_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..468dafaa72e152d93f6f02cc4e4e4a0e1c447ce6
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__junit_junit_3_8_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__junit_junit_4_11.xml b/skywalking-api/.idea/libraries/Maven__junit_junit_4_11.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e9c0bcfed5a7d10e68efa4c2feeaa4ce7f643b44
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__junit_junit_4_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__junit_junit_4_12.xml b/skywalking-api/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8fc0da12f27bbf7624c31f88bbffdccc9770be30
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__log4j_log4j_1_2_17.xml b/skywalking-api/.idea/libraries/Maven__log4j_log4j_1_2_17.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1d5a0c0a22bad2fef63d6726de033de705c9ca08
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__log4j_log4j_1_2_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_avro_avro_1_7_4.xml b/skywalking-api/.idea/libraries/Maven__org_apache_avro_avro_1_7_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aabb96dea3686b4361a9f2b68e97ddf9637317f1
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_avro_avro_1_7_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_commons_commons_compress_1_4_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_commons_commons_compress_1_4_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e43a8684f5918129990f2a59b278f2d543075f95
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_commons_commons_compress_1_4_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_commons_commons_math3_3_1_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_commons_commons_math3_3_1_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fcb6c7959e7c86be13abb420d793787951a50cd0
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_commons_commons_math3_3_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_directory_api_api_asn1_api_1_0_0_M20.xml b/skywalking-api/.idea/libraries/Maven__org_apache_directory_api_api_asn1_api_1_0_0_M20.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e89fbc24d1d41b2dbda438749af6aa09c70272bc
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_directory_api_api_asn1_api_1_0_0_M20.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_directory_api_api_util_1_0_0_M20.xml b/skywalking-api/.idea/libraries/Maven__org_apache_directory_api_api_util_1_0_0_M20.xml
new file mode 100644
index 0000000000000000000000000000000000000000..398b807d18aed3ea2d2912cea0297c459ac00f2e
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_directory_api_api_util_1_0_0_M20.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_directory_server_apacheds_i18n_2_0_0_M15.xml b/skywalking-api/.idea/libraries/Maven__org_apache_directory_server_apacheds_i18n_2_0_0_M15.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2eebf8d70e3d73c27bd3a0ede4a274f0267c495c
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_directory_server_apacheds_i18n_2_0_0_M15.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_directory_server_apacheds_kerberos_codec_2_0_0_M15.xml b/skywalking-api/.idea/libraries/Maven__org_apache_directory_server_apacheds_kerberos_codec_2_0_0_M15.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e638ad7bfe4241357def461b7d55756cddb673d8
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_directory_server_apacheds_kerberos_codec_2_0_0_M15.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_annotations_2_5_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_annotations_2_5_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e534452d77940cfaaeb3ee90e56d014f4cc37d2
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_annotations_2_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_auth_2_5_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_auth_2_5_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ec3e144800363b63100c7a6b3ddf3ac66adbce27
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_auth_2_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_common_2_5_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_common_2_5_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..66569194ba6b80b8503993643923e43c4ee65ee7
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_common_2_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_core_2_5_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_core_2_5_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..49c8651f1f6a3b950364ed16e87a1f504282a759
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_core_2_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_api_2_5_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_api_2_5_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d487de435b2a0f3ba33759a05bb257af6059a3ef
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_api_2_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_common_2_5_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_common_2_5_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e22cd77db0b28258b4faa2ef5970ab57b47a631
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_common_2_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_annotations_1_1_2.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_annotations_1_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..574ddf1eb2807e1417e85ce63ac6b2d32d736f15
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_annotations_1_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_client_1_1_2.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_client_1_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..477142b6d2ffdc6c0cbe42bfecf5939be65db984
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_client_1_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_common_1_1_2.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_common_1_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b59dbfaa78beb2c8e5f1b0cc4ebf0801aa431181
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_common_1_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_protocol_1_1_2.xml b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_protocol_1_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ebe3ce971a904de6b72485ba2a524ab5dc02ab5f
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_hbase_hbase_protocol_1_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_htrace_htrace_core_3_1_0_incubating.xml b/skywalking-api/.idea/libraries/Maven__org_apache_htrace_htrace_core_3_1_0_incubating.xml
new file mode 100644
index 0000000000000000000000000000000000000000..66f07b5d63d42e1e4b6955bdb47b58eb2640c4a9
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_htrace_htrace_core_3_1_0_incubating.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_5.xml b/skywalking-api/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_5.xml
new file mode 100644
index 0000000000000000000000000000000000000000..05dde70d6a967d9f18e285953c7d78ced35e968b
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_2_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_4.xml b/skywalking-api/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9452fb1d3930f4f4b6e85c5e0d8ef73b28447214
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_2_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_4_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_4_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eb53230d9ab4b8200186e0d9ca4d56d041c30736
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_4_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_4_1.xml b/skywalking-api/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_4_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc97282b25f52cec6fd7a4f85441c95bba78514c
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_4_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_mina_mina_core_2_0_9.xml b/skywalking-api/.idea/libraries/Maven__org_apache_mina_mina_core_2_0_9.xml
new file mode 100644
index 0000000000000000000000000000000000000000..780b9fffdd2df205263419506ff55e695dcd63ed
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_mina_mina_core_2_0_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_poi_poi_3_13.xml b/skywalking-api/.idea/libraries/Maven__org_apache_poi_poi_3_13.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff318616a353deb2dc0a4ae4a624f2a9e3377dbc
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_poi_poi_3_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_apache_zookeeper_zookeeper_3_4_6.xml b/skywalking-api/.idea/libraries/Maven__org_apache_zookeeper_zookeeper_3_4_6.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5060107d85d5974d93545b448fb2bfe0b20c33d
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_apache_zookeeper_zookeeper_3_4_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml b/skywalking-api/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml
new file mode 100644
index 0000000000000000000000000000000000000000..950e20314a47765efe77ab7ab774c5c24fb62dea
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml b/skywalking-api/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e872a1ad3a3edf3e618f9fa243c5998bdc6245a2
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/skywalking-api/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b1ed05089ec1370984df2bc28d8730a9c52cf725
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_jruby_jcodings_jcodings_1_0_8.xml b/skywalking-api/.idea/libraries/Maven__org_jruby_jcodings_jcodings_1_0_8.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d5a0f62ffe21925a27ea90a877e929655109cf0d
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_jruby_jcodings_jcodings_1_0_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_jruby_joni_joni_2_1_2.xml b/skywalking-api/.idea/libraries/Maven__org_jruby_joni_joni_2_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..22db99f861c2fe0efd193555a47db7e68b1e5e59
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_jruby_joni_joni_2_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_mortbay_jetty_jetty_util_6_1_26.xml b/skywalking-api/.idea/libraries/Maven__org_mortbay_jetty_jetty_util_6_1_26.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0b60a07a8a16a06e4a3a341562b3b13a06fe3702
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_mortbay_jetty_jetty_util_6_1_26.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_7.xml b/skywalking-api/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_7.xml
new file mode 100644
index 0000000000000000000000000000000000000000..261c3e5a99b35a63e0cdb2f83bb82086fc9c13c7
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_1.xml b/skywalking-api/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..125869874aa018cb190aefe1ffcd6a195b98e2b9
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_tukaani_xz_1_0.xml b/skywalking-api/.idea/libraries/Maven__org_tukaani_xz_1_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..29387d5d0fd7c7adbb7a9cdd06139668a7ee4138
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_tukaani_xz_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_0_4_1.xml b/skywalking-api/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_0_4_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..039ea6aeaa706566a21f546441028f58ab94301a
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_0_4_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/libraries/Maven__xmlenc_xmlenc_0_52.xml b/skywalking-api/.idea/libraries/Maven__xmlenc_xmlenc_0_52.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3a490d1f1fd5a94a15e64bb44f877bf0f783873f
--- /dev/null
+++ b/skywalking-api/.idea/libraries/Maven__xmlenc_xmlenc_0_52.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/misc.xml b/skywalking-api/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a0941af3d3ed908570c1454c33b679798a2e820e
--- /dev/null
+++ b/skywalking-api/.idea/misc.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/modules.xml b/skywalking-api/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1f940aabc810d6c6283605448c1510d213aba548
--- /dev/null
+++ b/skywalking-api/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/uiDesigner.xml b/skywalking-api/.idea/uiDesigner.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e96534fb27b68192f27f985d3879e173ec77adb8
--- /dev/null
+++ b/skywalking-api/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/vcs.xml b/skywalking-api/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6c0b8635858dc7ad44b93df54b762707ce49eefc
--- /dev/null
+++ b/skywalking-api/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/.idea/workspace.xml b/skywalking-api/.idea/workspace.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9ba05a5ec9aa1e041ab0a98f0f8e4c96ae0098cd
--- /dev/null
+++ b/skywalking-api/.idea/workspace.xml
@@ -0,0 +1,1881 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ C:\Users\astraea\AppData\Roaming\Subversion
+
+
+
+
+ 1445408272272
+
+ 1445408272272
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1445494062598
+
+
+ 1445494062598
+
+
+ 1446101613049
+
+
+ 1446101613049
+
+
+ 1446109992282
+
+
+ 1446109992282
+
+
+ 1446169819581
+
+
+ 1446169819581
+
+
+ 1446531487119
+
+
+ 1446531487119
+
+
+ 1446538431145
+
+
+ 1446538431145
+
+
+ 1446538988927
+
+
+ 1446538988927
+
+
+ 1446541128588
+
+
+ 1446541128588
+
+
+ 1446541277983
+
+
+ 1446541277983
+
+
+ 1446718258400
+
+
+ 1446718258400
+
+
+ 1446721872093
+
+
+ 1446721872093
+
+
+ 1446776287223
+
+
+ 1446776287223
+
+
+ 1446776482861
+
+
+ 1446776482861
+
+
+ 1446781207586
+
+
+ 1446781207586
+
+
+ 1446791705201
+
+
+ 1446791705201
+
+
+ 1446797068647
+
+
+ 1446797068647
+
+
+ 1446799943900
+
+
+ 1446799943900
+
+
+ 1446802538071
+
+
+ 1446802538071
+
+
+ 1446864129622
+
+
+ 1446864129622
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ file://D:/sky-workbench/nio-test/src/main/java/com/ai/file/FileTest.java
+ 24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No facets are configured
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.6
+
+
+
+
+
+
+
+
+
+
+
+ skywalking-server
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.6
+
+
+
+
+
+
+
+
+
+
+
+ Maven: com.github.stephenc.findbugs:findbugs-annotations:1.3.9-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/pom.xml b/skywalking-api/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eb959ade4eb2eb535b034a24afad0484a85889d8
--- /dev/null
+++ b/skywalking-api/pom.xml
@@ -0,0 +1,31 @@
+
+ 4.0.0
+
+ com.ai.cloud
+ skywalking-api
+ 1.0-SNAPSHOT
+ jar
+
+ skywalking-api
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ org.apache.poi
+ poi
+ 3.13
+ test
+
+
+
diff --git a/skywalking-api/pom.xml.bak b/skywalking-api/pom.xml.bak
new file mode 100644
index 0000000000000000000000000000000000000000..bf8b4eb926d0744945d75fa6a6346519c51371f3
--- /dev/null
+++ b/skywalking-api/pom.xml.bak
@@ -0,0 +1,36 @@
+
+ 4.0.0
+
+ com.ai.paas.ipaas
+ skywalking-api
+ 1.0-SNAPSHOT
+ jar
+
+ skywalking-api
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ org.apache.poi
+ poi
+ 3.13
+ test
+
+
+ io.netty
+ netty-all
+ 4.0.32.Final
+
+
+
diff --git a/skywalking-api/skywalking-api.iml b/skywalking-api/skywalking-api.iml
new file mode 100644
index 0000000000000000000000000000000000000000..569320c71c17ed039cb0c97117058b384261ee75
--- /dev/null
+++ b/skywalking-api/skywalking-api.iml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IBuriedPointReceiver.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IBuriedPointReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..5119fb155c186cd605d20a5a2b0b1d59f7eac7ea
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IBuriedPointReceiver.java
@@ -0,0 +1,9 @@
+package com.ai.cloud.skywalking.api;
+
+import com.ai.cloud.skywalking.model.ContextData;
+
+public interface IBuriedPointReceiver extends IExceptionHandler {
+ void afterReceived();
+
+ void beforeReceived(ContextData contextData);
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IBuriedPointSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..70f772d4332bb0f3f586f7420ddcf5ffe71b9180
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IBuriedPointSender.java
@@ -0,0 +1,10 @@
+package com.ai.cloud.skywalking.api;
+
+import com.ai.cloud.skywalking.model.SendData;
+import com.ai.cloud.skywalking.model.ContextData;
+
+public interface IBuriedPointSender extends IExceptionHandler {
+ ContextData beforeSend(SendData data);
+
+ void afterSend();
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IExceptionHandler.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IExceptionHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bdfb0395ecb23e8d3918170253c4abeea66137d
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/api/IExceptionHandler.java
@@ -0,0 +1,5 @@
+package com.ai.cloud.skywalking.api;
+
+public interface IExceptionHandler {
+ void handleException(Throwable th);
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferGroup.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferGroup.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5f5911a9a55352bf34c0333d24720d3cbdef7f2
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferGroup.java
@@ -0,0 +1,89 @@
+package com.ai.cloud.skywalking.buffer;
+
+
+import com.ai.cloud.skywalking.context.Span;
+import com.ai.cloud.skywalking.sender.DataSenderFactory;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static com.ai.cloud.skywalking.buffer.config.BufferConfig.*;
+
+public class BufferGroup {
+ public static CountDownLatch count;
+ private String groupName;
+ private Span[] dataBuffer = new Span[GROUP_MAX_SIZE];
+ AtomicInteger index = new AtomicInteger(0);
+
+
+ public BufferGroup(String groupName) {
+ this.groupName = groupName;
+ int k = 0, l;
+ for (int i = 0; i < MAX_WORKER; i++) {
+ l = GROUP_MAX_SIZE / MAX_WORKER + k;
+ if (l + GROUP_MAX_SIZE / MAX_WORKER > GROUP_MAX_SIZE)
+ l = GROUP_MAX_SIZE;
+ new ConsumerWorker(k, l).start();
+ k = l;
+ }
+ }
+
+ public void save(Span span) {
+ int i = Math.abs(index.getAndIncrement() % GROUP_MAX_SIZE);
+ if (dataBuffer[i] != null) {
+ // TODO 需要上报
+ System.out.println(span.getLevelId() + "在Group[" + groupName + "]的第" + i + "位冲突");
+ }
+ dataBuffer[i] = span;
+ }
+
+ class ConsumerWorker extends Thread {
+ private int start = 0;
+ private int end = GROUP_MAX_SIZE;
+ private StringBuilder builder = new StringBuilder();
+
+ private ConsumerWorker(int start, int end) {
+ this.start = start;
+ this.end = end;
+ }
+
+ ConsumerWorker() {
+ }
+
+ @Override
+ public void run() {
+ int index = 0;
+ while (true) {
+ boolean bool = false;
+ StringBuilder data = new StringBuilder();
+ for (int i = start; i < end; i++) {
+ if (dataBuffer[i] == null) {
+ continue;
+ }
+ bool = true;
+ data.append(dataBuffer[i] + ";");
+ dataBuffer[i++] = null;
+ if (i == SEND_MAX_SIZE) {
+ // TODO 发送失败了怎么办?
+ DataSenderFactory.getSender().send(data.toString());
+ i = 0;
+ data = new StringBuilder();
+ }
+ }
+
+ if (!bool) {
+ try {
+ Thread.sleep(5L);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ public String getGroupName() {
+ return groupName;
+ }
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferPool.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferPool.java
new file mode 100644
index 0000000000000000000000000000000000000000..12400ab2b175c6ccb90d7837f7ce08e5356dfe06
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferPool.java
@@ -0,0 +1,22 @@
+package com.ai.cloud.skywalking.buffer;
+
+import com.ai.cloud.skywalking.context.Span;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+import static com.ai.cloud.skywalking.buffer.config.BufferConfig.POOL_MAX_SIZE;
+
+class BufferPool {
+ private static BufferGroup[] bufferGroups = new BufferGroup[POOL_MAX_SIZE];
+
+ static {
+ for (int i = 0; i < POOL_MAX_SIZE; i++) {
+ bufferGroups[i] = new BufferGroup("BufferLine-" + i);
+ }
+ }
+
+ public void save(Span span) {
+ bufferGroups[ThreadLocalRandom.current().nextInt(0, POOL_MAX_SIZE)].save(span);
+ }
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/ContextBuffer.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/ContextBuffer.java
new file mode 100644
index 0000000000000000000000000000000000000000..bce883dce912fedcc0820414b8f338f1d6bbc171
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/ContextBuffer.java
@@ -0,0 +1,11 @@
+package com.ai.cloud.skywalking.buffer;
+
+import com.ai.cloud.skywalking.context.Span;
+
+public class ContextBuffer {
+ static BufferPool pool = new BufferPool();
+
+ public static void save(Span span) {
+ pool.save(span);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/config/BufferConfig.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/config/BufferConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..61cb6ef1bce75ddae0d6cae451df0c2f13dc421d
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/config/BufferConfig.java
@@ -0,0 +1,21 @@
+package com.ai.cloud.skywalking.buffer.config;
+
+public class BufferConfig {
+ // 最大消费线程
+ public static int MAX_WORKER = 5;
+
+ // 桶大小
+ public static int GROUP_MAX_SIZE = 1000;
+
+ // 桶数量
+ public static int POOL_MAX_SIZE = 30;
+
+ // 发送的最大长度
+ public static int MAX_LENGTH = 512 * 1024;
+
+ // 发送的最大条数
+ public static int SEND_MAX_SIZE = 1;
+
+ // 最大发送者的连接数阀值
+ public static int SEND_CONNECTION_THRESHOLD = 2;
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..236fff009f69f7ea246adf3b773a1d8130a0bd30
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
@@ -0,0 +1,37 @@
+package com.ai.cloud.skywalking.buriedpoint;
+
+import com.ai.cloud.skywalking.api.IBuriedPointSender;
+import com.ai.cloud.skywalking.buffer.ContextBuffer;
+import com.ai.cloud.skywalking.context.Context;
+import com.ai.cloud.skywalking.context.Span;
+import com.ai.cloud.skywalking.model.ContextData;
+import com.ai.cloud.skywalking.model.SendData;
+import com.ai.cloud.skywalking.util.ContextGenerator;
+import com.ai.cloud.skywalking.util.ExceptionHandleUtil;
+
+public class LocalBuriedPointSender implements IBuriedPointSender {
+
+ public ContextData beforeSend(SendData sendData) {
+ Span spanData = ContextGenerator.generateContextFromThreadLocal(sendData);
+ // 3.将新创建的Context存放到ThreadLocal栈中。
+ Context.getOrCreate().append(spanData);
+ // 4 并将当前的Context返回回去
+ return new ContextData(spanData);
+ }
+
+ public void afterSend() {
+ // 弹出上下文的栈顶中的元素
+ Span spanData = Context.getOrCreate().removeLastSpan();
+ if (spanData == null) {
+ return;
+ }
+ // 填上必要信息
+ spanData.setCost(System.currentTimeMillis() - spanData.getStartDate());
+ // 存放到本地发送进程中
+ ContextBuffer.save(spanData);
+ }
+
+ public void handleException(Throwable e) {
+ ExceptionHandleUtil.handleException(e);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..84578b14bdcab7a8006a7ec76302c362e5da7ed1
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
@@ -0,0 +1,31 @@
+package com.ai.cloud.skywalking.buriedpoint;
+
+import com.ai.cloud.skywalking.api.IBuriedPointReceiver;
+import com.ai.cloud.skywalking.buffer.ContextBuffer;
+import com.ai.cloud.skywalking.context.Context;
+import com.ai.cloud.skywalking.context.Span;
+import com.ai.cloud.skywalking.model.ContextData;
+import com.ai.cloud.skywalking.util.ContextGenerator;
+import com.ai.cloud.skywalking.util.ExceptionHandleUtil;
+
+public class RPCBuriedPointReceiver implements IBuriedPointReceiver {
+
+ public void afterReceived() {
+ // 获取上下文的栈顶中的元素
+ Span spanData = Context.getOrCreate().removeLastSpan();
+ // 填上必要信息
+ spanData.setCost(System.currentTimeMillis() - spanData.getStartDate());
+ // 存放到本地发送进程中
+ ContextBuffer.save(spanData);
+ }
+
+ public void beforeReceived(ContextData context) {
+ Span spanData = ContextGenerator.generateContextFromContextData(context);
+ // 存放到上下文
+ Context.getOrCreate().append(spanData);
+ }
+
+ public void handleException(Throwable e) {
+ ExceptionHandleUtil.handleException(e);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..4309e44554acd848f692e081bce456ddb0240893
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointSender.java
@@ -0,0 +1,38 @@
+package com.ai.cloud.skywalking.buriedpoint;
+
+import com.ai.cloud.skywalking.api.IBuriedPointSender;
+import com.ai.cloud.skywalking.buffer.ContextBuffer;
+import com.ai.cloud.skywalking.context.Context;
+import com.ai.cloud.skywalking.context.Span;
+import com.ai.cloud.skywalking.model.ContextData;
+import com.ai.cloud.skywalking.model.SendData;
+import com.ai.cloud.skywalking.util.ContextGenerator;
+import com.ai.cloud.skywalking.util.ExceptionHandleUtil;
+
+public class RPCBuriedPointSender implements IBuriedPointSender {
+
+ public ContextData beforeSend(SendData sendData) {
+ Span spanData = ContextGenerator.generateContextFromThreadLocal(sendData);
+ // 3.将新创建的Context存放到ThreadLocal栈中。
+ Context.getOrCreate().append(spanData);
+ // 4 并将当前的Context返回回去
+ return new ContextData(new Span(spanData.getTraceId(), spanData.getParentLevel() +
+ "." + spanData.getLevelId()));
+ }
+
+ public void afterSend() {
+ // 获取上下文的栈顶中的元素
+ Span spanData = Context.getOrCreate().removeLastSpan();
+ if (spanData == null) {
+ return;
+ }
+ // 填上必要信息
+ spanData.setCost(System.currentTimeMillis() - spanData.getStartDate());
+ // 存放到本地发送进程中
+ ContextBuffer.save(spanData);
+ }
+
+ public void handleException(Throwable e) {
+ ExceptionHandleUtil.handleException(e);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..1a80f0d2a9a033a4088ff7712347e91f8b22b6bf
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
@@ -0,0 +1,57 @@
+package com.ai.cloud.skywalking.buriedpoint;
+
+import com.ai.cloud.skywalking.api.IBuriedPointSender;
+import com.ai.cloud.skywalking.buffer.ContextBuffer;
+import com.ai.cloud.skywalking.context.Context;
+import com.ai.cloud.skywalking.context.Span;
+import com.ai.cloud.skywalking.model.ContextData;
+import com.ai.cloud.skywalking.model.SendData;
+import com.ai.cloud.skywalking.util.BuriedPointMachineUtil;
+import com.ai.cloud.skywalking.util.ExceptionHandleUtil;
+import com.ai.cloud.skywalking.util.TraceIdGenerator;
+
+public class ThreadBuriedPointSender implements IBuriedPointSender {
+
+ private Span span;
+
+ public ThreadBuriedPointSender(int threadSeqId) {
+ Span spanData;
+ // 从ThreadLocal中取出上下文
+ final Span parentSpanData = Context.getOrCreate().getLastSpan();
+ if (parentSpanData == null) {
+ spanData = new Span(TraceIdGenerator.generate());
+ } else {
+ // 如果不为空,则将当前的Context存放到上下文
+ spanData = new Span(parentSpanData.getTraceId());
+ spanData.setParentLevel(parentSpanData.getParentLevel() + "." + parentSpanData.getLevelId());
+ spanData.setLevelId(threadSeqId);
+ }
+ this.span = spanData;
+ }
+
+ public ContextData beforeSend(SendData sendData) {
+ if (this.span == null) {
+ return null;
+ }
+ span.setStartDate(System.currentTimeMillis());
+ span.setViewPointId(sendData.getViewPoint());
+ span.setProcessNo(BuriedPointMachineUtil.getProcessNo());
+ Context.getOrCreate().append(span);
+ return new ContextData(span);
+ }
+
+ public void afterSend() {
+ Span span = Context.getOrCreate().removeLastSpan();
+ if (span == null) {
+ return;
+ }
+ // 填上必要信息
+ span.setCost(System.currentTimeMillis() - span.getStartDate());
+ // 存放到本地发送进程中
+ ContextBuffer.save(span);
+ }
+
+ public void handleException(Throwable th) {
+ ExceptionHandleUtil.handleException(th);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..3de53fc81a57f716d975a652c60b85e74d9af2c1
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
@@ -0,0 +1,37 @@
+package com.ai.cloud.skywalking.buriedpoint;
+
+import com.ai.cloud.skywalking.api.IBuriedPointSender;
+import com.ai.cloud.skywalking.buffer.ContextBuffer;
+import com.ai.cloud.skywalking.context.Context;
+import com.ai.cloud.skywalking.context.Span;
+import com.ai.cloud.skywalking.model.ContextData;
+import com.ai.cloud.skywalking.model.SendData;
+import com.ai.cloud.skywalking.util.ContextGenerator;
+import com.ai.cloud.skywalking.util.ExceptionHandleUtil;
+
+public class ThreadFactoryBuriedPointSender implements IBuriedPointSender {
+
+ public ContextData beforeSend(SendData sendData) {
+ Span spanData = ContextGenerator.generateContextFromThreadLocal(sendData);
+ // 3.将新创建的Context存放到ThreadLocal栈中。
+ Context.getOrCreate().append(spanData);
+ // 4 并将当前的Context返回回去
+ return new ContextData(spanData);
+ }
+
+ public void afterSend() {
+ // 获取上下文的栈顶中的元素
+ Span spanData = Context.getOrCreate().removeLastSpan();
+ if (spanData == null) {
+ return;
+ }
+ // 填上必要信息
+ spanData.setCost(System.currentTimeMillis() - spanData.getStartDate());
+ // 存放到本地发送进程中
+ ContextBuffer.save(spanData);
+ }
+
+ public void handleException(Throwable th) {
+ ExceptionHandleUtil.handleException(th);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Context.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Context.java
new file mode 100644
index 0000000000000000000000000000000000000000..0f8dbb69bc1922e8793684c519efd003184f7f93
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Context.java
@@ -0,0 +1,62 @@
+package com.ai.cloud.skywalking.context;
+
+import java.util.Stack;
+
+/**
+ */
+public class Context {
+
+ private static ThreadLocal spans = new ThreadLocal();
+ private static Context context;
+
+ private Context() {
+ spans.set(new SpanStack());
+ }
+
+ public void append(Span span) {
+ spans.get().push(span);
+ }
+
+ public Span getLastSpan() {
+ return spans.get().peek();
+ }
+
+ public Span removeLastSpan() {
+ return spans.get().pop();
+ }
+
+ public static Context getOrCreate() {
+ if (context == null) {
+ context = new Context();
+ }
+ return context;
+ }
+
+ static class SpanStack {
+ private Stack spans = new Stack();
+
+ public Span pop() {
+ return spans.pop();
+ }
+
+ public void push(Span span) {
+ spans.push(span);
+ }
+
+ public int size() {
+ return spans.size();
+ }
+
+ public Span peek() {
+ if (spans.isEmpty()) {
+ return null;
+ }
+ return spans.peek();
+ }
+
+ public boolean isEmpty() {
+ return spans.isEmpty();
+ }
+ }
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Span.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Span.java
new file mode 100644
index 0000000000000000000000000000000000000000..f1bcc34855d012bfdaca1863fcf7424afb5e4a09
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/context/Span.java
@@ -0,0 +1,133 @@
+package com.ai.cloud.skywalking.context;
+
+import com.ai.cloud.skywalking.util.StringUtil;
+
+public class Span {
+ private String traceId;
+ private String parentLevel;
+ private long levelId;
+ private String viewPointId;
+ private long startDate;
+ private long cost;
+ private String address;
+ private byte statueCode = 0;
+ private String exceptionStack;
+ private byte spanType;
+
+ public Span() {
+ }
+
+ public Span(String traceId) {
+ this.traceId = traceId;
+ }
+
+ public Span(String traceId, String parentLevel) {
+ this.traceId = traceId;
+ this.parentLevel = parentLevel;
+ }
+
+ public String getProcessNo() {
+ return processNo;
+ }
+
+ public void setProcessNo(String processNo) {
+ this.processNo = processNo;
+ }
+
+
+ public long getCost() {
+ return cost;
+ }
+
+ public void setCost(long cost) {
+ this.cost = cost;
+ }
+
+ public long getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(long startDate) {
+ this.startDate = startDate;
+ }
+
+ public String getViewPointId() {
+ return viewPointId;
+ }
+
+ public void setViewPointId(String viewPointId) {
+ this.viewPointId = viewPointId;
+ }
+
+ public String getParentLevel() {
+ return parentLevel;
+ }
+
+ public void setParentLevel(String parentLevel) {
+ this.parentLevel = parentLevel;
+ }
+
+ public long getLevelId() {
+ return levelId;
+ }
+
+ public void setLevelId(long levelId) {
+ this.levelId = levelId;
+ }
+
+ public String getTraceId() {
+ return traceId;
+ }
+
+ public void setTraceId(String traceId) {
+ this.traceId = traceId;
+ }
+
+ private String processNo;
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public byte getStatueCode() {
+ return statueCode;
+ }
+
+ public void setStatueCode(byte statueCode) {
+ this.statueCode = statueCode;
+ }
+
+ public String getExceptionStack() {
+ return exceptionStack;
+ }
+
+ public void setExceptionStack(String exceptionStack) {
+ this.exceptionStack = exceptionStack;
+ }
+
+ public byte getSpanType() {
+ return spanType;
+ }
+
+ public void setSpanType(byte spanType) {
+ this.spanType = spanType;
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer stringBuffer = new StringBuffer(traceId + "-" + parentLevel + "-"
+ + levelId + "-" + viewPointId + "-" + startDate + "-" + cost +
+ "-" + address +
+ "-" + statueCode +
+ "-" + processNo + "-" + spanType);
+ if (!StringUtil.isEmpty(exceptionStack)) {
+ stringBuffer.append("-" + exceptionStack);
+ }
+
+ return stringBuffer.toString();
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/ContextData.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/ContextData.java
new file mode 100644
index 0000000000000000000000000000000000000000..02e2832894b50c8fcc676ad9799649d2c1af2fba
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/ContextData.java
@@ -0,0 +1,39 @@
+package com.ai.cloud.skywalking.model;
+
+import com.ai.cloud.skywalking.context.Span;
+
+public class ContextData {
+ private String traceId;
+ private String parentLevel;
+ private long levelId;
+
+ public ContextData(Span span) {
+ this.traceId = span.getTraceId();
+ this.parentLevel = span.getParentLevel();
+ this.levelId = span.getLevelId();
+ }
+
+ public String getTraceId() {
+ return traceId;
+ }
+
+ public void setTraceId(String traceId) {
+ this.traceId = traceId;
+ }
+
+ public String getParentLevel() {
+ return parentLevel;
+ }
+
+ public void setParentLevel(String parentLevel) {
+ this.parentLevel = parentLevel;
+ }
+
+ public long getLevelId() {
+ return levelId;
+ }
+
+ public void setLevelId(long levelId) {
+ this.levelId = levelId;
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/SendData.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/SendData.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a7a3c45af340d2195a9211932ea3e4d8c05c583
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/model/SendData.java
@@ -0,0 +1,57 @@
+package com.ai.cloud.skywalking.model;
+
+public class SendData {
+ private String viewPoint;
+ private String URI;
+ private String businessKey;
+
+ private SendData() {
+ //Non
+ }
+
+ public String getViewPoint() {
+ return viewPoint;
+ }
+
+ public String getURI() {
+ return URI;
+ }
+
+ public String getBusinessKey() {
+ return businessKey;
+ }
+
+ public static BaseSendDataBuilder newBuilder() {
+ return new BaseSendDataBuilder();
+ }
+
+ public static class BaseSendDataBuilder {
+ private SendData sendData;
+
+ BaseSendDataBuilder() {
+ sendData = new SendData();
+ }
+
+ public SendData build() {
+ return sendData;
+ }
+
+ public BaseSendDataBuilder viewPoint(String viewPoint) {
+ sendData.viewPoint = viewPoint;
+ return this;
+ }
+
+ public BaseSendDataBuilder URI(String uri) {
+ sendData.URI = uri;
+ return this;
+ }
+
+ public BaseSendDataBuilder businessKey(String businessKey) {
+ sendData.businessKey = businessKey;
+ return this;
+ }
+
+ }
+
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..a7382614c2c279a43276be511fda1435c0677a89
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java
@@ -0,0 +1,65 @@
+package com.ai.cloud.skywalking.sender;
+
+import com.ai.cloud.skywalking.sender.protocol.ProtocolBuilder;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.net.StandardSocketOptions;
+import java.nio.ByteBuffer;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.SocketChannel;
+
+public class DataSender {
+
+ private SocketChannel socketChannel;
+ private Selector selector;
+ private SocketAddress socketAddress;
+
+ public DataSender(String ip, int port) throws IOException {
+ selector = Selector.open();
+ SocketAddress isa = new InetSocketAddress(ip, port);
+ //调用open的静态方法创建连接指定的主机的SocketChannel
+ socketChannel = SocketChannel.open(isa);
+ //设置该sc已非阻塞的方式工作
+ socketChannel.configureBlocking(false);
+ socketChannel.register(selector, SelectionKey.OP_CONNECT);
+ socketChannel.setOption(StandardSocketOptions.SO_KEEPALIVE, true);
+ this.socketAddress = isa;
+ }
+
+ public DataSender(SocketAddress address) throws IOException {
+ selector = Selector.open();
+ socketChannel = SocketChannel.open(address);
+ //设置该sc已非阻塞的方式工作
+ socketChannel.configureBlocking(false);
+ socketChannel.register(selector, SelectionKey.OP_CONNECT);
+ socketChannel.setOption(StandardSocketOptions.SO_KEEPALIVE, true);
+ this.socketAddress = address;
+ }
+
+ /**
+ * 返回是否发送成功
+ *
+ * @param data
+ * @return
+ */
+ public boolean send(String data) {
+ // 发送报文
+ try {
+ socketChannel.register(selector, SelectionKey.OP_READ);
+ socketChannel.write(ByteBuffer.wrap(ProtocolBuilder.builder(data)));
+ return true;
+ } catch (IOException e) {
+ // 发送失败 认为不可连接
+ DataSenderFactory.unRegister(this);
+ return false;
+ }
+ }
+
+ public SocketAddress getServerIp() {
+ return this.socketAddress;
+ }
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..6392c48bb2c6d05f10e2f76b4cdbbdd9b73fbb72
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactory.java
@@ -0,0 +1,79 @@
+package com.ai.cloud.skywalking.sender;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+
+public class DataSenderFactory {
+
+ private static List socketAddresses = new ArrayList();
+ private static List unUsedSocketAddresses = new ArrayList();
+ private static List availableSenders = new ArrayList();
+
+ static {
+ socketAddresses.add(new InetSocketAddress("127.0.0.1", 34000));
+ socketAddresses.add(new InetSocketAddress("127.0.0.1", 35000));
+ new DataSenderMaker().start();
+ }
+
+ public static DataSender getSender() {
+ return availableSenders.get(ThreadLocalRandom.current().nextInt(availableSenders.size()));
+ }
+
+ static class DataSenderMaker extends Thread {
+
+ public DataSenderMaker() {
+ // 初始化DataSender
+ Iterator it = socketAddresses.iterator();
+ List usedSocketAddress = new ArrayList();
+ for (SocketAddress socketAddress : socketAddresses) {
+ if (availableSenders.size() >= socketAddresses.size() / 2) {
+ break;
+ }
+ try {
+ availableSenders.add(new DataSender(socketAddress));
+ usedSocketAddress.add(socketAddress);
+ } catch (IOException e) {
+ unUsedSocketAddresses.add(socketAddress);
+ }
+
+ }
+ unUsedSocketAddresses = new ArrayList(socketAddresses);
+ unUsedSocketAddresses.removeAll(usedSocketAddress);
+ }
+
+ public void run() {
+ while (true) {
+ //当可用的Sender的数量和保存的地址的比例不在1:2,则不创建
+ for (SocketAddress socketAddress : unUsedSocketAddresses) {
+ if (availableSenders.size() >= socketAddresses.size() / 2) {
+ break;
+ }
+ try {
+ availableSenders.add(new DataSender(socketAddress));
+ } catch (IOException e) {
+ // 当前发送的地址还是不可用
+ }
+ }
+
+ try {
+ Thread.sleep(3000L);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+
+ public static void unRegister(DataSender sender) {
+ availableSenders.remove(sender);
+ unUsedSocketAddresses.add(sender.getServerIp());
+ }
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/protocol/ProtocolBuilder.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/protocol/ProtocolBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..62af62f8c26cb09d4b75d2c2d7492be10d63a9d8
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/protocol/ProtocolBuilder.java
@@ -0,0 +1,26 @@
+package com.ai.cloud.skywalking.sender.protocol;
+
+public class ProtocolBuilder {
+
+ //协议格式:
+ // xx xx xx xx | xx xx xx xx xxx xxx xxx
+ // header(4) | content
+ public static byte[] builder(String data) {
+ byte[] content = data.getBytes();
+ byte[] header = intToByteArray(content.length);
+ byte[] des = new byte[header.length + content.length];
+ System.arraycopy(header, 0, des, 0, header.length);
+ System.arraycopy(content, 0, des, header.length, content.length);
+ return des;
+ }
+
+ private static byte[] intToByteArray(final int integer) {
+ int byteNum = (40 - Integer.numberOfLeadingZeros(integer < 0 ? ~integer : integer)) / 8;
+ byte[] byteArray = new byte[4];
+
+ for (int n = 0; n < byteNum; n++)
+ byteArray[3 - n] = (byte) (integer >>> (n * 8));
+
+ return (byteArray);
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..71537327d4163937f05a48bc4c2b54c47928c12d
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java
@@ -0,0 +1,60 @@
+package com.ai.cloud.skywalking.util;
+
+import java.lang.management.ManagementFactory;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+public final class BuriedPointMachineUtil {
+ private static String processNo;
+ private static String IP;
+ private static String hostName;
+
+ static {
+ processNo = getProcessNo();
+ }
+
+ public static String getProcessNo() {
+ if (StringUtil.isEmpty(processNo)) {
+ String name = ManagementFactory.getRuntimeMXBean().getName();
+ processNo = name.split("@")[0];
+ }
+ return processNo;
+ }
+
+ private static InetAddress getInetAddress() {
+ try {
+ return InetAddress.getLocalHost();
+ } catch (UnknownHostException e) {
+ hostName = "unknown host!";
+ }
+ return null;
+
+ }
+
+ public static String getHostIp() {
+ if (StringUtil.isEmpty(IP)) {
+ InetAddress netAddress = getInetAddress();
+ if (null == netAddress) {
+ return null;
+ }
+ IP = netAddress.getHostAddress(); //get the ip address
+ }
+ return IP;
+ }
+
+ public static String getHostName() {
+ if (StringUtil.isEmpty(hostName)) {
+ InetAddress netAddress = getInetAddress();
+ if (null == netAddress) {
+ return null;
+ }
+ hostName = netAddress.getHostName(); //get the host address
+ }
+ return hostName;
+ }
+
+ private BuriedPointMachineUtil() {
+ // Non
+ }
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ContextGenerator.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ContextGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..4168bdf9c2392b4efd4fb3b9be1556f226108a4a
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ContextGenerator.java
@@ -0,0 +1,69 @@
+package com.ai.cloud.skywalking.util;
+
+import com.ai.cloud.skywalking.context.Context;
+import com.ai.cloud.skywalking.context.Span;
+import com.ai.cloud.skywalking.model.ContextData;
+import com.ai.cloud.skywalking.model.SendData;
+
+public final class ContextGenerator {
+ /**
+ * 利用本地ThreadLocal的信息创建Context,主要用于非跨JVM的操作
+ *
+ * @param sendData 视点,业务数据等信息
+ * @return
+ */
+ public static Span generateContextFromThreadLocal(SendData sendData) {
+ Span spanData = getContextFromThreadLocal();
+ // 设置基本属性
+ spanData.setStartDate(System.currentTimeMillis());
+ spanData.setProcessNo(BuriedPointMachineUtil.getProcessNo());
+ spanData.setAddress(BuriedPointMachineUtil.getHostName() + "/" + BuriedPointMachineUtil.getHostIp());
+ spanData.setViewPointId(sendData.getViewPoint());
+ return spanData;
+ }
+
+ /**
+ * 利用传入的Context对象,来构建相对应的Context信息,主要用于跨JVM的操作信息
+ * 跨JVM会产生两条记录。
+ *
+ * @param context
+ * @return
+ */
+ public static Span generateContextFromContextData(ContextData context) {
+ Span spanData;
+ // 校验传入的参数是否为空,如果为空,则新创建一个
+ if (context == null || StringUtil.isEmpty(context.getTraceId())) {
+ // 不存在,新创建一个Context
+ spanData = new Span(TraceIdGenerator.generate());
+ spanData.setLevelId(0L);
+ } else {
+ // 如果不为空,则将当前的Context存放到上下文
+ spanData = new Span(context.getTraceId());
+ spanData.setParentLevel(context.getParentLevel());
+ }
+ // 设置基本信息
+ spanData.setStartDate(System.currentTimeMillis());
+ spanData.setProcessNo(BuriedPointMachineUtil.getProcessNo());
+ spanData.setAddress(BuriedPointMachineUtil.getHostName() + "/" + BuriedPointMachineUtil.getHostIp());
+ return spanData;
+ }
+
+ private static Span getContextFromThreadLocal() {
+ Span span;
+ // 1.获取Context,从ThreadLocal栈中获取中
+ final Span parentSpan = Context.getOrCreate().getLastSpan();
+ // 2 校验Context,Context是否存在
+ if (parentSpan == null) {
+ // 不存在,新创建一个Context
+ span = new Span(TraceIdGenerator.generate());
+ span.setLevelId(0L);
+ } else {
+ // 根据ParentContextData的TraceId和RPCID
+ span = new Span(parentSpan.getTraceId());
+ span.setParentLevel(parentSpan.getParentLevel());
+ span.setLevelId(parentSpan.getLevelId() + 1);
+ }
+ return span;
+ }
+
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ExceptionHandleUtil.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ExceptionHandleUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..165abeb3f1cb2f4bf0c8e862830e5726adab7c48
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/ExceptionHandleUtil.java
@@ -0,0 +1,35 @@
+package com.ai.cloud.skywalking.util;
+
+import com.ai.cloud.skywalking.context.Context;
+import com.ai.cloud.skywalking.context.Span;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+public final class ExceptionHandleUtil {
+ private static String extractExceptionStackMessage(final Throwable e) {
+ ByteArrayOutputStream buf = new ByteArrayOutputStream();
+ StringBuffer expMessage = new StringBuffer();
+ Throwable causeException = e;
+ while (causeException.getCause() != null) {
+ causeException.printStackTrace(new java.io.PrintWriter(buf, true));
+ expMessage.append(buf.toString());
+ causeException = causeException.getCause();
+ }
+ try {
+ buf.close();
+ } catch (IOException e1) {
+ expMessage.append("\n本地发送埋点关闭异常读入流异常,异常信息:");
+ expMessage.append(e1.getCause().getMessage());
+ }
+ return expMessage.toString();
+ }
+
+ public static void handleException(Throwable e) {
+ Span spanData = Context.getOrCreate().getLastSpan();
+ // 设置错误信息
+ byte errorCode = 1;
+ spanData.setStatueCode(errorCode);
+ spanData.setExceptionStack(extractExceptionStackMessage(e));
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/StringUtil.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/StringUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..8527cb8339ee4bc07fcb13575df428cbfa8b2484
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/StringUtil.java
@@ -0,0 +1,10 @@
+package com.ai.cloud.skywalking.util;
+
+public final class StringUtil {
+ public static boolean isEmpty(String str) {
+ if (str == null || "".equals(str) || str.length() == 0) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/TraceIdGenerator.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/TraceIdGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..61ea2fe51d94300c7d38cd650aaa6a6ffd48bbb1
--- /dev/null
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/TraceIdGenerator.java
@@ -0,0 +1,13 @@
+package com.ai.cloud.skywalking.util;
+
+import java.util.UUID;
+
+public final class TraceIdGenerator {
+ private TraceIdGenerator() {
+ // Non
+ }
+
+ public static String generate() {
+ return UUID.randomUUID().toString().replaceAll("-", "");
+ }
+}
diff --git a/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/ContextBufferThread.java b/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/ContextBufferThread.java
new file mode 100644
index 0000000000000000000000000000000000000000..b31806c2897d30ed7d80961fad30287575d5e88a
--- /dev/null
+++ b/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/ContextBufferThread.java
@@ -0,0 +1,37 @@
+package com.ai.cloud.skywalking.buffer;
+
+import com.ai.cloud.skywalking.context.Span;
+
+import java.util.concurrent.CountDownLatch;
+
+/**
+ * Created by astraea on 2015/10/13.
+ */
+public class ContextBufferThread extends Thread {
+ private int maxSize = 500000;
+ private CountDownLatch countDownLatch;
+
+ public ContextBufferThread(CountDownLatch countDownLatch) {
+ this.countDownLatch = countDownLatch;
+ }
+
+ public ContextBufferThread(CountDownLatch countDownLatch, int maxSize) {
+ this.countDownLatch = countDownLatch;
+ this.maxSize = maxSize;
+ }
+
+ @Override
+ public void run() {
+ for (int i = 0; i < maxSize; i++) {
+ Span span = new Span();
+ span.setLevelId(i);
+ try {
+ Thread.sleep(1L);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ ContextBuffer.save(span);
+ }
+ countDownLatch.countDown();
+ }
+}
diff --git a/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/ContextBufferThreadA.java b/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/ContextBufferThreadA.java
new file mode 100644
index 0000000000000000000000000000000000000000..714c4aec84d8664de059350360ccaca6c8f06969
--- /dev/null
+++ b/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/ContextBufferThreadA.java
@@ -0,0 +1,38 @@
+package com.ai.cloud.skywalking.buffer;
+
+import com.ai.cloud.skywalking.context.Span;
+
+import java.util.concurrent.CountDownLatch;
+
+/**
+ * Created by astraea on 2015/10/13.
+ */
+public class ContextBufferThreadA extends Thread {
+ private CountDownLatch countDownLatch;
+ private int maxSize = 500000;
+
+ public ContextBufferThreadA(CountDownLatch countDownLatch) {
+ this.countDownLatch = countDownLatch;
+ }
+
+
+ public ContextBufferThreadA(CountDownLatch countDownLatch, int maxSize) {
+ this.countDownLatch = countDownLatch;
+ this.maxSize = maxSize;
+ }
+
+ @Override
+ public void run() {
+ for (int i = 0; i < maxSize; i++) {
+ Span span = new Span();
+ span.setLevelId(i);
+ try {
+ Thread.sleep(1L);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ // ContextBuffer.save(context);
+ }
+ countDownLatch.countDown();
+ }
+}
diff --git a/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/SpanBufferTest.java b/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/SpanBufferTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a496c0829cf8169da8f04992b0a0515ade18cc2
--- /dev/null
+++ b/skywalking-api/src/test/java/com/ai/cloud/skywalking/buffer/SpanBufferTest.java
@@ -0,0 +1,116 @@
+package com.ai.cloud.skywalking.buffer;
+
+import com.ai.cloud.skywalking.buffer.config.BufferConfig;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadLocalRandom;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(Parameterized.class)
+public class SpanBufferTest {
+ public static CountDownLatch countDownLatch;
+ private int threadSize = 0;
+ private int sizeCount = 0;
+ private String fileName = "d:\\test-data.txt";
+
+ public SpanBufferTest(int threadSize, int sizeCount, int poolSize, int groupSize, int workerSize) {
+ this.threadSize = threadSize;
+ this.sizeCount = sizeCount;
+ BufferGroup.count = new CountDownLatch(threadSize * sizeCount);
+ BufferConfig.MAX_WORKER = workerSize;
+ BufferConfig.GROUP_MAX_SIZE = groupSize;
+ BufferConfig.POOL_MAX_SIZE = poolSize;
+ }
+
+ public int getThreadSize() {
+ return threadSize;
+ }
+
+ public int getSizeCount() {
+ return sizeCount;
+ }
+
+ @Parameterized.Parameters
+ public static Collection getParams() {
+ return Arrays.asList(new Integer[][]{
+ {2000, 100000, 5, 30000, 3},
+// {2000, 100000, 5, 27000, 3},
+// {2000, 100000, 5, 24000, 3},
+// {2000, 100000, 5, 20000, 2},
+// {1, 20, 5, 16000, 2},
+// {2000, 100000, 5, 14000, 2},
+// {2000, 100000, 5, 21000, 3},
+
+ });
+ }
+
+ @Test
+ public void testSave() throws Exception {
+ System.out.println(threadSize + " " + sizeCount);
+ CountDownLatch countDownLatch = new CountDownLatch(threadSize);
+ long start = System.currentTimeMillis();
+ long sleepTime = 1000;
+ for (int i = 0; i < threadSize; i++) {
+ if (i % 100 == 0) {
+ sleepTime = sleepTime / 2;
+ if (sleepTime == 0){
+ sleepTime = 5;
+ }
+ Thread.sleep(sleepTime);
+ }
+ new ContextBufferThread(countDownLatch, sizeCount).start();
+ }
+ countDownLatch.await();
+ long end = System.currentTimeMillis() - start;
+ CountDownLatch countDownLatchA = new CountDownLatch(threadSize);
+ start = System.currentTimeMillis();
+ sleepTime = 1000;
+ for (int i = 0; i < threadSize; i++) {
+ if (i % 100 == 0) {
+ sleepTime = sleepTime / 2;
+ if (sleepTime == 0){
+ sleepTime = 5;
+ }
+ Thread.sleep(sleepTime);
+ }
+ new ContextBufferThreadA(countDownLatchA, sizeCount).start();
+ }
+ countDownLatchA.await();
+ long endA = System.currentTimeMillis() - start;
+ System.out.print("执行完毕!");
+ StringBuilder builder = new StringBuilder();
+ builder.append(threadSize + "\t");
+ builder.append(sizeCount + "\t");
+ builder.append(BufferConfig.MAX_WORKER + "\t");
+ builder.append(BufferConfig.GROUP_MAX_SIZE + "\t");
+ builder.append(BufferConfig.POOL_MAX_SIZE + "\t");
+ builder.append("1 ms/1\t");
+ builder.append((sizeCount * threadSize * 1.0 * 1000) / (end) + "\t");
+ builder.append(((end - endA) * 1.0 / end) + "\t");
+ builder.append(BufferGroup.count.getCount() + "\t" + (BufferGroup.count.getCount() == 0) + "\t\n");
+ appendMethodA(fileName, builder.toString());
+ System.out.println("结果输出成功");
+ assertEquals(1, 1);
+ }
+
+
+ private void appendMethodA(String fileName, String content) {
+ try {
+ RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
+ long fileLength = randomFile.length();
+ randomFile.seek(fileLength);
+ randomFile.writeBytes(content);
+ randomFile.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/skywalking-api/src/test/java/com/ai/cloud/skywalking/sender/SenderTest.java b/skywalking-api/src/test/java/com/ai/cloud/skywalking/sender/SenderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..984f675f8c2e4f61730378dfcbc64c67d682a598
--- /dev/null
+++ b/skywalking-api/src/test/java/com/ai/cloud/skywalking/sender/SenderTest.java
@@ -0,0 +1,44 @@
+package com.ai.cloud.skywalking.sender;
+
+import com.ai.cloud.skywalking.buffer.config.BufferConfig;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.concurrent.CountDownLatch;
+
+@RunWith(Parameterized.class)
+public class SenderTest {
+ private int countSize;
+ private int threadSize;
+
+ public SenderTest(int threadSize, int countSize, int poolSize, int groupSize, int workerSize, int sendSize) {
+ this.threadSize = threadSize;
+ this.countSize = countSize;
+ BufferConfig.MAX_WORKER = workerSize;
+ BufferConfig.GROUP_MAX_SIZE = groupSize;
+ BufferConfig.POOL_MAX_SIZE = poolSize;
+ BufferConfig.SEND_MAX_SIZE = sendSize;
+ }
+
+ @Parameterized.Parameters
+ public static Collection getParams() {
+ return Arrays.asList(new Integer[][]{
+ {10, 1000, 1, 1, 1, 1},
+ });
+ }
+
+ @Test
+ public void testSender() throws InterruptedException {
+ CountDownLatch countDownLatch = new CountDownLatch(threadSize * countSize);
+ for (int i = 0; i < threadSize; i++) {
+ Thread.sleep(1L);
+ new SenderThread(countSize, threadSize + "TTTTTTTTTTTTTTt", countDownLatch).start();
+ }
+ System.out.println(countDownLatch.getCount());
+ countDownLatch.await();
+ System.out.println("发送成功");
+ }
+}
diff --git a/skywalking-api/src/test/java/com/ai/cloud/skywalking/sender/SenderThread.java b/skywalking-api/src/test/java/com/ai/cloud/skywalking/sender/SenderThread.java
new file mode 100644
index 0000000000000000000000000000000000000000..f1dbaa476ee56d72232c64a894e02fdc12be2663
--- /dev/null
+++ b/skywalking-api/src/test/java/com/ai/cloud/skywalking/sender/SenderThread.java
@@ -0,0 +1,29 @@
+package com.ai.cloud.skywalking.sender;
+
+import java.util.concurrent.CountDownLatch;
+
+public class SenderThread extends Thread {
+
+ private int countSize;
+ private String msg;
+ private static CountDownLatch countDownLatch;
+
+ public SenderThread(int countSize, String msg) {
+ this.countSize = countSize;
+ this.msg = msg;
+ }
+
+ public SenderThread(int countSize, String msg, CountDownLatch countDownLatch) {
+ this.countSize = countSize;
+ this.msg = msg;
+ this.countDownLatch = countDownLatch;
+ }
+
+ @Override
+ public void run() {
+ for (int i = 0; i < countSize; i++) {
+ DataSenderFactory.getSender().send(msg + countSize + " ");
+ countDownLatch.countDown();
+ }
+ }
+}
diff --git a/skywalking-api/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/skywalking-api/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/skywalking-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/skywalking-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000000000000000000000000000000000000..db969ce75da2e45d076a61298283634cb2715fdc
--- /dev/null
+++ b/skywalking-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,24 @@
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\model\SendData.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buriedpoint\LocalBuriedPointSender.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buffer\BufferPool.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buffer\BufferGroup.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\api\IBuriedPointReceiver.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buffer\ContextBuffer.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\model\ContextData.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\context\Context.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buffer\config\BufferConfig.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\context\Span.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buriedpoint\RPCBuriedPointReceiver.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\util\StringUtil.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buriedpoint\ThreadFactoryBuriedPointSender.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\util\BuriedPointMachineUtil.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\util\ContextGenerator.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\sender\DataSenderFactory.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\util\ExceptionHandleUtil.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\api\IExceptionHandler.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buriedpoint\ThreadBuriedPointSender.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\sender\protocol\ProtocolBuilder.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\buriedpoint\RPCBuriedPointSender.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\sender\DataSender.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\util\TraceIdGenerator.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\main\java\com\ai\cloud\skywalking\api\IBuriedPointSender.java
diff --git a/skywalking-api/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/skywalking-api/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/skywalking-api/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/skywalking-api/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000000000000000000000000000000000000..ba5521965dcd37881628821ffa074b5d09d528c8
--- /dev/null
+++ b/skywalking-api/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1,5 @@
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\test\java\com\ai\cloud\skywalking\sender\SenderTest.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\test\java\com\ai\cloud\skywalking\buffer\SpanBufferTest.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\test\java\com\ai\cloud\skywalking\buffer\ContextBufferThreadA.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\test\java\com\ai\cloud\skywalking\sender\SenderThread.java
+D:\iworkbench\PaaS-PerformanceMonitor-DEV\skywalking-api\src\test\java\com\ai\cloud\skywalking\buffer\ContextBufferThread.java
diff --git a/skywalking-api/target/surefire/surefire4879793830020611532tmp b/skywalking-api/target/surefire/surefire4879793830020611532tmp
new file mode 100644
index 0000000000000000000000000000000000000000..37e57be32a2ed3fd61fbef2ee5631b9cde236e64
--- /dev/null
+++ b/skywalking-api/target/surefire/surefire4879793830020611532tmp
@@ -0,0 +1,28 @@
+#surefire
+#Sat Nov 07 10:14:59 CST 2015
+testClassesDirectory=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\test-classes
+classPathUrl.4=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\apache\\poi\\poi\\3.13\\poi-3.13.jar
+classPathUrl.3=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\hamcrest\\hamcrest-core\\1.3\\hamcrest-core-1.3.jar
+classPathUrl.2=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\junit\\junit\\4.11\\junit-4.11.jar
+useManifestOnlyJar=true
+classPathUrl.1=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\classes
+reportsDirectory=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\surefire-reports
+classPathUrl.0=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\test-classes
+providerConfiguration=org.apache.maven.surefire.junit4.JUnit4Provider
+testSuiteDefinitionTestSourceDirectory=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\src\\test\\java
+surefireClassPathUrl.1=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\apache\\maven\\surefire\\surefire-api\\2.12.4\\surefire-api-2.12.4.jar
+surefireClassPathUrl.0=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\apache\\maven\\surefire\\surefire-junit4\\2.12.4\\surefire-junit4-2.12.4.jar
+runOrder=filesystem
+useSystemClassLoader=true
+excludes0=**/*$*
+isTrimStackTrace=true
+tc.1=com.ai.cloud.skywalking.sender.SenderTest
+tc.0=com.ai.cloud.skywalking.buffer.SpanBufferTest
+enableAssertions=true
+includes2=**/*TestCase.java
+failIfNoTests=false
+includes1=**/*Test.java
+runStatisticsFile=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\.surefire-FD286B6C823F22651813459C484C842ACACC889D
+includes0=**/Test*.java
+childDelegation=false
+classPathUrl.5=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\commons-codec\\commons-codec\\1.9\\commons-codec-1.9.jar
diff --git a/skywalking-api/target/surefire/surefire4993786420545565990tmp b/skywalking-api/target/surefire/surefire4993786420545565990tmp
new file mode 100644
index 0000000000000000000000000000000000000000..4fdfb285b6b4b5baceaf5606ef6c74edd7f54230
--- /dev/null
+++ b/skywalking-api/target/surefire/surefire4993786420545565990tmp
@@ -0,0 +1,28 @@
+#surefire
+#Sat Nov 07 10:27:56 CST 2015
+testClassesDirectory=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\test-classes
+classPathUrl.4=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\apache\\poi\\poi\\3.13\\poi-3.13.jar
+classPathUrl.3=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\hamcrest\\hamcrest-core\\1.3\\hamcrest-core-1.3.jar
+classPathUrl.2=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\junit\\junit\\4.11\\junit-4.11.jar
+useManifestOnlyJar=true
+classPathUrl.1=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\classes
+reportsDirectory=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\surefire-reports
+classPathUrl.0=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\target\\test-classes
+providerConfiguration=org.apache.maven.surefire.junit4.JUnit4Provider
+testSuiteDefinitionTestSourceDirectory=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\src\\test\\java
+surefireClassPathUrl.1=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\apache\\maven\\surefire\\surefire-api\\2.12.4\\surefire-api-2.12.4.jar
+surefireClassPathUrl.0=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\org\\apache\\maven\\surefire\\surefire-junit4\\2.12.4\\surefire-junit4-2.12.4.jar
+runOrder=filesystem
+useSystemClassLoader=true
+excludes0=**/*$*
+isTrimStackTrace=true
+tc.1=com.ai.cloud.skywalking.sender.SenderTest
+tc.0=com.ai.cloud.skywalking.buffer.SpanBufferTest
+enableAssertions=true
+includes2=**/*TestCase.java
+failIfNoTests=false
+includes1=**/*Test.java
+runStatisticsFile=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api\\.surefire-FD286B6C823F22651813459C484C842ACACC889D
+includes0=**/Test*.java
+childDelegation=false
+classPathUrl.5=D\:\\Programs\\apache-maven-3.2.5\\local-repo\\commons-codec\\commons-codec\\1.9\\commons-codec-1.9.jar
diff --git a/skywalking-api/target/surefire/surefire_06144612310454781787tmp b/skywalking-api/target/surefire/surefire_06144612310454781787tmp
new file mode 100644
index 0000000000000000000000000000000000000000..0083293cdafdd18efc24cb94c64e7c0537d48f00
--- /dev/null
+++ b/skywalking-api/target/surefire/surefire_06144612310454781787tmp
@@ -0,0 +1,6 @@
+#surefire_0
+#Sat Nov 07 10:27:56 CST 2015
+idea.version=14.1.5
+basedir=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api
+user.dir=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api
+localRepository=D\:\\Programs\\apache-maven-3.2.5\\local-repo
diff --git a/skywalking-api/target/surefire/surefire_07476845341598024395tmp b/skywalking-api/target/surefire/surefire_07476845341598024395tmp
new file mode 100644
index 0000000000000000000000000000000000000000..4447014d6d7b297fb799766af81a7eb636a1202e
--- /dev/null
+++ b/skywalking-api/target/surefire/surefire_07476845341598024395tmp
@@ -0,0 +1,7 @@
+#surefire_0
+#Sat Nov 07 10:14:59 CST 2015
+test.skip=true
+idea.version=14.1.5
+basedir=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api
+user.dir=D\:\\iworkbench\\PaaS-PerformanceMonitor-DEV\\skywalking-api
+localRepository=D\:\\Programs\\apache-maven-3.2.5\\local-repo