Commit Graph

333 Commits

Author SHA1 Message Date
Wu Sheng 53e8608832 Merge branch 'master' into 6.0
# Conflicts:
#	.gitignore
#	LICENSE
#	README.md
#	README_ZH.md
#	apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml
#	apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml
#	apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml
#	apm-application-toolkit/apm-toolkit-opentracing/pom.xml
#	apm-application-toolkit/apm-toolkit-trace/pom.xml
#	apm-application-toolkit/pom.xml
#	apm-checkstyle/pom.xml
#	apm-collector/apm-collector-agent/agent-grpc/agent-grpc-define/pom.xml
#	apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/pom.xml
#	apm-collector/apm-collector-agent/agent-grpc/pom.xml
#	apm-collector/apm-collector-agent/agent-jetty/agent-jetty-define/pom.xml
#	apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/pom.xml
#	apm-collector/apm-collector-agent/agent-jetty/pom.xml
#	apm-collector/apm-collector-agent/pom.xml
#	apm-collector/apm-collector-analysis/analysis-alarm/alarm-define/pom.xml
#	apm-collector/apm-collector-analysis/analysis-alarm/alarm-provider/pom.xml
#	apm-collector/apm-collector-analysis/analysis-alarm/pom.xml
#	apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-define/pom.xml
#	apm-collector/apm-collector-analysis/analysis-baseline/baseline-computing-provider/pom.xml
#	apm-collector/apm-collector-analysis/analysis-baseline/pom.xml
#	apm-collector/apm-collector-analysis/analysis-jvm/jvm-define/pom.xml
#	apm-collector/apm-collector-analysis/analysis-jvm/jvm-provider/pom.xml
#	apm-collector/apm-collector-analysis/analysis-jvm/pom.xml
#	apm-collector/apm-collector-analysis/analysis-metric/metric-define/pom.xml
#	apm-collector/apm-collector-analysis/analysis-metric/metric-provider/pom.xml
#	apm-collector/apm-collector-analysis/analysis-metric/pom.xml
#	apm-collector/apm-collector-analysis/analysis-register/pom.xml
#	apm-collector/apm-collector-analysis/analysis-register/register-define/pom.xml
#	apm-collector/apm-collector-analysis/analysis-register/register-provider/pom.xml
#	apm-collector/apm-collector-analysis/analysis-segment-parser/pom.xml
#	apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-define/pom.xml
#	apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/pom.xml
#	apm-collector/apm-collector-analysis/analysis-worker-model/pom.xml
#	apm-collector/apm-collector-analysis/pom.xml
#	apm-collector/apm-collector-boot/pom.xml
#	apm-collector/apm-collector-boot/src/main/resources/component-libraries.yml
#	apm-collector/apm-collector-cache/collector-cache-caffeine-provider/pom.xml
#	apm-collector/apm-collector-cache/collector-cache-define/pom.xml
#	apm-collector/apm-collector-cache/collector-cache-guava-provider/pom.xml
#	apm-collector/apm-collector-cache/pom.xml
#	apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml
#	apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml
#	apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml
#	apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml
#	apm-collector/apm-collector-cluster/pom.xml
#	apm-collector/apm-collector-component/client-component/pom.xml
#	apm-collector/apm-collector-component/pom.xml
#	apm-collector/apm-collector-component/server-component/pom.xml
#	apm-collector/apm-collector-configuration/collector-configuration-define/pom.xml
#	apm-collector/apm-collector-configuration/collector-configuration-provider/pom.xml
#	apm-collector/apm-collector-configuration/pom.xml
#	apm-collector/apm-collector-core/pom.xml
#	apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml
#	apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml
#	apm-collector/apm-collector-grpc-manager/pom.xml
#	apm-collector/apm-collector-instrument/pom.xml
#	apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml
#	apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml
#	apm-collector/apm-collector-jetty-manager/pom.xml
#	apm-collector/apm-collector-naming/collector-naming-define/pom.xml
#	apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml
#	apm-collector/apm-collector-naming/pom.xml
#	apm-collector/apm-collector-remote/collector-remote-define/pom.xml
#	apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml
#	apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml
#	apm-collector/apm-collector-remote/pom.xml
#	apm-collector/apm-collector-storage/collector-storage-define/pom.xml
#	apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml
#	apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml
#	apm-collector/apm-collector-storage/collector-storage-shardingjdbc-provider/pom.xml
#	apm-collector/apm-collector-storage/pom.xml
#	apm-collector/apm-collector-thirdparty-receiver/pom.xml
#	apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/pom.xml
#	apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-define/pom.xml
#	apm-collector/apm-collector-thirdparty-receiver/receiver-zipkin/receiver-zipkin-provider/pom.xml
#	apm-collector/apm-collector-ui/collector-ui-define/pom.xml
#	apm-collector/apm-collector-ui/collector-ui-graphql/pom.xml
#	apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml
#	apm-collector/apm-collector-ui/pom.xml
#	apm-collector/pom.xml
#	apm-commons/apm-datacarrier/pom.xml
#	apm-commons/apm-util/pom.xml
#	apm-commons/pom.xml
#	apm-dist/pom.xml
#	apm-protocol/apm-network/pom.xml
#	apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java
#	apm-protocol/apm-ui-protocol/pom.xml
#	apm-protocol/pom.xml
#	apm-sniffer/apm-agent-core/pom.xml
#	apm-sniffer/apm-agent/pom.xml
#	apm-sniffer/apm-sdk-plugin/activemq-5.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/elastic-job-2.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/httpasyncclient-4.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/hystrix-1.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml
#	apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.0-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/kafka-v1-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/mongodb-2.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml
#	apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/servicecomb-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-0.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/servicecomb-plugin/servicecomb-java-chassis-1.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/sofarpc-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/core-patch/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-commons/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml
#	apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml
#	apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml
#	apm-sniffer/apm-test-tools/pom.xml
#	apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml
#	apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml
#	apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml
#	apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml
#	apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml
#	apm-sniffer/apm-toolkit-activation/pom.xml
#	apm-sniffer/optional-plugins/optional-spring-plugins/pom.xml
#	apm-sniffer/optional-plugins/optional-spring-plugins/spring-annotation-plugin/pom.xml
#	apm-sniffer/optional-plugins/pom.xml
#	apm-sniffer/optional-plugins/trace-ignore-plugin/pom.xml
#	apm-sniffer/pom.xml
#	apm-webapp/pom.xml
#	docs/README.md
#	docs/README_ZH.md
#	docs/cn/Direct-uplink-CN.md
#	docs/cn/How-to-build-CN.md
#	docs/cn/Optional-plugins-CN.md
#	docs/users.md
#	pom.xml
2018-08-25 22:08:19 +08:00
caoyixiong 60e829fa30 Add the function of the specified agent config 2018-08-25 21:41:42 +08:00
caoyixiong 6e6e13b9f5 add the function of the specified agent config (#1584)
* Fix bug stop stopSpan when not createSpan

* Fix bug stop stopSpan when not createSpan

* change the agent log level to millisecond

* add the function of the specified-agent-config

* Update README_ZH.md

* Use -D  to set the specified config path

* add docs

* update docs

* change method name

* add link

* change the function name

* change the key

* format doc
2018-08-25 19:00:27 +08:00
Fatih ERDEM 47cba6c56c Moved hardcoded dependency versions to properties tag in pom.xml (#1583) 2018-08-24 10:18:48 +08:00
Fatih ERDEM 15263bce89 Moved hardcoded dependency versions to properties tag in pom.xml (#1583) 2018-08-24 09:28:25 +08:00
caoyixiong 6fe2fa0c4b change the agent log level to millisecond (#1580)
* Fix bug stop stopSpan when not createSpan

* Fix bug stop stopSpan when not createSpan

* change the agent log level to millisecond
2018-08-23 21:49:16 +08:00
caoyixiong 31e4ceb0b1 change the agent log level to millisecond (#1580)
* Fix bug stop stopSpan when not createSpan

* Fix bug stop stopSpan when not createSpan

* change the agent log level to millisecond
2018-08-23 17:17:27 +08:00
Adrian Cole 4b17685c11 Sync mvnw to 6.0 , provided by @adriancole 2018-08-22 22:50:50 +08:00
oatiz b3959202df [Agent] Provide plugin for Elasticsearch 5.x (#1500)
* [Agent] Provide plugin for Elasticsearch 5.x

Add [Agent] Elasticsearch transport client plugin

fix component name

add elasticsearch component

add elasticSearch component into component-libraries.yml

* update support list

* update PlainListenableActionFutureInterceptor.java

* fix set span attributes

* clear runtimeContext

* remove extra plugins
2018-08-22 20:23:43 +08:00
Adrian Cole d0b951649f Moves to Maven wrapper to stabilize the version in use (#1569)
* Moves to Maven wrapper to stabilize the version in use

This will ensure those building will have similar experience due to
having a fixed maven version.

* Updates most plugin versions and removes redundant configuration

* Sets up build enforcement for JDK 1.8 until further work occurs
2018-08-22 19:04:15 +08:00
peng-yongsheng 4c04a599c4 All of the inventory register test success. 2018-08-18 14:14:28 +08:00
Wu Sheng 1ec420b0fd Remove collector.servers and collector.direct_servers, and add collector.backend_service setting. cc @ascrutae 2018-08-15 22:08:30 +08:00
XiaoFu da2189e598 [Agent] Add plugin for ActiveMQ 5.x (#1513)
* add activemq-plugin

* fix  update ActiveMQConsumerInstrumentation Enhance another class

* refacor ActiveMQConsumerInstrumentation code

* support both  topic and queue

* clear the code

* add UnitTest add fix bug

* fix obtain url  bug

* Refactor the ActiveMQProducerInstrumentation code

* fix bug

* fix ConstructorInterceptor BUG

* add Licensed

* Update application.yml

Restore configuration

* Restore configuration

* perfect test

* fix

* fix License

* fix  Project Files

* fix import class in instrumentation

* fix test case

* fix java doc

* fix  Trigger CI

* fix ActiveMQConsumerAndProducerConstructorInterceptorTest

* delete unit test

* fix

* fix

* fix  folder directory problem

* Delete ActiveMQConsumerInstrumentation.java
2018-08-04 20:13:00 +08:00
XiaoFu 1d39614b00 [Agent] Add plugin for ActiveMQ 5.x (#1513)
* add activemq-plugin

* fix  update ActiveMQConsumerInstrumentation Enhance another class

* refacor ActiveMQConsumerInstrumentation code

* support both  topic and queue

* clear the code

* add UnitTest add fix bug

* fix obtain url  bug

* Refactor the ActiveMQProducerInstrumentation code

* fix bug

* fix ConstructorInterceptor BUG

* add Licensed

* Update application.yml

Restore configuration

* Restore configuration

* perfect test

* fix

* fix License

* fix  Project Files

* fix import class in instrumentation

* fix test case

* fix java doc

* fix  Trigger CI

* fix ActiveMQConsumerAndProducerConstructorInterceptorTest

* delete unit test

* fix

* fix

* fix  folder directory problem

* Delete ActiveMQConsumerInstrumentation.java
2018-08-04 14:14:50 +08:00
Xin,Zhang 291e799190 Cherry-pick from commit 56d7fe4ed7 2018-07-24 15:02:26 +08:00
Xin,Zhang 56d7fe4ed7 Fix RuntimeContext cannot store anything when the trace is not creat (#1480)
* Fix RuntimeContext cannot store anything when the trace is not create

* Add RuntimecontextSnapshot and remove debug info
2018-07-24 14:39:56 +08:00
Wu Sheng 48348efe74 @lemon @ascrutae I change the proto file path for preparing 6.0, but didn't change .net namespace. But I think if you sync the protocol submodule, you still need some changes. 2018-07-17 14:20:58 +08:00
吴晟 Wu Sheng e0979ceed7
Update version to RC (#1446)
* Change version
2018-07-11 15:53:33 -07:00
peng-yongsheng d2753037bb Upgrade version to 6.0.0 alpha. 2018-07-07 10:46:41 +08:00
吴晟 Wu Sheng 1b83b34401
Relied on grpc response for certain, to avoid OOM when collector is overloaded. (#1323) 2018-06-10 22:00:49 +08:00
Xin,Zhang 7cf67ffa60 Support the Chinese in config properties (#1288) 2018-05-30 19:52:42 +08:00
oatiz dbc0f8b9d2 Fix namespace bug (#1276)
* fix #1274
2018-05-28 21:56:09 +08:00
吴晟 Wu Sheng e249e0607d
Provide runtime context. (#1249) 2018-05-21 22:43:48 +08:00
吴晟 Wu Sheng a6e04c97ec
Update version to beta2 for next iteration. (#1233) 2018-05-16 21:21:30 +08:00
lican 4714f0e19e fix #1174 (#1175) 2018-05-05 23:02:36 +08:00
Xin,Zhang 03e3eb11d5 Fix the GC value is incorrect (#1147) 2018-05-03 15:17:22 +08:00
吴晟 Wu Sheng 4d8fc03264
Allow use SkyWalking plugin to override service in Agent core. (#1111)
* Allow use SkyWalking plugin to override service in Agent core.

* Fix CI.

* Remove duplicate plugin load.

* Add test cases for new plugin boot service machanism.
2018-04-25 07:44:30 +08:00
lican b4ded22c87 add some basic testcase(apm-util and partial collector-ui-jetty-provider) (#1072)
* commons testcase

* some ui module query testcase

* add testcase

* fix some checkStyle issue

* add some null testcase

* remove

* add license

* fix author error

* remove invalid tag @date

* add license which has been missed
2018-04-13 23:58:47 +08:00
carlvine500 8612f80260 add jdk-cross-thread-plugin (#845)
* add jdk-cross-thread-plugin
2018-04-12 20:51:09 +08:00
carlvine500 5ea5471c96 add ContextManager.isActive() (#1070) 2018-04-12 11:35:19 +08:00
吴晟 Wu Sheng 1261e03c9b
Fix the count of gc is incorrect. (#1054) 2018-04-09 18:53:08 +08:00
吴晟 Wu Sheng 90fb7b7149
Because of key issue, system env override can't be supported. (#1017)
* Because of key issue, system env override can't be supported.

* Override value only in supported types. Int, String, Long, Boolean.
2018-04-03 16:16:41 +08:00
吴晟 Wu Sheng d322f52843 Support token auth in gRPC upstream (#1000)
* Add client side token.

* Fix ci.

* Fix most codes of token auth at both sides.

* Add settings in config files.

* Make auth interceptor doesn't throw expcetion.

* Update AuthenticationSimpleChecker.java

* Update AuthenticationActivator.java

* Revert "Update AuthenticationActivator.java"

This reverts commit 0935f18fd6802ab84c12e0609c21ef753ff51be3.

* Merge branch 'feature/token-auth' of https://github.com/apache/incubator-skywalking into feature/token-auth

# Conflicts:
#	apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/main/java/org/apache/skywalking/apm/collector/agent/grpc/provider/AuthenticationSimpleChecker.java

* Fix Auhentication token works incorrect (#1001)

* Fix Auhentication token works incorrect

* Change way to build GRPC Channel

* Response an empty header when auth fails.
2018-03-31 20:06:48 +08:00
吴晟 Wu Sheng e13ff79326 Sync to fix release check (#982)
Fix IPMC checks for releasing.
2018-03-24 17:11:04 +08:00
吴晟 Wu Sheng f625f609b3
Support direct server setting in agent. (#975)
* Support direct server setting in agent.

* Fix format.

* Add direct_servers check (#981)
2018-03-23 16:07:21 +08:00
吴晟 Wu Sheng d8d28a0b33
Support TLS of gRPC between agent and server. (#968)
* Finish the prototype of TLS of gRPC between agent and server.

* Fix for rat check.

* Update GRPCChannelManager.java

* Update AgentModuleGRPCProvider.java

* Upgrade netty version (#971)

* Make sure end user can't start gRPC server with and without SSL in the same port.
2018-03-22 06:59:17 +08:00
吴晟 Wu Sheng c56046d29a
Add namespace for headers. (#954) 2018-03-19 15:33:05 +08:00
吴晟 Wu Sheng 08267611a2 Prepare beta iteratoration (#944)
* [maven-release-plugin] prepare release apm-5.0.0-alpha

* [maven-release-plugin] prepare for next development iteration
2018-03-13 23:47:38 -05:00
ascrutae 26889046bc [Agent] fix create entry span failure 2018-03-05 18:06:17 +08:00
peng-yongsheng 40eeb8739a 1. Get the service id only when agent register service name.
2. Setting the src span type when agent register service name.
3. Revert the topology build logic.
2018-03-04 00:22:45 +08:00
carlvine 8dd788de6a HttpGet:add http time out 2018-02-28 19:35:19 +08:00
wusheng f7fdd9f854 Fix assmbly for mvn clean install -Papache-release and update version to SNAPSHOT for SNAPSHOT release. 2018-02-26 23:22:10 +08:00
wu-sheng 158b6ff884 Fixing javadoc. And try to trigger a ci fail in this commit, in order to make sure javadoc will be checked in further pull request. 2018-02-26 09:15:10 +08:00
ascrutae 8d381976cd [Agent] fix HierarchyMatch donot support generic type 2018-02-25 17:03:24 +08:00
wu-sheng ca11058f8e Add a new field for operation register. 2018-02-07 15:58:05 +08:00
carlvine 5c44dd96a2 bugfix:no data collected after application started 20+seconds 2018-02-07 09:53:19 +08:00
ascrutae 906a2c4d05 add testcase 2018-01-23 20:03:50 +08:00
ascrutae aeb04783c6 [Agent] Add Topic and Borker tags 2018-01-16 14:15:37 +08:00
彭勇升 pengys 6c11a8404b
Merge branch 'master' into fix/ScheduledFuture-failsafe 2018-01-11 22:33:14 +08:00
ascrutae c6e593f6f4 refactory MultiClassNameMatch code 2018-01-11 17:28:01 +08:00