From 78eec8bce352bb6ea0da091e672bf9b1f49031a7 Mon Sep 17 00:00:00 2001 From: little-cui Date: Sun, 24 Sep 2017 16:23:30 +0800 Subject: [PATCH 01/25] Code restructure. --- examples/perf/eureka_hb.test | 59 ---------- examples/perf/eureka_register.test | 59 ---------- examples/perf/native.go | 14 --- examples/perf/native.test | 45 -------- examples/perf/rata.go | 26 ----- examples/perf/rata.test | 56 ---------- examples/perf/sc.test | 56 ---------- examples/perf/sc_hb.test | 58 ---------- examples/perf/sc_register.test | 58 ---------- examples/query_rule/add_rule.response.json | 8 -- examples/query_rule/add_rule.sh | 8 -- examples/query_rule/delete_rule.sh | 2 - examples/query_rule/edit_rule.sh | 9 -- examples/query_rule/get_rules.response.json | 10 -- examples/query_rule/get_rules.sh | 2 - examples/watch/dead.json | 26 ----- examples/watch/deregistered.json | 14 --- examples/watch/message | 3 - examples/watch/registered.json | 26 ----- examples/watch/update.json | 17 --- examples/watch/update_status.json | 15 --- examples/websocket.js | 21 ---- pkg/{common => }/cache/cache.go | 0 pkg/common/common_suite_test.go | 26 ----- pkg/common/common_test.go | 25 ----- {util => pkg}/errors/error.go | 0 pkg/etcdsync/mutex.go | 2 +- pkg/gonc/gonc.go | 78 ------------- {util => pkg}/grace/grace.go | 2 +- pkg/lager/core/chug/chug.go | 2 +- pkg/{common => }/logrotate/logrotate.go | 2 +- pkg/{plugins => plugin}/loader.go | 4 +- {util => pkg}/rest/client.go | 2 +- {util => pkg}/rest/common.go | 24 ++-- {util => pkg}/rest/conn.go | 0 {util => pkg}/rest/listener.go | 0 {util => pkg}/rest/roa.go | 2 +- {util => pkg}/rest/route.go | 2 +- {util => pkg}/rest/server.go | 4 +- pkg/{common/ssl.go => tlsutil/tlsutil.go} | 8 +- {util => pkg/util}/goroutines.go | 0 {util => pkg/util}/goroutines_test.go | 0 {util => pkg/util}/log.go | 0 {util => pkg/util}/log_test.go | 0 {util => pkg/util}/sys.go | 0 {util => pkg/util}/uniqueue.go | 0 {util => pkg/util}/uniqueue_test.go | 0 util/common.go => pkg/util/util.go | 0 {util => pkg}/uuid/uuid.go | 0 {util => pkg}/validate/map.go | 0 {util => pkg}/validate/reflect.go | 0 {util => pkg}/validate/url.go | 0 {util => pkg}/validate/validate.go | 0 server/api.go | 6 +- server/bootstrap/bootstrap.go | 13 +-- server/common/common_key.go | 20 ---- server/{helper => common}/header.go | 4 +- pkg/common/common.go => server/core/0_init.go | 17 ++- server/core/common.go | 18 +-- server/core/key_generator.go | 2 +- server/core/microservice.go | 2 +- server/core/proto/services.go | 2 +- .../registry/embededetcd/embed_etcd_plugin.go | 10 +- .../core/registry/etcd/remote_etcd_plugin.go | 10 +- server/core/registry/registry.go | 2 +- server/core/registry/store/async_task.go | 2 +- server/core/registry/store/async_task_test.go | 2 +- server/core/registry/store/cacher.go | 2 +- server/core/registry/store/defer.go | 2 +- server/core/registry/store/indexer.go | 2 +- server/core/registry/store/listwatch.go | 2 +- server/core/registry/store/store.go | 2 +- server/core/system.go | 2 +- {pkg => server/infra}/security/cipher.go | 0 server/interceptor/access/access.go | 8 +- server/interceptor/cors/cors.go | 2 +- server/interceptor/domain/domain.go | 6 +- server/interceptor/interceptors.go | 2 +- server/interceptor/ratelimiter/limiter.go | 2 +- server/{core => }/mux/mux.go | 0 server/{plugins => plugin}/dynamic/uuid.go | 16 +-- .../infra/quota/buildin/quota.go | 22 ++-- .../infra/quota/unlimit/unlimit.go | 4 +- .../plugin/infra/security}/plain/default.go | 2 +- server/rest/{ => controller}/rest_util.go | 4 +- .../v3}/governservice_controller.go | 17 +-- .../v3}/instance_controller.go | 61 ++++++----- .../{ => controller/v3}/instance_watcher.go | 9 +- .../{ => controller/v3}/main_controller.go | 11 +- .../v3}/microservice_controller.go | 103 +++++++++--------- .../v3}/query_rule_controller.go | 25 +++-- .../{ => controller/v3}/tag_controller.go | 21 ++-- server/rest/{routers => controller/v3}/v3.go | 22 ++-- .../rest/{handlers/server.go => handler.go} | 6 +- server/rest/server.go | 10 +- server/rpc/server.go | 10 +- server/server.go | 9 +- server/service/concurrent_test.go | 2 +- .../service/event/instance_event_handler.go | 2 +- server/service/event/rule_event_handler.go | 2 +- server/service/event/tag_event_handler.go | 2 +- server/service/governservice.go | 2 +- server/service/instances.go | 6 +- server/service/microservices.go | 8 +- server/service/microservices_test.go | 4 +- server/service/notification/listwatcher.go | 2 +- .../notification_healthchecker.go | 2 +- .../notification/notification_service.go | 2 +- server/service/notification/watch_util.go | 2 +- server/service/rule.go | 6 +- server/service/rule_test.go | 8 +- server/service/schema.go | 2 +- server/service/service_suite_test.go | 4 +- server/service/services_dependency.go | 4 +- server/service/tag.go | 2 +- server/service/tag_test.go | 10 +- server/service/util/dependency.go | 6 +- server/service/util/instance_util.go | 2 +- server/service/util/microservice_util.go | 4 +- server/service/util/rule_util.go | 4 +- server/service/util/tag_util.go | 2 +- server/service/util/tenant_util.go | 2 +- server/service/util/versionrule.go | 2 +- 123 files changed, 319 insertions(+), 1044 deletions(-) delete mode 100644 examples/perf/eureka_hb.test delete mode 100644 examples/perf/eureka_register.test delete mode 100644 examples/perf/native.go delete mode 100644 examples/perf/native.test delete mode 100644 examples/perf/rata.go delete mode 100644 examples/perf/rata.test delete mode 100644 examples/perf/sc.test delete mode 100644 examples/perf/sc_hb.test delete mode 100644 examples/perf/sc_register.test delete mode 100644 examples/query_rule/add_rule.response.json delete mode 100644 examples/query_rule/add_rule.sh delete mode 100644 examples/query_rule/delete_rule.sh delete mode 100644 examples/query_rule/edit_rule.sh delete mode 100644 examples/query_rule/get_rules.response.json delete mode 100644 examples/query_rule/get_rules.sh delete mode 100644 examples/watch/dead.json delete mode 100644 examples/watch/deregistered.json delete mode 100644 examples/watch/message delete mode 100644 examples/watch/registered.json delete mode 100644 examples/watch/update.json delete mode 100644 examples/watch/update_status.json delete mode 100644 examples/websocket.js rename pkg/{common => }/cache/cache.go (100%) delete mode 100644 pkg/common/common_suite_test.go delete mode 100644 pkg/common/common_test.go rename {util => pkg}/errors/error.go (100%) delete mode 100644 pkg/gonc/gonc.go rename {util => pkg}/grace/grace.go (98%) rename pkg/{common => }/logrotate/logrotate.go (99%) rename pkg/{plugins => plugin}/loader.go (97%) rename {util => pkg}/rest/client.go (99%) rename {util => pkg}/rest/common.go (86%) rename {util => pkg}/rest/conn.go (100%) rename {util => pkg}/rest/listener.go (100%) rename {util => pkg}/rest/roa.go (97%) rename {util => pkg}/rest/route.go (98%) rename {util => pkg}/rest/server.go (98%) rename pkg/{common/ssl.go => tlsutil/tlsutil.go} (97%) rename {util => pkg/util}/goroutines.go (100%) rename {util => pkg/util}/goroutines_test.go (100%) rename {util => pkg/util}/log.go (100%) rename {util => pkg/util}/log_test.go (100%) rename {util => pkg/util}/sys.go (100%) rename {util => pkg/util}/uniqueue.go (100%) rename {util => pkg/util}/uniqueue_test.go (100%) rename util/common.go => pkg/util/util.go (100%) rename {util => pkg}/uuid/uuid.go (100%) rename {util => pkg}/validate/map.go (100%) rename {util => pkg}/validate/reflect.go (100%) rename {util => pkg}/validate/url.go (100%) rename {util => pkg}/validate/validate.go (100%) delete mode 100644 server/common/common_key.go rename server/{helper => common}/header.go (96%) rename pkg/common/common.go => server/core/0_init.go (85%) rename {pkg => server/infra}/security/cipher.go (100%) rename server/{core => }/mux/mux.go (100%) rename server/{plugins => plugin}/dynamic/uuid.go (63%) rename server/{plugins => plugin}/infra/quota/buildin/quota.go (84%) rename server/{plugins => plugin}/infra/quota/unlimit/unlimit.go (100%) rename {pkg/security/plugins => server/plugin/infra/security}/plain/default.go (93%) rename server/rest/{ => controller}/rest_util.go (97%) rename server/rest/{ => controller/v3}/governservice_controller.go (88%) rename server/rest/{ => controller/v3}/instance_controller.go (78%) rename server/rest/{ => controller/v3}/instance_watcher.go (89%) rename server/rest/{ => controller/v3}/main_controller.go (83%) rename server/rest/{ => controller/v3}/microservice_controller.go (73%) rename server/rest/{ => controller/v3}/query_rule_controller.go (79%) rename server/rest/{ => controller/v3}/tag_controller.go (80%) rename server/rest/{routers => controller/v3}/v3.go (63%) rename server/rest/{handlers/server.go => handler.go} (87%) diff --git a/examples/perf/eureka_hb.test b/examples/perf/eureka_hb.test deleted file mode 100644 index 3f2a5d696..000000000 --- a/examples/perf/eureka_hb.test +++ /dev/null @@ -1,59 +0,0 @@ -CPU 800% - -root@ubuntu3:~# ab -c 5000 -n 1000000 -u 'json2' http://8.0.184.100:8080/eureka/v2/apps/SERVICECENTER/ubuntu1 -This is ApacheBench, Version 2.3 <$Revision: 1528965 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking 8.0.184.100 (be patient) -Completed 100000 requests -Completed 200000 requests -Completed 300000 requests -Completed 400000 requests -Completed 500000 requests -Completed 600000 requests -Completed 700000 requests -Completed 800000 requests -Completed 900000 requests -Completed 1000000 requests -Finished 1000000 requests - - -Server Software: Apache-Coyote/1.1 -Server Hostname: 8.0.184.100 -Server Port: 8080 - -Document Path: /eureka/v2/apps/SERVICECENTER/ubuntu1 -Document Length: 0 bytes - -Concurrency Level: 5000 -Time taken for tests: 19.715 seconds -Complete requests: 1000000 -Failed requests: 0 -Total transferred: 175000000 bytes -Total body sent: 165000000 -HTML transferred: 0 bytes -Requests per second: 50721.99 [#/sec] (mean) -Time per request: 98.577 [ms] (mean) -Time per request: 0.020 [ms] (mean, across all concurrent requests) -Transfer rate: 8668.31 [Kbytes/sec] received - 8172.98 kb/s sent - 16841.29 kb/s total - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 0 81 402.6 8 15043 -Processing: 0 11 46.9 9 6425 -Waiting: 0 9 46.8 7 6423 -Total: 0 92 409.4 18 15060 - -Percentage of the requests served within a certain time (ms) - 50% 18 - 66% 23 - 75% 26 - 80% 27 - 90% 31 - 95% 1002 - 98% 1024 - 99% 1032 - 100% 15060 (longest request) diff --git a/examples/perf/eureka_register.test b/examples/perf/eureka_register.test deleted file mode 100644 index 9c95ff830..000000000 --- a/examples/perf/eureka_register.test +++ /dev/null @@ -1,59 +0,0 @@ -cpu 200% - -root@ubuntu3:~# ab -T "application/json" -c 3000 -n 1000000 -p 'json1' http://8.0.184.100:8080/eureka/v2/apps/SERVICECENTER -This is ApacheBench, Version 2.3 <$Revision: 1528965 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking 8.0.184.100 (be patient) -Completed 100000 requests -Completed 200000 requests -Completed 300000 requests -Completed 400000 requests -Completed 500000 requests -Completed 600000 requests -Completed 700000 requests -Completed 800000 requests -Completed 900000 requests -Completed 1000000 requests -Finished 1000000 requests - - -Server Software: Apache-Coyote/1.1 -Server Hostname: 8.0.184.100 -Server Port: 8080 - -Document Path: /eureka/v2/apps/SERVICECENTER -Document Length: 0 bytes - -Concurrency Level: 3000 -Time taken for tests: 421.229 seconds -Complete requests: 1000000 -Failed requests: 0 -Total transferred: 164000000 bytes -Total body sent: 623000000 -HTML transferred: 0 bytes -Requests per second: 2374.01 [#/sec] (mean) -Time per request: 1263.687 [ms] (mean) -Time per request: 0.421 [ms] (mean, across all concurrent requests) -Transfer rate: 380.21 [Kbytes/sec] received - 1444.34 kb/s sent - 1824.55 kb/s total - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 0 1 30.8 0 3000 -Processing: 13 1261 140.7 1232 2475 -Waiting: 13 1261 140.7 1232 2475 -Total: 51 1262 142.7 1232 4305 - -Percentage of the requests served within a certain time (ms) - 50% 1232 - 66% 1242 - 75% 1251 - 80% 1257 - 90% 1298 - 95% 1615 - 98% 1788 - 99% 1859 - 100% 4305 (longest request) diff --git a/examples/perf/native.go b/examples/perf/native.go deleted file mode 100644 index 298636591..000000000 --- a/examples/perf/native.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - "net/http" -) - -func handler(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("")) -} - -func main() { - http.HandleFunc("/", handler) - http.ListenAndServe(":8080", nil) -} diff --git a/examples/perf/native.test b/examples/perf/native.test deleted file mode 100644 index 6fc754a41..000000000 --- a/examples/perf/native.test +++ /dev/null @@ -1,45 +0,0 @@ -cpu 1200% - -root@ubuntu3:~# ab -c 5000 -n 1000000 http://8.0.184.100:9980/ -This is ApacheBench, Version 2.3 <$Revision: 1528965 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking 8.0.184.100 (be patient) -Completed 100000 requests -Completed 200000 requests -Completed 300000 requests -Completed 400000 requests -Completed 500000 requests -Completed 600000 requests -Completed 700000 requests -Completed 800000 requests -Completed 900000 requests -Completed 1000000 requests -Finished 1000000 requests - - -Server Software: -Server Hostname: 8.0.184.100 -Server Port: 9980 - -Document Path: / -Document Length: 0 bytes - -Concurrency Level: 5000 -Time taken for tests: 23.702 seconds -Complete requests: 1000000 -Failed requests: 0 -Total transferred: 116000000 bytes -HTML transferred: 0 bytes -Requests per second: 42191.24 [#/sec] (mean) -Time per request: 118.508 [ms] (mean) -Time per request: 0.024 [ms] (mean, across all concurrent requests) -Transfer rate: 4779.48 [Kbytes/sec] received - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 25 55 50.6 52 3062 -Processing: 14 63 23.6 61 476 -Waiting: 12 43 25.1 39 468 -Total: 77 118 54.2 115 3118 diff --git a/examples/perf/rata.go b/examples/perf/rata.go deleted file mode 100644 index 84ee05184..000000000 --- a/examples/perf/rata.go +++ /dev/null @@ -1,26 +0,0 @@ -package main - -import ( - "github.com/tedsuo/rata" - "net/http" -) - -func handler2(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("")) -} -func main() { - petRoutes := rata.Routes{ - {Name: "get_pet", Method: "GET", Path: "/"}, - } - petHandlers := rata.Handlers{ - "get_pet": http.HandlerFunc(handler2), - } - router, err := rata.NewRouter(petRoutes, petHandlers) - if err != nil { - panic(err) - } - - // The router is just an http.Handler, so it can be used to create a server in the usual fashion: - http.Handle("/", router) - http.ListenAndServe(":9980", nil) -} diff --git a/examples/perf/rata.test b/examples/perf/rata.test deleted file mode 100644 index 214c6865d..000000000 --- a/examples/perf/rata.test +++ /dev/null @@ -1,56 +0,0 @@ -cpu占用1200% - -root@ubuntu3:~# ab -c 5000 -n 1000000 http://8.0.184.100:9980/ -This is ApacheBench, Version 2.3 <$Revision: 1528965 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking 8.0.184.100 (be patient) -Completed 100000 requests -Completed 200000 requests -Completed 300000 requests -Completed 400000 requests -Completed 500000 requests -Completed 600000 requests -Completed 700000 requests -Completed 800000 requests -Completed 900000 requests -Completed 1000000 requests -Finished 1000000 requests - - -Server Software: -Server Hostname: 8.0.184.100 -Server Port: 9980 - -Document Path: / -Document Length: 0 bytes - -Concurrency Level: 5000 -Time taken for tests: 23.586 seconds -Complete requests: 1000000 -Failed requests: 0 -Total transferred: 116000000 bytes -HTML transferred: 0 bytes -Requests per second: 42397.79 [#/sec] (mean) -Time per request: 117.931 [ms] (mean) -Time per request: 0.024 [ms] (mean, across all concurrent requests) -Transfer rate: 4802.87 [Kbytes/sec] received - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 27 54 47.2 52 3061 -Processing: 23 63 25.4 61 474 -Waiting: 12 43 26.5 40 449 -Total: 67 117 51.6 114 3117 - -Percentage of the requests served within a certain time (ms) - 50% 114 - 66% 116 - 75% 116 - 80% 117 - 90% 118 - 95% 119 - 98% 136 - 99% 301 - 100% 3117 (longest request) \ No newline at end of file diff --git a/examples/perf/sc.test b/examples/perf/sc.test deleted file mode 100644 index e77ad4e19..000000000 --- a/examples/perf/sc.test +++ /dev/null @@ -1,56 +0,0 @@ -CPU 1200% - -root@ubuntu3:~# ab -c 5000 -n 1000000 http://8.0.184.100:9980/v2/health -This is ApacheBench, Version 2.3 <$Revision: 1528965 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking 8.0.184.100 (be patient) -Completed 100000 requests -Completed 200000 requests -Completed 300000 requests -Completed 400000 requests -Completed 500000 requests -Completed 600000 requests -Completed 700000 requests -Completed 800000 requests -Completed 900000 requests -Completed 1000000 requests -Finished 1000000 requests - - -Server Software: -Server Hostname: 8.0.184.100 -Server Port: 9980 - -Document Path: /v2/health -Document Length: 0 bytes - -Concurrency Level: 5000 -Time taken for tests: 24.326 seconds -Complete requests: 1000000 -Failed requests: 0 -Total transferred: 116000000 bytes -HTML transferred: 0 bytes -Requests per second: 41108.39 [#/sec] (mean) -Time per request: 121.630 [ms] (mean) -Time per request: 0.024 [ms] (mean, across all concurrent requests) -Transfer rate: 4656.81 [Kbytes/sec] received - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 0 4 21.3 2 1015 -Processing: 29 117 15.8 118 176 -Waiting: 20 116 17.4 117 176 -Total: 82 121 23.6 120 1156 - -Percentage of the requests served within a certain time (ms) - 50% 120 - 66% 125 - 75% 128 - 80% 131 - 90% 138 - 95% 143 - 98% 150 - 99% 153 - 100% 1156 (longest request) diff --git a/examples/perf/sc_hb.test b/examples/perf/sc_hb.test deleted file mode 100644 index e26895339..000000000 --- a/examples/perf/sc_hb.test +++ /dev/null @@ -1,58 +0,0 @@ -sc cpu 3600% eureka cpu 300% -root@ubuntu3:~# ab -c 3000 -n 1000000 -u json2 http://8.0.184.100:9980/registry/v2/mservices/59317982-8fd2-41a2-8e52-5377d93818ce/1 -This is ApacheBench, Version 2.3 <$Revision: 1528965 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking 8.0.184.100 (be patient) -Completed 100000 requests -Completed 200000 requests -Completed 300000 requests -Completed 400000 requests -Completed 500000 requests -Completed 600000 requests -Completed 700000 requests -Completed 800000 requests -Completed 900000 requests -Completed 1000000 requests -Finished 1000000 requests - - -Server Software: -Server Hostname: 8.0.184.100 -Server Port: 9980 - -Document Path: /registry/v2/mservices/59317982-8fd2-41a2-8e52-5377d93818ce/1 -Document Length: 0 bytes - -Concurrency Level: 3000 -Time taken for tests: 74.431 seconds -Complete requests: 1000000 -Failed requests: 0 -Total transferred: 116000000 bytes -Total body sent: 189000000 -HTML transferred: 0 bytes -Requests per second: 13435.18 [#/sec] (mean) -Time per request: 223.294 [ms] (mean) -Time per request: 0.074 [ms] (mean, across all concurrent requests) -Transfer rate: 1521.95 [Kbytes/sec] received - 2479.73 kb/s sent - 4001.69 kb/s total - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 0 4 52.8 1 3003 -Processing: 43 216 62.7 210 3232 -Waiting: 43 216 62.7 210 3232 -Total: 75 220 82.0 212 3330 - -Percentage of the requests served within a certain time (ms) - 50% 212 - 66% 231 - 75% 244 - 80% 252 - 90% 276 - 95% 300 - 98% 334 - 99% 373 - 100% 3330 (longest request) diff --git a/examples/perf/sc_register.test b/examples/perf/sc_register.test deleted file mode 100644 index d6455d251..000000000 --- a/examples/perf/sc_register.test +++ /dev/null @@ -1,58 +0,0 @@ -sc cpu 500% eureka cpu 200% -root@ubuntu3:~# ab -c 5000 -n 100000 -T "application/json" -p json3 http://8.0.184.100:9980/registry/v2/mservices/59317982-8fd2-41a2-8e52-5377d93818ce -This is ApacheBench, Version 2.3 <$Revision: 1528965 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking 8.0.184.100 (be patient) -Completed 10000 requests -Completed 20000 requests -Completed 30000 requests -Completed 40000 requests -Completed 50000 requests -Completed 60000 requests -Completed 70000 requests -Completed 80000 requests -Completed 90000 requests -Completed 100000 requests -Finished 100000 requests - - -Server Software: -Server Hostname: 8.0.184.100 -Server Port: 9980 - -Document Path: /registry/v2/mservices/59317982-8fd2-41a2-8e52-5377d93818ce -Document Length: 0 bytes - -Concurrency Level: 5000 -Time taken for tests: 43.035 seconds -Complete requests: 100000 -Failed requests: 0 -Total transferred: 6348160 bytes -Total body sent: 75800000 -HTML transferred: 0 bytes -Requests per second: 2323.68 [#/sec] (mean) -Time per request: 2151.764 [ms] (mean) -Time per request: 0.430 [ms] (mean, across all concurrent requests) -Transfer rate: 144.05 [Kbytes/sec] received - 1720.06 kb/s sent - 1864.12 kb/s total - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 0 2 8.7 0 54 -Processing: 2 2041 914.7 1932 12951 -Waiting: 0 1994 866.0 1925 5018 -Total: 3 2043 914.0 1933 12951 - -Percentage of the requests served within a certain time (ms) - 50% 1933 - 66% 2240 - 75% 2463 - 80% 2602 - 90% 3229 - 95% 3721 - 98% 4304 - 99% 4827 - 100% 12951 (longest request) diff --git a/examples/query_rule/add_rule.response.json b/examples/query_rule/add_rule.response.json deleted file mode 100644 index b8dbbc421..000000000 --- a/examples/query_rule/add_rule.response.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "id": 2, - "service_uuid": "822dc214-3e62-4bae-8411-7e1261e2c328", - "attribute": "ServiceName", - "pattern": "user.*8", - "description": "test", - "rule_type": "white" -} \ No newline at end of file diff --git a/examples/query_rule/add_rule.sh b/examples/query_rule/add_rule.sh deleted file mode 100644 index 740810606..000000000 --- a/examples/query_rule/add_rule.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -curl -X POST -H "Content-Type: application/json" -d '{ - "service_uuid": "822dc214-3e62-4bae-8411-7e1261e2c328", - "attribute": "ServiceName", - "pattern": "user.*8", - "description": "test", - "rule_type": "white" -}' "http://10.162.197.95:30200/service_center/v2/rules" \ No newline at end of file diff --git a/examples/query_rule/delete_rule.sh b/examples/query_rule/delete_rule.sh deleted file mode 100644 index 16e3cc052..000000000 --- a/examples/query_rule/delete_rule.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -curl -X DELETE "http://10.162.197.95:30200/service_center/v2/rules/1" \ No newline at end of file diff --git a/examples/query_rule/edit_rule.sh b/examples/query_rule/edit_rule.sh deleted file mode 100644 index 1be004c0f..000000000 --- a/examples/query_rule/edit_rule.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -curl -X PUT -H "Content-Type: application/json" -d '{ - "id":1, - "service_uuid": "822dc214-3e62-4bae-8411-7e1261e2c328", - "attribute": "ServiceName", - "pattern": "user.*8", - "description": "test", - "rule_type": "white" -}' "http://10.162.197.95:30200/service_center/v2/rules/1" \ No newline at end of file diff --git a/examples/query_rule/get_rules.response.json b/examples/query_rule/get_rules.response.json deleted file mode 100644 index aadebbed2..000000000 --- a/examples/query_rule/get_rules.response.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "id": 1, - "service_uuid": "822dc214-3e62-4bae-8411-7e1261e2c328", - "attribute": "ServiceName", - "pattern": "user.*8", - "description": "test", - "rule_type": "white" - } -] \ No newline at end of file diff --git a/examples/query_rule/get_rules.sh b/examples/query_rule/get_rules.sh deleted file mode 100644 index ea1befa75..000000000 --- a/examples/query_rule/get_rules.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -curl -X GET -H "Content-Type: application/json" "http://10.162.197.95:30200/service_center/v2/rules" \ No newline at end of file diff --git a/examples/watch/dead.json b/examples/watch/dead.json deleted file mode 100644 index 628c615df..000000000 --- a/examples/watch/dead.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "action": "dead", - "instance": { - "hostName": "lfgy11", - "serviceUuid": "01838e00-d022-4b0f-b495-67f5a16d8182", - "port": {}, - "securePort": {}, - "dataCenterInfo": { - "metadata": { - "ami-launch-index": "", - "local-hostname": "", - "availability-zone": "", - "instance-id": "", - "public-ipv4": "", - "public-hostname": "", - "ami-manifest-path": "", - "local-ipv4": "", - "hostname": "", - "ami-id": "", - "instance-type": "" - } - }, - "leaseInfo": {}, - "metadata": {} - } -} \ No newline at end of file diff --git a/examples/watch/deregistered.json b/examples/watch/deregistered.json deleted file mode 100644 index 708eb21d1..000000000 --- a/examples/watch/deregistered.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "action": "deregisterd", - "instance": { - "hostName": "lfgy11", - "serviceUuid": "0b2b537b-a23c-4166-8322-15aabb707e40", - "port": {}, - "securePort": {}, - "dataCenterInfo": { - "metadata": {} - }, - "leaseInfo": {}, - "metadata": {} - } -} \ No newline at end of file diff --git a/examples/watch/message b/examples/watch/message deleted file mode 100644 index 9ae6f2e93..000000000 --- a/examples/watch/message +++ /dev/null @@ -1,3 +0,0 @@ -onload -connected to ws://127.0.0.1:9980/watcher/v2/mservices/0b2b537b-a23c-4166-8322-15aabb707e40 -message received: watching \ No newline at end of file diff --git a/examples/watch/registered.json b/examples/watch/registered.json deleted file mode 100644 index 8cdaf749f..000000000 --- a/examples/watch/registered.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "action": "registerd", - "instance": { - "hostName": "lfgy11", - "serviceUuid": "0b2b537b-a23c-4166-8322-15aabb707e40", - "ipAddr": "10.130.158.159", - "status": "UP", - "overriddenstatus": "UNKNOWN", - "port": { - "$": 9980, - "@enabled": "true" - }, - "securePort": { - "@enabled": "false" - }, - "healthCheckUrl": "v2/version", - "dataCenterInfo": { - "name": "MyOwn", - "metadata": {} - }, - "leaseInfo": {}, - "metadata": { - "test": "value" - } - } -} \ No newline at end of file diff --git a/examples/watch/update.json b/examples/watch/update.json deleted file mode 100644 index cb3874f87..000000000 --- a/examples/watch/update.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "action": "update", - "instance": { - "hostName": "lfgy11", - "serviceUuid": "0b2b537b-a23c-4166-8322-15aabb707e40", - "port": {}, - "securePort": {}, - "dataCenterInfo": { - "metadata": {} - }, - "leaseInfo": {}, - "metadata": { - "a1": "a2", - "test": "test2" - } - } -} \ No newline at end of file diff --git a/examples/watch/update_status.json b/examples/watch/update_status.json deleted file mode 100644 index 260d69af9..000000000 --- a/examples/watch/update_status.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "action": "update_status", - "instance": { - "hostName": "lfgy11", - "serviceUuid": "0b2b537b-a23c-4166-8322-15aabb707e40", - "status": "DOWN", - "port": {}, - "securePort": {}, - "dataCenterInfo": { - "metadata": {} - }, - "leaseInfo": {}, - "metadata": {} - } -} \ No newline at end of file diff --git a/examples/websocket.js b/examples/websocket.js deleted file mode 100644 index bf7c53345..000000000 --- a/examples/websocket.js +++ /dev/null @@ -1,21 +0,0 @@ -var sock = null; -var wsuri = "ws://10.162.197.95:30200/watcher/v2/mservices"; - -window.onload = function() { - - console.log("onload"); - - sock = new WebSocket(wsuri); - - sock.onopen = function() { - console.log("connected to " + wsuri); - } - - sock.onclose = function(e) { - console.log("connection closed (" + e.code + ")"); - } - - sock.onmessage = function(e) { - console.log("message received: " + e.data); - } -}; \ No newline at end of file diff --git a/pkg/common/cache/cache.go b/pkg/cache/cache.go similarity index 100% rename from pkg/common/cache/cache.go rename to pkg/cache/cache.go diff --git a/pkg/common/common_suite_test.go b/pkg/common/common_suite_test.go deleted file mode 100644 index 3da2fd7d7..000000000 --- a/pkg/common/common_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package common - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestCommon(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Common Suite") -} diff --git a/pkg/common/common_test.go b/pkg/common/common_test.go deleted file mode 100644 index b4bf772ef..000000000 --- a/pkg/common/common_test.go +++ /dev/null @@ -1,25 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package common - -import ( - // . "service-mgr/common" - - . "github.com/onsi/ginkgo" - // . "github.com/onsi/gomega" -) - -var _ = Describe("Common", func() { - -}) diff --git a/util/errors/error.go b/pkg/errors/error.go similarity index 100% rename from util/errors/error.go rename to pkg/errors/error.go diff --git a/pkg/etcdsync/mutex.go b/pkg/etcdsync/mutex.go index d662f00c1..d9950ae95 100644 --- a/pkg/etcdsync/mutex.go +++ b/pkg/etcdsync/mutex.go @@ -15,8 +15,8 @@ package etcdsync import ( "fmt" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/client" "golang.org/x/net/context" "io" diff --git a/pkg/gonc/gonc.go b/pkg/gonc/gonc.go deleted file mode 100644 index 1a26b85b7..000000000 --- a/pkg/gonc/gonc.go +++ /dev/null @@ -1,78 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package main - -import ( - "flag" - "fmt" - "net" - "os" - "strconv" - "strings" - "time" -) - -const DEFAULT_TCP_CONNCET_TIMEOUT = 3 - -func tcpConnect(ip string, port int16, timeout int, verbose bool) error { - address := fmt.Sprintf("%s:%d", ip, port) - if verbose { - fmt.Printf("Test connection to %s(timeout: %d)...\n", address, timeout) - } - conn, err := net.DialTimeout("tcp", address, time.Duration(timeout)*time.Second) - if err != nil { - fmt.Printf("connect to %s failed, err: %+v\n", address, err) - return err - } - - if verbose { - fmt.Printf("Test connection to %s(timeout: %d) OK.\n", address, timeout) - } - - conn.Close() - return nil -} - -// nc(go version) -// useage: gonc [-v] [-t timeout] ip port -func main() { - flag.Bool("h", false, "print help message") - pVerbose := flag.Bool("v", false, "Make the operation more talkative") - pTimeout := flag.Int("w", DEFAULT_TCP_CONNCET_TIMEOUT, "connect timeout") - - flag.Parse() - - argv := len(os.Args) - if argv == 1 || strings.ToLower(os.Args[1]) == "-h" || strings.ToLower(os.Args[1]) == "--help" { - fmt.Println("gonc [-v] [-t timeout] ip port") - flag.Usage() - os.Exit(0) - } - - timeout := *pTimeout - verbose := *pVerbose - ip := flag.Arg(0) - port, err := strconv.Atoi(flag.Arg(1)) - if err != nil { - fmt.Println("Invalid parameters.", err) - os.Exit(-1) - } - - err = tcpConnect(ip, int16(port), timeout, verbose) - if err != nil { - os.Exit(1) - } - - os.Exit(0) -} diff --git a/util/grace/grace.go b/pkg/grace/grace.go similarity index 98% rename from util/grace/grace.go rename to pkg/grace/grace.go index 01e007c24..a8c1fc2cc 100644 --- a/util/grace/grace.go +++ b/pkg/grace/grace.go @@ -16,7 +16,7 @@ package grace import ( "flag" "fmt" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "os" "os/exec" "os/signal" diff --git a/pkg/lager/core/chug/chug.go b/pkg/lager/core/chug/chug.go index c4d26aaf0..3eac1f198 100644 --- a/pkg/lager/core/chug/chug.go +++ b/pkg/lager/core/chug/chug.go @@ -23,7 +23,7 @@ import ( "time" "github.com/ServiceComb/service-center/pkg/lager" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" ) type Entry struct { diff --git a/pkg/common/logrotate/logrotate.go b/pkg/logrotate/logrotate.go similarity index 99% rename from pkg/common/logrotate/logrotate.go rename to pkg/logrotate/logrotate.go index e95b6cd72..b0135852c 100644 --- a/pkg/common/logrotate/logrotate.go +++ b/pkg/logrotate/logrotate.go @@ -16,7 +16,7 @@ package traceutils import ( "archive/zip" "fmt" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "io" "os" "path/filepath" diff --git a/pkg/plugins/loader.go b/pkg/plugin/loader.go similarity index 97% rename from pkg/plugins/loader.go rename to pkg/plugin/loader.go index 077d8b4b6..bfb3a11ed 100644 --- a/pkg/plugins/loader.go +++ b/pkg/plugin/loader.go @@ -11,11 +11,11 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package plugins +package plugin import ( "fmt" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" "io/ioutil" "os" diff --git a/util/rest/client.go b/pkg/rest/client.go similarity index 99% rename from util/rest/client.go rename to pkg/rest/client.go index e9f7a53f0..6551f0f27 100644 --- a/util/rest/client.go +++ b/pkg/rest/client.go @@ -18,7 +18,7 @@ import ( "compress/gzip" "encoding/json" "fmt" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" "io" "io/ioutil" diff --git a/util/rest/common.go b/pkg/rest/common.go similarity index 86% rename from util/rest/common.go rename to pkg/rest/common.go index 896667fd9..8f7b71346 100644 --- a/util/rest/common.go +++ b/pkg/rest/common.go @@ -17,9 +17,9 @@ import ( "crypto/tls" "crypto/x509" "encoding/pem" - "github.com/ServiceComb/service-center/pkg/common" - "github.com/ServiceComb/service-center/pkg/security" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/tlsutil" + "github.com/ServiceComb/service-center/pkg/util" + "github.com/ServiceComb/service-center/server/infra/security" "github.com/astaxie/beego" "io/ioutil" "time" @@ -50,7 +50,7 @@ func isValidMethod(method string) bool { func getX509CACertPool() (caCertPool *x509.CertPool, err error) { pool := x509.NewCertPool() - caCertFile := common.GetServerSSLConfig().CACertFile + caCertFile := tlsutil.GetServerSSLConfig().CACertFile caCert, err := ioutil.ReadFile(caCertFile) if err != nil { util.Logger().Errorf(err, "read ca cert file %s failed.", caCertFile) @@ -62,8 +62,8 @@ func getX509CACertPool() (caCertPool *x509.CertPool, err error) { } func loadTLSCertificate() (tlsCert []tls.Certificate, err error) { - certFile, keyFile := common.GetServerSSLConfig().CertFile, common.GetServerSSLConfig().KeyFile - passphase := common.GetServerSSLConfig().KeyPassphase + certFile, keyFile := tlsutil.GetServerSSLConfig().CertFile, tlsutil.GetServerSSLConfig().KeyFile + passphase := tlsutil.GetServerSSLConfig().KeyPassphase plainPassphase, err := security.CipherPlugins[beego.AppConfig.DefaultString("cipher_plugin", "default")]().Decrypt(passphase) if err != nil { util.Logger().Errorf(err, "decrypt ssl passphase(%d) failed.", len(passphase)) @@ -144,10 +144,10 @@ func GetClientTLSConfig(verifyPeer bool, supplyCert bool, verifyCN bool) (tlsCon tlsConfig = &tls.Config{ RootCAs: pool, Certificates: certs, - CipherSuites: common.GetClientSSLConfig().CipherSuites, + CipherSuites: tlsutil.GetClientSSLConfig().CipherSuites, InsecureSkipVerify: !verifyCN, - MinVersion: common.GetClientSSLConfig().MinVersion, - MaxVersion: common.GetClientSSLConfig().MaxVersion, + MinVersion: tlsutil.GetClientSSLConfig().MinVersion, + MaxVersion: tlsutil.GetClientSSLConfig().MaxVersion, } return tlsConfig, nil @@ -174,11 +174,11 @@ func GetServerTLSConfig(verifyPeer bool) (tlsConfig *tls.Config, err error) { tlsConfig = &tls.Config{ ClientCAs: pool, Certificates: certs, - CipherSuites: common.GetServerSSLConfig().CipherSuites, + CipherSuites: tlsutil.GetServerSSLConfig().CipherSuites, PreferServerCipherSuites: true, ClientAuth: clientAuthMode, - MinVersion: common.GetServerSSLConfig().MinVersion, - MaxVersion: common.GetServerSSLConfig().MaxVersion, + MinVersion: tlsutil.GetServerSSLConfig().MinVersion, + MaxVersion: tlsutil.GetServerSSLConfig().MaxVersion, } return tlsConfig, nil diff --git a/util/rest/conn.go b/pkg/rest/conn.go similarity index 100% rename from util/rest/conn.go rename to pkg/rest/conn.go diff --git a/util/rest/listener.go b/pkg/rest/listener.go similarity index 100% rename from util/rest/listener.go rename to pkg/rest/listener.go diff --git a/util/rest/roa.go b/pkg/rest/roa.go similarity index 97% rename from util/rest/roa.go rename to pkg/rest/roa.go index b20c4a129..3e55d4946 100644 --- a/util/rest/roa.go +++ b/pkg/rest/roa.go @@ -14,7 +14,7 @@ package rest import ( - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "reflect" ) diff --git a/util/rest/route.go b/pkg/rest/route.go similarity index 98% rename from util/rest/route.go rename to pkg/rest/route.go index 8853d5dda..e3f9a7222 100644 --- a/util/rest/route.go +++ b/pkg/rest/route.go @@ -16,7 +16,7 @@ package rest import ( "errors" "fmt" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "net/http" "net/url" "strings" diff --git a/util/rest/server.go b/pkg/rest/server.go similarity index 98% rename from util/rest/server.go rename to pkg/rest/server.go index 156944834..7440f04fd 100644 --- a/util/rest/server.go +++ b/pkg/rest/server.go @@ -15,8 +15,8 @@ package rest import ( "crypto/tls" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/grace" + "github.com/ServiceComb/service-center/pkg/grace" + "github.com/ServiceComb/service-center/pkg/util" "net" "net/http" "os" diff --git a/pkg/common/ssl.go b/pkg/tlsutil/tlsutil.go similarity index 97% rename from pkg/common/ssl.go rename to pkg/tlsutil/tlsutil.go index c9f138f45..a8e17464b 100644 --- a/pkg/common/ssl.go +++ b/pkg/tlsutil/tlsutil.go @@ -11,11 +11,11 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package common +package tlsutil import ( "crypto/tls" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" "io/ioutil" "os" @@ -112,7 +112,7 @@ func parseSSLProtocol(sprotocol string) uint16 { return result } -func loadServerSSLConfig() { +func LoadServerSSLConfig() { util.Logger().Debugf("load server ssl configurations.") sslServerConfig.SSLEnabled = beego.AppConfig.DefaultInt("ssl_mode", 1) != 0 sslServerConfig.VerifyClient = beego.AppConfig.DefaultInt("ssl_verify_client", 1) != 0 @@ -136,7 +136,7 @@ func loadServerSSLConfig() { len(sslServerConfig.KeyPassphase)) } -func loadClientSSLConfig() { +func LoadClientSSLConfig() { util.Logger().Debugf("load client ssl configurations.") sslClientConfig.SSLEnabled = sslServerConfig.SSLEnabled sslClientConfig.VerifyClient = sslServerConfig.VerifyClient diff --git a/util/goroutines.go b/pkg/util/goroutines.go similarity index 100% rename from util/goroutines.go rename to pkg/util/goroutines.go diff --git a/util/goroutines_test.go b/pkg/util/goroutines_test.go similarity index 100% rename from util/goroutines_test.go rename to pkg/util/goroutines_test.go diff --git a/util/log.go b/pkg/util/log.go similarity index 100% rename from util/log.go rename to pkg/util/log.go diff --git a/util/log_test.go b/pkg/util/log_test.go similarity index 100% rename from util/log_test.go rename to pkg/util/log_test.go diff --git a/util/sys.go b/pkg/util/sys.go similarity index 100% rename from util/sys.go rename to pkg/util/sys.go diff --git a/util/uniqueue.go b/pkg/util/uniqueue.go similarity index 100% rename from util/uniqueue.go rename to pkg/util/uniqueue.go diff --git a/util/uniqueue_test.go b/pkg/util/uniqueue_test.go similarity index 100% rename from util/uniqueue_test.go rename to pkg/util/uniqueue_test.go diff --git a/util/common.go b/pkg/util/util.go similarity index 100% rename from util/common.go rename to pkg/util/util.go diff --git a/util/uuid/uuid.go b/pkg/uuid/uuid.go similarity index 100% rename from util/uuid/uuid.go rename to pkg/uuid/uuid.go diff --git a/util/validate/map.go b/pkg/validate/map.go similarity index 100% rename from util/validate/map.go rename to pkg/validate/map.go diff --git a/util/validate/reflect.go b/pkg/validate/reflect.go similarity index 100% rename from util/validate/reflect.go rename to pkg/validate/reflect.go diff --git a/util/validate/url.go b/pkg/validate/url.go similarity index 100% rename from util/validate/url.go rename to pkg/validate/url.go diff --git a/util/validate/validate.go b/pkg/validate/validate.go similarity index 100% rename from util/validate/validate.go rename to pkg/validate/validate.go diff --git a/server/api.go b/server/api.go index 53b0faf3a..9320edc0b 100644 --- a/server/api.go +++ b/server/api.go @@ -15,14 +15,14 @@ package server import ( "fmt" + "github.com/ServiceComb/service-center/pkg/grace" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" rs "github.com/ServiceComb/service-center/server/rest" "github.com/ServiceComb/service-center/server/rpc" "github.com/ServiceComb/service-center/server/service" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/grace" - "github.com/ServiceComb/service-center/util/rest" "golang.org/x/net/context" "time" ) diff --git a/server/bootstrap/bootstrap.go b/server/bootstrap/bootstrap.go index f0243fc20..05cac656c 100644 --- a/server/bootstrap/bootstrap.go +++ b/server/bootstrap/bootstrap.go @@ -13,22 +13,21 @@ //limitations under the License. package bootstrap -import _ "github.com/ServiceComb/service-center/pkg/security" -import _ "github.com/ServiceComb/service-center/pkg/common/logrotate" -import _ "github.com/ServiceComb/service-center/pkg/security/plugins/plain" -import _ "github.com/ServiceComb/service-center/server/core/registry/embededetcd" +import _ "github.com/ServiceComb/service-center/server/core" // initialize import _ "github.com/ServiceComb/service-center/server/core/registry/etcd" -import _ "github.com/ServiceComb/service-center/server/plugins/infra/quota/buildin" -import _ "github.com/ServiceComb/service-center/server/plugins/infra/quota/unlimit" +import _ "github.com/ServiceComb/service-center/server/core/registry/embededetcd" +import _ "github.com/ServiceComb/service-center/server/plugin/infra/quota/buildin" +import _ "github.com/ServiceComb/service-center/server/plugin/infra/quota/unlimit" +import _ "github.com/ServiceComb/service-center/server/plugin/infra/security/plain" import ( + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/interceptor" "github.com/ServiceComb/service-center/server/interceptor/access" "github.com/ServiceComb/service-center/server/interceptor/cors" "github.com/ServiceComb/service-center/server/interceptor/domain" "github.com/ServiceComb/service-center/server/interceptor/maxbody" "github.com/ServiceComb/service-center/server/interceptor/ratelimiter" - "github.com/ServiceComb/service-center/util" ) func init() { diff --git a/server/common/common_key.go b/server/common/common_key.go deleted file mode 100644 index 07f828785..000000000 --- a/server/common/common_key.go +++ /dev/null @@ -1,20 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package common - -const ( - RULE_NUM_MAX_FOR_ONESERVICE = 100 - SCHEMA_NUM_MAX_FOR_ONESERVICE = 1000 - TAG_MAX_NUM_FOR_ONESERVICE = 100 -) diff --git a/server/helper/header.go b/server/common/header.go similarity index 96% rename from server/helper/header.go rename to server/common/header.go index 1ae6e1b02..2513577c1 100644 --- a/server/helper/header.go +++ b/server/common/header.go @@ -11,13 +11,13 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package helper +package common import ( "errors" "fmt" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" - "github.com/ServiceComb/service-center/util" "net/http" "strings" ) diff --git a/pkg/common/common.go b/server/core/0_init.go similarity index 85% rename from pkg/common/common.go rename to server/core/0_init.go index a68b1ce96..8ba07a286 100644 --- a/pkg/common/common.go +++ b/server/core/0_init.go @@ -1,11 +1,12 @@ -package common +package core import ( "flag" - "github.com/ServiceComb/service-center/pkg/common/logrotate" + "github.com/ServiceComb/service-center/pkg/grace" "github.com/ServiceComb/service-center/pkg/lager" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/grace" + "github.com/ServiceComb/service-center/pkg/logrotate" + "github.com/ServiceComb/service-center/pkg/tlsutil" + "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" "os" "path/filepath" @@ -13,10 +14,14 @@ import ( ) func init() { + Initialize() +} + +func Initialize() { initCommandLine() initLogger() - loadServerSSLConfig() - loadClientSSLConfig() + tlsutil.LoadServerSSLConfig() + tlsutil.LoadClientSSLConfig() initLogRotate() grace.Init() } diff --git a/server/core/common.go b/server/core/common.go index 6624e264b..0c3f095ce 100644 --- a/server/core/common.go +++ b/server/core/common.go @@ -15,10 +15,9 @@ package core import ( "errors" - const_key "github.com/ServiceComb/service-center/server/common" + "github.com/ServiceComb/service-center/pkg/util" + "github.com/ServiceComb/service-center/pkg/validate" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/validate" "math" "reflect" "regexp" @@ -47,6 +46,9 @@ var ( TagReqValidator validate.Validator FindInstanceReqValidator validate.Validator GetInstanceValidator validate.Validator + + SchemaIdRule *validate.ValidateRule + TagRule *validate.ValidateRule ) func init() { @@ -83,11 +85,11 @@ func init() { ServiceIdRule := &validate.ValidateRule{Min: 1, Length: 64, Regexp: serviceIdRegex} InstanceStatusRule := &validate.ValidateRule{Regexp: instStatusRegex} - SchemaIdRule := &validate.ValidateRule{Length: const_key.SCHEMA_NUM_MAX_FOR_ONESERVICE, Regexp: schemaIdRegex} + SchemaIdRule = &validate.ValidateRule{Regexp: schemaIdRegex} stageRule := &validate.ValidateRule{Regexp: stageRegex} nameRule := &validate.ValidateRule{Min: 1, Max: 128, Regexp: nameRegex} versionFuzzyRule := &validate.ValidateRule{Min: 1, Max: 128, Regexp: versionFuzzyRegex} - tagRule := &validate.ValidateRule{Regexp: tagRegex} + TagRule = &validate.ValidateRule{Regexp: tagRegex} MicroServiceKeyValidator.AddRule("AppId", &validate.ValidateRule{Min: 1, Max: 160, Regexp: nameRegex}) MicroServiceKeyValidator.AddRule("ServiceName", nameRule) @@ -127,7 +129,7 @@ func init() { MSDependencyValidator.AddSub("Providers", &ProviderMsValidator) TagReqValidator.AddRule("ServiceId", ServiceIdRule) - TagReqValidator.AddRule("Tags", tagRule) + TagReqValidator.AddRule("Tags", TagRule) HealthCheckInfoValidator.AddRule("Mode", &validate.ValidateRule{Regexp: hbModeRegex}) HealthCheckInfoValidator.AddRule("Port", &validate.ValidateRule{Max: math.MaxInt16, Regexp: numberAllowEmptyRegex}) @@ -157,13 +159,13 @@ func init() { FindInstanceReqValidator.AddRule("AppId", MicroServiceKeyValidator.GetRule("AppId")) FindInstanceReqValidator.AddRule("ServiceName", &validate.ValidateRule{Min: 1, Max: 128, Regexp: serviceNameForFindRegex}) FindInstanceReqValidator.AddRule("VersionRule", versionFuzzyRule) - FindInstanceReqValidator.AddRule("Tags", tagRule) + FindInstanceReqValidator.AddRule("Tags", TagRule) FindInstanceReqValidator.AddRule("Env", stageRule) GetInstanceValidator.AddRule("ConsumerServiceId", ServiceIdRule) GetInstanceValidator.AddRule("ProviderServiceId", ServiceIdRule) GetInstanceValidator.AddRule("ProviderInstanceId", &validate.ValidateRule{Min: 1, Max: 64, Regexp: simpleNameAllowEmptyRegex}) - GetInstanceValidator.AddRule("Tags", tagRule) + GetInstanceValidator.AddRule("Tags", TagRule) GetInstanceValidator.AddRule("Env", stageRule) } diff --git a/server/core/key_generator.go b/server/core/key_generator.go index 8c9ed6177..9591c2d02 100644 --- a/server/core/key_generator.go +++ b/server/core/key_generator.go @@ -14,8 +14,8 @@ package core import ( + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" "strings" ) diff --git a/server/core/microservice.go b/server/core/microservice.go index 7fd1c97ae..ae86b7d0f 100644 --- a/server/core/microservice.go +++ b/server/core/microservice.go @@ -14,8 +14,8 @@ package core import ( + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" "github.com/ServiceComb/service-center/version" "golang.org/x/net/context" ) diff --git a/server/core/proto/services.go b/server/core/proto/services.go index d4520232e..d1ba68d4a 100644 --- a/server/core/proto/services.go +++ b/server/core/proto/services.go @@ -15,7 +15,7 @@ package proto import ( "fmt" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "github.com/coreos/etcd/mvcc/mvccpb" "github.com/gorilla/websocket" "golang.org/x/net/context" diff --git a/server/core/registry/embededetcd/embed_etcd_plugin.go b/server/core/registry/embededetcd/embed_etcd_plugin.go index 365e00d06..72d017b20 100644 --- a/server/core/registry/embededetcd/embed_etcd_plugin.go +++ b/server/core/registry/embededetcd/embed_etcd_plugin.go @@ -17,10 +17,10 @@ import ( "crypto/tls" "errors" "fmt" - "github.com/ServiceComb/service-center/pkg/common" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/tlsutil" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" "github.com/astaxie/beego" "github.com/coreos/etcd/embed" "github.com/coreos/etcd/etcdserver/etcdserverpb" @@ -453,9 +453,9 @@ func getEmbedInstance(cfg *registry.Config) registry.Registry { ready: make(chan int), } - if common.GetServerSSLConfig().SSLEnabled { + if tlsutil.GetServerSSLConfig().SSLEnabled { var err error - embedTLSConfig, err = rest.GetServerTLSConfig(common.GetServerSSLConfig().VerifyClient) + embedTLSConfig, err = rest.GetServerTLSConfig(tlsutil.GetServerSSLConfig().VerifyClient) if err != nil { util.Logger().Error("get service center tls config failed", err) inst.err <- err diff --git a/server/core/registry/etcd/remote_etcd_plugin.go b/server/core/registry/etcd/remote_etcd_plugin.go index 4b00c180c..f063c2fd3 100644 --- a/server/core/registry/etcd/remote_etcd_plugin.go +++ b/server/core/registry/etcd/remote_etcd_plugin.go @@ -17,10 +17,10 @@ import ( "crypto/tls" "errors" "fmt" - "github.com/ServiceComb/service-center/pkg/common" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/tlsutil" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" "github.com/astaxie/beego" "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/mvcc/mvccpb" @@ -514,10 +514,10 @@ func NewRegistry(cfg *registry.Config) registry.Registry { } addrs := strings.Split(cfg.ClusterAddresses, ",") - if common.GetClientSSLConfig().SSLEnabled && strings.Index(cfg.ClusterAddresses, "https://") >= 0 { + if tlsutil.GetClientSSLConfig().SSLEnabled && strings.Index(cfg.ClusterAddresses, "https://") >= 0 { var err error // go client tls限制,提供身份证书、不认证服务端、不校验CN - clientTLSConfig, err = rest.GetClientTLSConfig(common.GetClientSSLConfig().VerifyClient, true, false) + clientTLSConfig, err = rest.GetClientTLSConfig(tlsutil.GetClientSSLConfig().VerifyClient, true, false) if err != nil { util.Logger().Error("get etcd client tls config failed", err) inst.err <- err diff --git a/server/core/registry/registry.go b/server/core/registry/registry.go index 1ff74ec5e..edfb7b4d4 100644 --- a/server/core/registry/registry.go +++ b/server/core/registry/registry.go @@ -16,7 +16,7 @@ package registry import ( "encoding/json" "fmt" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" diff --git a/server/core/registry/store/async_task.go b/server/core/registry/store/async_task.go index cc1c3d62d..df73a92c1 100644 --- a/server/core/registry/store/async_task.go +++ b/server/core/registry/store/async_task.go @@ -15,7 +15,7 @@ package store import ( "errors" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "golang.org/x/net/context" "sync" "time" diff --git a/server/core/registry/store/async_task_test.go b/server/core/registry/store/async_task_test.go index 5f14a617a..7b61e907f 100644 --- a/server/core/registry/store/async_task_test.go +++ b/server/core/registry/store/async_task_test.go @@ -19,7 +19,7 @@ import ( "errors" "fmt" "github.com/ServiceComb/service-center/pkg/lager" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "golang.org/x/net/context" "time" ) diff --git a/server/core/registry/store/cacher.go b/server/core/registry/store/cacher.go index 8bc02faaf..0df71777d 100644 --- a/server/core/registry/store/cacher.go +++ b/server/core/registry/store/cacher.go @@ -14,9 +14,9 @@ package store import ( + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" "sync" diff --git a/server/core/registry/store/defer.go b/server/core/registry/store/defer.go index 0d7b6359b..134b4011b 100644 --- a/server/core/registry/store/defer.go +++ b/server/core/registry/store/defer.go @@ -15,8 +15,8 @@ package store import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/mvcc/mvccpb" "sync" "time" diff --git a/server/core/registry/store/indexer.go b/server/core/registry/store/indexer.go index 570bfab85..26a7b377e 100644 --- a/server/core/registry/store/indexer.go +++ b/server/core/registry/store/indexer.go @@ -14,9 +14,9 @@ package store import ( + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" "strings" diff --git a/server/core/registry/store/listwatch.go b/server/core/registry/store/listwatch.go index 0b9720981..0721facdf 100644 --- a/server/core/registry/store/listwatch.go +++ b/server/core/registry/store/listwatch.go @@ -15,9 +15,9 @@ package store import ( "fmt" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" "sync" diff --git a/server/core/registry/store/store.go b/server/core/registry/store/store.go index b54fa5c6c..246aaf1eb 100644 --- a/server/core/registry/store/store.go +++ b/server/core/registry/store/store.go @@ -14,10 +14,10 @@ package store import ( + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" "strconv" "sync" diff --git a/server/core/system.go b/server/core/system.go index e53366b4b..8a1ac11bb 100644 --- a/server/core/system.go +++ b/server/core/system.go @@ -15,9 +15,9 @@ package core import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" - "github.com/ServiceComb/service-center/util" "github.com/ServiceComb/service-center/version" "golang.org/x/net/context" ) diff --git a/pkg/security/cipher.go b/server/infra/security/cipher.go similarity index 100% rename from pkg/security/cipher.go rename to server/infra/security/cipher.go diff --git a/server/interceptor/access/access.go b/server/interceptor/access/access.go index 1b08d0348..0edd4c3b1 100644 --- a/server/interceptor/access/access.go +++ b/server/interceptor/access/access.go @@ -15,10 +15,10 @@ package access import ( "fmt" + "github.com/ServiceComb/service-center/pkg/util" + "github.com/ServiceComb/service-center/pkg/validate" + "github.com/ServiceComb/service-center/server/common" "github.com/ServiceComb/service-center/server/core" - "github.com/ServiceComb/service-center/server/helper" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/validate" "net/http" ) @@ -32,7 +32,7 @@ func addCommonResponseHeaders(w http.ResponseWriter) { } func Intercept(w http.ResponseWriter, r *http.Request) error { - helper.InitContext(r) + common.InitContext(r) addCommonResponseHeaders(w) diff --git a/server/interceptor/cors/cors.go b/server/interceptor/cors/cors.go index 0b184e5c1..a5661fa66 100644 --- a/server/interceptor/cors/cors.go +++ b/server/interceptor/cors/cors.go @@ -15,7 +15,7 @@ package cors import ( "errors" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "io" "net/http" "strconv" diff --git a/server/interceptor/domain/domain.go b/server/interceptor/domain/domain.go index 721fa0605..1a935b602 100644 --- a/server/interceptor/domain/domain.go +++ b/server/interceptor/domain/domain.go @@ -15,8 +15,8 @@ package domain import ( "errors" - "github.com/ServiceComb/service-center/server/helper" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" + "github.com/ServiceComb/service-center/server/common" "net/http" ) @@ -32,7 +32,7 @@ func Intercept(w http.ResponseWriter, r *http.Request) error { project := "" var err error ctx := r.Context() - tenant, project, err = helper.GetTenantProjectFromHeader(r) + tenant, project, err = common.GetTenantProjectFromHeader(r) if err != nil { w.WriteHeader(http.StatusBadRequest) w.Write(util.StringToBytesWithNoCopy(err.Error())) diff --git a/server/interceptor/interceptors.go b/server/interceptor/interceptors.go index 5ad524006..6c5d3c96e 100644 --- a/server/interceptor/interceptors.go +++ b/server/interceptor/interceptors.go @@ -14,7 +14,7 @@ package interceptor import ( - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "net/http" "reflect" "runtime" diff --git a/server/interceptor/ratelimiter/limiter.go b/server/interceptor/ratelimiter/limiter.go index 6d75c99e3..787371d7c 100644 --- a/server/interceptor/ratelimiter/limiter.go +++ b/server/interceptor/ratelimiter/limiter.go @@ -15,7 +15,7 @@ package ratelimiter import ( "errors" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" "github.com/didip/tollbooth" "github.com/didip/tollbooth/config" diff --git a/server/core/mux/mux.go b/server/mux/mux.go similarity index 100% rename from server/core/mux/mux.go rename to server/mux/mux.go diff --git a/server/plugins/dynamic/uuid.go b/server/plugin/dynamic/uuid.go similarity index 63% rename from server/plugins/dynamic/uuid.go rename to server/plugin/dynamic/uuid.go index b2926170a..42d2e58f7 100644 --- a/server/plugins/dynamic/uuid.go +++ b/server/plugin/dynamic/uuid.go @@ -1,25 +1,25 @@ package dynamic import ( - "github.com/ServiceComb/service-center/pkg/plugins" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/uuid" + "github.com/ServiceComb/service-center/pkg/plugin" + "github.com/ServiceComb/service-center/pkg/util" + "github.com/ServiceComb/service-center/pkg/uuid" "strings" ) -func buildinUnidFunc() string { +func buildinUuidFunc() string { return strings.Replace(uuid.NewV1().String(), string(uuid.DASH), "", -1) } func findUuidFunc(funcName string) func() string { - ff, err := plugins.FindFunc("uuid", funcName) + ff, err := plugin.FindFunc("uuid", funcName) if err != nil { - return buildinUnidFunc + return buildinUuidFunc } f, ok := ff.(func() string) if !ok { util.Logger().Warnf(nil, "unexpected function '%s' format found in plugin 'uuid'.", funcName) - return buildinUnidFunc + return buildinUuidFunc } return f } @@ -35,5 +35,5 @@ func GetInstanceId() string { } func GenerateUuid() string { - return buildinUnidFunc() + return buildinUuidFunc() } diff --git a/server/plugins/infra/quota/buildin/quota.go b/server/plugin/infra/quota/buildin/quota.go similarity index 84% rename from server/plugins/infra/quota/buildin/quota.go rename to server/plugin/infra/quota/buildin/quota.go index 49d255d3e..b9881a55a 100644 --- a/server/plugins/infra/quota/buildin/quota.go +++ b/server/plugin/infra/quota/buildin/quota.go @@ -15,12 +15,11 @@ package buildin import ( "fmt" - constKey "github.com/ServiceComb/service-center/server/common" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" "github.com/ServiceComb/service-center/server/infra/quota" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) @@ -31,12 +30,17 @@ func New() quota.QuotaManager { return &BuildInQuota{} } func init() { + core.SchemaIdRule.Length = SCHEMA_NUM_MAX_FOR_ONESERVICE + core.TagRule.Length = TAG_MAX_NUM_FOR_ONESERVICE quota.QuotaPlugins["buildin"] = New } const ( - SERVICE_MAX_NUMBER = 12000 - INSTANCE_MAX_NUMBER = 150000 + SERVICE_MAX_NUMBER = 12000 + INSTANCE_MAX_NUMBER = 150000 + RULE_NUM_MAX_FOR_ONESERVICE = 100 + SCHEMA_NUM_MAX_FOR_ONESERVICE = 1000 + TAG_MAX_NUM_FOR_ONESERVICE = 100 ) //申请配额sourceType serviceinstance servicetype @@ -83,16 +87,18 @@ func ResourceLimitHandler(ctx context.Context, quotaType quota.ResourceType, ten switch quotaType { case quota.RULEQuotaType: key = core.GenerateServiceRuleKey(tenant, serviceId, "") - max = constKey.RULE_NUM_MAX_FOR_ONESERVICE + max = RULE_NUM_MAX_FOR_ONESERVICE indexer = store.Store().Rule() case quota.SCHEMAQuotaType: key = core.GenerateServiceSchemaKey(tenant, serviceId, "") - max = constKey.SCHEMA_NUM_MAX_FOR_ONESERVICE + max = SCHEMA_NUM_MAX_FOR_ONESERVICE indexer = store.Store().Schema() case quota.TAGQuotaType: num := quotaSize - if num > constKey.TAG_MAX_NUM_FOR_ONESERVICE { - util.Logger().Errorf(nil, "fail to add tag for one service max tag num is %d, %s", constKey.TAG_MAX_NUM_FOR_ONESERVICE, serviceId) + if num > TAG_MAX_NUM_FOR_ONESERVICE { + util.Logger().Errorf(nil, + "fail to add tag for one service max tag num is %d, %s", + TAG_MAX_NUM_FOR_ONESERVICE, serviceId) return nil, false, nil } return nil, true, nil diff --git a/server/plugins/infra/quota/unlimit/unlimit.go b/server/plugin/infra/quota/unlimit/unlimit.go similarity index 100% rename from server/plugins/infra/quota/unlimit/unlimit.go rename to server/plugin/infra/quota/unlimit/unlimit.go index 20170a80d..476db1e81 100644 --- a/server/plugins/infra/quota/unlimit/unlimit.go +++ b/server/plugin/infra/quota/unlimit/unlimit.go @@ -14,10 +14,10 @@ package unlimit import ( + apt "github.com/ServiceComb/service-center/server/core" "github.com/ServiceComb/service-center/server/infra/quota" - "golang.org/x/net/context" "github.com/astaxie/beego" - apt "github.com/ServiceComb/service-center/server/core" + "golang.org/x/net/context" ) type Unlimit struct { diff --git a/pkg/security/plugins/plain/default.go b/server/plugin/infra/security/plain/default.go similarity index 93% rename from pkg/security/plugins/plain/default.go rename to server/plugin/infra/security/plain/default.go index 2a34f656b..2b178b28e 100644 --- a/pkg/security/plugins/plain/default.go +++ b/server/plugin/infra/security/plain/default.go @@ -14,7 +14,7 @@ package plain import ( - "github.com/ServiceComb/service-center/pkg/security" + "github.com/ServiceComb/service-center/server/infra/security" ) type DefaultCipher struct { diff --git a/server/rest/rest_util.go b/server/rest/controller/rest_util.go similarity index 97% rename from server/rest/rest_util.go rename to server/rest/controller/rest_util.go index 6c8401cfe..51e0c46a6 100644 --- a/server/rest/rest_util.go +++ b/server/rest/controller/rest_util.go @@ -11,13 +11,13 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package controller import ( "encoding/json" "fmt" + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" "net/http" "strconv" ) diff --git a/server/rest/governservice_controller.go b/server/rest/controller/v3/governservice_controller.go similarity index 88% rename from server/rest/governservice_controller.go rename to server/rest/controller/v3/governservice_controller.go index a91338d21..6950ed587 100644 --- a/server/rest/governservice_controller.go +++ b/server/rest/controller/v3/governservice_controller.go @@ -11,16 +11,17 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package v3 import ( "net/http" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" + "github.com/ServiceComb/service-center/pkg/rest" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/server/rest/controller" "strings" ) @@ -65,7 +66,7 @@ func (governService *GovernService) GetGraph(w http.ResponseWriter, r *http.Requ ctx := r.Context() resp, err := core.ServiceAPI.GetServices(ctx, request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } services := resp.GetServices() @@ -85,7 +86,7 @@ func (governService *GovernService) GetGraph(w http.ResponseWriter, r *http.Requ proResp, err := core.ServiceAPI.GetConsumerDependencies(ctx, proRequest) if err != nil { util.Logger().Error("get Dependency failed.", err) - WriteText(http.StatusInternalServerError, "get Dependency failed", w) + controller.WriteText(http.StatusInternalServerError, "get Dependency failed", w) return } @@ -110,7 +111,7 @@ func (governService *GovernService) GetGraph(w http.ResponseWriter, r *http.Requ } } graph.Nodes = nodes - WriteJsonObject(http.StatusOK, graph, w) + controller.WriteJsonObject(http.StatusOK, graph, w) } // GovernService 治理相关接口服务 @@ -138,7 +139,7 @@ func (governService *GovernService) GetServiceDetail(w http.ResponseWriter, r *h respInternal := resp.Response resp.Response = nil - WriteJsonResponse(respInternal, resp, err, w) + controller.WriteJsonResponse(respInternal, resp, err, w) } func (governService *GovernService) GetAllServicesInfo(w http.ResponseWriter, r *http.Request) { @@ -150,5 +151,5 @@ func (governService *GovernService) GetAllServicesInfo(w http.ResponseWriter, r respInternal := resp.Response resp.Response = nil - WriteJsonResponse(respInternal, resp, err, w) + controller.WriteJsonResponse(respInternal, resp, err, w) } diff --git a/server/rest/instance_controller.go b/server/rest/controller/v3/instance_controller.go similarity index 78% rename from server/rest/instance_controller.go rename to server/rest/controller/v3/instance_controller.go index bc2ed9006..d78252fdc 100644 --- a/server/rest/instance_controller.go +++ b/server/rest/controller/v3/instance_controller.go @@ -11,14 +11,15 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package v3 import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/server/rest/controller" "io/ioutil" "net/http" "strings" @@ -45,7 +46,7 @@ func (this *MicroServiceInstanceService) RegisterInstance(w http.ResponseWriter, message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("register instance failed, body err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } @@ -53,7 +54,7 @@ func (this *MicroServiceInstanceService) RegisterInstance(w http.ResponseWriter, err = json.Unmarshal(message, request) if err != nil { util.Logger().Error("register instance failed, Unmarshal error", err) - WriteText(http.StatusInternalServerError, "Unmarshal error", w) + controller.WriteText(http.StatusInternalServerError, "Unmarshal error", w) return } if request.GetInstance() != nil { @@ -63,7 +64,7 @@ func (this *MicroServiceInstanceService) RegisterInstance(w http.ResponseWriter, resp, err := core.InstanceAPI.Register(r.Context(), request) respInternal := resp.Response resp.Response = nil - WriteJsonResponse(respInternal, resp, err, w) + controller.WriteJsonResponse(respInternal, resp, err, w) } //TODO 什么样的服务允许更新服务心跳,只能是本服务才可以更新自己,如何屏蔽其他服务伪造的心跳更新? @@ -73,14 +74,14 @@ func (this *MicroServiceInstanceService) Heartbeat(w http.ResponseWriter, r *htt InstanceId: r.URL.Query().Get(":instanceId"), } resp, err := core.InstanceAPI.Heartbeat(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceInstanceService) HeartbeatSet(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("register instance failed, body err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } @@ -88,26 +89,26 @@ func (this *MicroServiceInstanceService) HeartbeatSet(w http.ResponseWriter, r * err = json.Unmarshal(message, request) if err != nil { util.Logger().Error("register instance failed, Unmarshal error", err) - WriteText(http.StatusInternalServerError, "Unmarshal error", w) + controller.WriteText(http.StatusInternalServerError, "Unmarshal error", w) return } resp, _ := core.InstanceAPI.HeartbeatSet(r.Context(), request) if resp.Response.Code == pb.Response_SUCCESS { - WriteText(http.StatusOK, "", w) + controller.WriteText(http.StatusOK, "", w) return } if resp.Instances == nil || len(resp.Instances) == 0 { - WriteText(http.StatusBadRequest, resp.Response.Message, w) + controller.WriteText(http.StatusBadRequest, resp.Response.Message, w) return } resp.Response = nil objJson, err := json.Marshal(resp) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } - WriteJson(http.StatusBadRequest, objJson, w) + controller.WriteJson(http.StatusBadRequest, objJson, w) return } @@ -117,7 +118,7 @@ func (this *MicroServiceInstanceService) UnregisterInstance(w http.ResponseWrite InstanceId: r.URL.Query().Get(":instanceId"), } resp, err := core.InstanceAPI.Unregister(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceInstanceService) FindInstances(w http.ResponseWriter, r *http.Request) { @@ -128,7 +129,7 @@ func (this *MicroServiceInstanceService) FindInstances(w http.ResponseWriter, r } noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.FindInstancesRequest{ @@ -142,15 +143,15 @@ func (this *MicroServiceInstanceService) FindInstances(w http.ResponseWriter, r } resp, err := core.InstanceAPI.Find(r.Context(), request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } if resp.GetResponse().Code != pb.Response_SUCCESS { - WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) + controller.WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceInstanceService) GetOneInstance(w http.ResponseWriter, r *http.Request) { @@ -161,7 +162,7 @@ func (this *MicroServiceInstanceService) GetOneInstance(w http.ResponseWriter, r } noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetOneInstanceRequest{ @@ -174,15 +175,15 @@ func (this *MicroServiceInstanceService) GetOneInstance(w http.ResponseWriter, r } resp, err := core.InstanceAPI.GetOneInstance(r.Context(), request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } if resp.GetResponse().Code != pb.Response_SUCCESS { - WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) + controller.WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceInstanceService) GetInstances(w http.ResponseWriter, r *http.Request) { @@ -193,7 +194,7 @@ func (this *MicroServiceInstanceService) GetInstances(w http.ResponseWriter, r * } noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetInstancesRequest{ @@ -205,15 +206,15 @@ func (this *MicroServiceInstanceService) GetInstances(w http.ResponseWriter, r * } resp, err := core.InstanceAPI.GetInstances(r.Context(), request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } if resp.GetResponse().Code != pb.Response_SUCCESS { - WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) + controller.WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceInstanceService) UpdateStatus(w http.ResponseWriter, r *http.Request) { @@ -224,14 +225,14 @@ func (this *MicroServiceInstanceService) UpdateStatus(w http.ResponseWriter, r * Status: status, } resp, err := core.InstanceAPI.UpdateStatus(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceInstanceService) UpdateMetadata(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } request := &pb.UpdateInstancePropsRequest{ @@ -241,9 +242,9 @@ func (this *MicroServiceInstanceService) UpdateMetadata(w http.ResponseWriter, r err = json.Unmarshal(message, request) if err != nil { util.Logger().Error("Unmarshal error", err) - WriteText(http.StatusInternalServerError, "Unmarshal error", w) + controller.WriteText(http.StatusInternalServerError, "Unmarshal error", w) return } resp, err := core.InstanceAPI.UpdateInstanceProperties(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } diff --git a/server/rest/instance_watcher.go b/server/rest/controller/v3/instance_watcher.go similarity index 89% rename from server/rest/instance_watcher.go rename to server/rest/controller/v3/instance_watcher.go index 46ae70f69..d61121390 100644 --- a/server/rest/instance_watcher.go +++ b/server/rest/controller/v3/instance_watcher.go @@ -11,13 +11,14 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package v3 import ( + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/server/rest/controller" "github.com/gorilla/websocket" "net/http" ) @@ -45,7 +46,7 @@ func upgrade(w http.ResponseWriter, r *http.Request) (*websocket.Conn, error) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { util.Logger().Error("upgrade failed.", err) - WriteText(http.StatusInternalServerError, "Upgrade error", w) + controller.WriteText(http.StatusInternalServerError, "Upgrade error", w) } return conn, err } diff --git a/server/rest/main_controller.go b/server/rest/controller/v3/main_controller.go similarity index 83% rename from server/rest/main_controller.go rename to server/rest/controller/v3/main_controller.go index 0595d465d..27237dafc 100644 --- a/server/rest/main_controller.go +++ b/server/rest/controller/v3/main_controller.go @@ -11,13 +11,14 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package v3 import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/server/rest/controller" "github.com/ServiceComb/service-center/version" "net/http" ) @@ -42,13 +43,13 @@ func (this *MainService) ClusterHealth(w http.ResponseWriter, r *http.Request) { resp, err := core.InstanceAPI.ClusterHealth(r.Context()) if err != nil { util.Logger().Error("health check failed", err) - WriteText(http.StatusInternalServerError, "health check failed", w) + controller.WriteText(http.StatusInternalServerError, "health check failed", w) return } respInternal := resp.Response resp.Response = nil - WriteJsonResponse(respInternal, resp, err, w) + controller.WriteJsonResponse(respInternal, resp, err, w) } func (this *MainService) GetVersion(w http.ResponseWriter, r *http.Request) { diff --git a/server/rest/microservice_controller.go b/server/rest/controller/v3/microservice_controller.go similarity index 73% rename from server/rest/microservice_controller.go rename to server/rest/controller/v3/microservice_controller.go index 2b1e378a6..f9c66d631 100644 --- a/server/rest/microservice_controller.go +++ b/server/rest/controller/v3/microservice_controller.go @@ -11,14 +11,15 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package v3 import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/server/rest/controller" "io/ioutil" "net/http" "strings" @@ -50,7 +51,7 @@ func (this *MicroServiceService) URLPatterns() []rest.Route { func (this *MicroServiceService) GetSchemas(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetSchemaRequest{ @@ -61,17 +62,17 @@ func (this *MicroServiceService) GetSchemas(w http.ResponseWriter, r *http.Reque resp, err := core.ServiceAPI.GetSchemaInfo(r.Context(), request) if len(resp.Schema) != 0 { resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) return } - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceService) ModifySchemas(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } request := &pb.ModifySchemaRequest{ @@ -81,11 +82,11 @@ func (this *MicroServiceService) ModifySchemas(w http.ResponseWriter, r *http.Re err = json.Unmarshal(message, request) if err != nil { util.Logger().Error("Unmarshal error", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } resp, err := core.ServiceAPI.ModifySchema(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceService) DeleteSchemas(w http.ResponseWriter, r *http.Request) { @@ -94,41 +95,41 @@ func (this *MicroServiceService) DeleteSchemas(w http.ResponseWriter, r *http.Re SchemaId: r.URL.Query().Get(":schemaId"), } resp, err := core.ServiceAPI.DeleteSchema(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceService) Register(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } var request pb.CreateServiceRequest err = json.Unmarshal(message, &request) if err != nil { util.Logger().Error("Unmarshal error", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } resp, err := core.ServiceAPI.Create(r.Context(), &request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } if resp.GetResponse().Code != pb.Response_SUCCESS { - WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) + controller.WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceService) Update(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } request := &pb.UpdateServicePropsRequest{ @@ -137,11 +138,11 @@ func (this *MicroServiceService) Update(w http.ResponseWriter, r *http.Request) err = json.Unmarshal(message, request) if err != nil { util.Logger().Error("Unmarshal error", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } resp, err := core.ServiceAPI.UpdateProperties(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceService) Unregister(w http.ResponseWriter, r *http.Request) { @@ -149,7 +150,7 @@ func (this *MicroServiceService) Unregister(w http.ResponseWriter, r *http.Reque serviceId := r.URL.Query().Get(":serviceId") util.Logger().Warnf(nil, "Service %s unregists, force is %s.", serviceId, force) if force != "0" && force != "1" && strings.TrimSpace(force) != "" { - WriteText(http.StatusBadRequest, "parameter force must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter force must be 1 or 0", w) return } request := &pb.DeleteServiceRequest{ @@ -157,13 +158,13 @@ func (this *MicroServiceService) Unregister(w http.ResponseWriter, r *http.Reque Force: force == "1", } resp, err := core.ServiceAPI.Delete(r.Context(), request) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *MicroServiceService) GetServices(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetServicesRequest{ @@ -172,21 +173,21 @@ func (this *MicroServiceService) GetServices(w http.ResponseWriter, r *http.Requ util.Logger().Debugf("tenant is %s", util.ParseTenant(r.Context())) resp, err := core.ServiceAPI.GetServices(r.Context(), request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } if resp.GetResponse().Code != pb.Response_SUCCESS { - WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) + controller.WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceService) GetExistence(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetExistenceRequest{ @@ -200,21 +201,21 @@ func (this *MicroServiceService) GetExistence(w http.ResponseWriter, r *http.Req } resp, err := core.ServiceAPI.Exist(r.Context(), request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } if resp.GetResponse().Code != pb.Response_SUCCESS { - WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) + controller.WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceService) GetServiceOne(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetServiceRequest{ @@ -223,29 +224,29 @@ func (this *MicroServiceService) GetServiceOne(w http.ResponseWriter, r *http.Re } resp, err := core.ServiceAPI.GetOne(r.Context(), request) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } if resp.GetResponse().Code != pb.Response_SUCCESS { - WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) + controller.WriteText(http.StatusBadRequest, resp.GetResponse().Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceService) CreateDependenciesForMicroServices(w http.ResponseWriter, r *http.Request) { requestBody, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } request := &pb.CreateDependenciesRequest{} err = json.Unmarshal(requestBody, request) if err != nil { util.Logger().Error("Invalid json", err) - WriteText(http.StatusInternalServerError, "Unmarshal error", w) + controller.WriteText(http.StatusInternalServerError, "Unmarshal error", w) return } //fmt.Println("request is ", request) @@ -254,22 +255,22 @@ func (this *MicroServiceService) CreateDependenciesForMicroServices(w http.Respo //请求错误 if err != nil { util.Logger().Errorf(err, "create dependency failed for service internal reason.") - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } //服务内部错误 if rsp.Response.Code == pb.Response_FAIL { util.Logger().Errorf(nil, "create dependency failed for request invalid. %s", rsp.Response.Message) - WriteText(http.StatusBadRequest, rsp.Response.Message, w) + controller.WriteText(http.StatusBadRequest, rsp.Response.Message, w) return } - WriteText(http.StatusOK, "add dependency success.", w) + controller.WriteText(http.StatusOK, "add dependency success.", w) } func (this *MicroServiceService) GetConProDependencies(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetDependenciesRequest{ @@ -279,23 +280,23 @@ func (this *MicroServiceService) GetConProDependencies(w http.ResponseWriter, r resp, err := core.ServiceAPI.GetConsumerDependencies(r.Context(), request) if err != nil { util.Logger().Error("get Dependency failed.", err) - WriteText(http.StatusInternalServerError, "get Dependency failed", w) + controller.WriteText(http.StatusInternalServerError, "get Dependency failed", w) return } //服务请求错误 if resp.Response.Code == pb.Response_FAIL { util.Logger().Errorf(nil, resp.Response.Message) - WriteText(http.StatusBadRequest, resp.Response.Message, w) + controller.WriteText(http.StatusBadRequest, resp.Response.Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceService) GetProConDependencies(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } request := &pb.GetDependenciesRequest{ @@ -305,24 +306,24 @@ func (this *MicroServiceService) GetProConDependencies(w http.ResponseWriter, r resp, err := core.ServiceAPI.GetProviderDependencies(r.Context(), request) if err != nil { util.Logger().Error("get Dependency failed.", err) - WriteText(http.StatusInternalServerError, "get Dependency failed", w) + controller.WriteText(http.StatusInternalServerError, "get Dependency failed", w) return } //服务请求错误 if resp.Response.Code == pb.Response_FAIL { util.Logger().Errorf(nil, resp.Response.Message) - WriteText(http.StatusBadRequest, resp.Response.Message, w) + controller.WriteText(http.StatusBadRequest, resp.Response.Message, w) return } resp.Response = nil - WriteJsonObject(http.StatusOK, resp, w) + controller.WriteJsonObject(http.StatusOK, resp, w) } func (this *MicroServiceService) UnregisterServices(w http.ResponseWriter, r *http.Request) { request_body, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body ,err", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } @@ -331,26 +332,26 @@ func (this *MicroServiceService) UnregisterServices(w http.ResponseWriter, r *ht err = json.Unmarshal(request_body, request) if err != nil { util.Logger().Error("unmarshal ,err ", err) - WriteText(http.StatusBadRequest, err.Error(), w) + controller.WriteText(http.StatusBadRequest, err.Error(), w) return } resp, err := core.ServiceAPI.DeleteServices(r.Context(), request) if resp.Response.Code == pb.Response_SUCCESS { - WriteText(http.StatusOK, "", w) + controller.WriteText(http.StatusOK, "", w) return } if resp.Services == nil || len(resp.Services) == 0 { - WriteText(http.StatusBadRequest, resp.Response.Message, w) + controller.WriteText(http.StatusBadRequest, resp.Response.Message, w) return } resp.Response = nil objJson, err := json.Marshal(resp) if err != nil { - WriteText(http.StatusInternalServerError, err.Error(), w) + controller.WriteText(http.StatusInternalServerError, err.Error(), w) return } - WriteJson(http.StatusBadRequest, objJson, w) + controller.WriteJson(http.StatusBadRequest, objJson, w) return } diff --git a/server/rest/query_rule_controller.go b/server/rest/controller/v3/query_rule_controller.go similarity index 79% rename from server/rest/query_rule_controller.go rename to server/rest/controller/v3/query_rule_controller.go index 518db68cc..7ca4e5e10 100644 --- a/server/rest/query_rule_controller.go +++ b/server/rest/controller/v3/query_rule_controller.go @@ -11,15 +11,16 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package v3 import ( "encoding/json" "fmt" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/server/rest/controller" "io/ioutil" "net/http" "strings" @@ -41,14 +42,14 @@ func (this *RuleService) AddRule(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("bory err", err) - WriteText(http.StatusInternalServerError, fmt.Sprintf("body error %s", err.Error()), w) + controller.WriteText(http.StatusInternalServerError, fmt.Sprintf("body error %s", err.Error()), w) return } rule := map[string][]*pb.AddOrUpdateServiceRule{} err = json.Unmarshal(message, &rule) if err != nil { util.Logger().Error("Unmarshal error", err) - WriteText(http.StatusBadRequest, "Unmarshal error", w) + controller.WriteText(http.StatusBadRequest, "Unmarshal error", w) return } @@ -58,7 +59,7 @@ func (this *RuleService) AddRule(w http.ResponseWriter, r *http.Request) { }) respInter := resp.Response resp.Response = nil - WriteJsonResponse(respInter, resp, err, w) + controller.WriteJsonResponse(respInter, resp, err, w) } func (this *RuleService) DeleteRule(w http.ResponseWriter, r *http.Request) { @@ -69,14 +70,14 @@ func (this *RuleService) DeleteRule(w http.ResponseWriter, r *http.Request) { ServiceId: r.URL.Query().Get(":serviceId"), RuleIds: ids, }) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *RuleService) UpdateRule(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body err", err) - WriteText(http.StatusBadRequest, "body error", w) + controller.WriteText(http.StatusBadRequest, "body error", w) return } @@ -84,7 +85,7 @@ func (this *RuleService) UpdateRule(w http.ResponseWriter, r *http.Request) { err = json.Unmarshal(message, &rule) if err != nil { util.Logger().Error("Unmarshal error", err) - WriteText(http.StatusBadRequest, "Unmarshal error", w) + controller.WriteText(http.StatusBadRequest, "Unmarshal error", w) return } resp, err := core.ServiceAPI.UpdateRule(r.Context(), &pb.UpdateServiceRuleRequest{ @@ -92,13 +93,13 @@ func (this *RuleService) UpdateRule(w http.ResponseWriter, r *http.Request) { RuleId: r.URL.Query().Get(":rule_id"), Rule: &rule, }) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *RuleService) GetRules(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } // TODO 根据attribute查询 @@ -110,5 +111,5 @@ func (this *RuleService) GetRules(w http.ResponseWriter, r *http.Request) { }) respInternal := resp.Response resp.Response = nil - WriteJsonResponse(respInternal, resp, err, w) + controller.WriteJsonResponse(respInternal, resp, err, w) } diff --git a/server/rest/tag_controller.go b/server/rest/controller/v3/tag_controller.go similarity index 80% rename from server/rest/tag_controller.go rename to server/rest/controller/v3/tag_controller.go index 477e3be85..3c7ada9cf 100644 --- a/server/rest/tag_controller.go +++ b/server/rest/controller/v3/tag_controller.go @@ -11,15 +11,16 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package rest +package v3 import ( "encoding/json" "fmt" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/server/rest/controller" "io/ioutil" "net/http" "strings" @@ -42,14 +43,14 @@ func (this *TagService) AddTags(w http.ResponseWriter, r *http.Request) { message, err := ioutil.ReadAll(r.Body) if err != nil { util.Logger().Error("body err", err) - WriteText(http.StatusInternalServerError, fmt.Sprintf("body error %s", err.Error()), w) + controller.WriteText(http.StatusInternalServerError, fmt.Sprintf("body error %s", err.Error()), w) return } var tags map[string]map[string]string err = json.Unmarshal(message, &tags) if err != nil { util.Logger().Error("Unmarshal error", err) - WriteText(http.StatusBadRequest, "Unmarshal error", w) + controller.WriteText(http.StatusBadRequest, "Unmarshal error", w) return } @@ -57,7 +58,7 @@ func (this *TagService) AddTags(w http.ResponseWriter, r *http.Request) { ServiceId: r.URL.Query().Get(":serviceId"), Tags: tags["tags"], }) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *TagService) UpdateTag(w http.ResponseWriter, r *http.Request) { @@ -66,13 +67,13 @@ func (this *TagService) UpdateTag(w http.ResponseWriter, r *http.Request) { Key: r.URL.Query().Get(":key"), Value: r.URL.Query().Get("value"), }) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } func (this *TagService) GetTags(w http.ResponseWriter, r *http.Request) { noCache := r.URL.Query().Get("noCache") if noCache != "0" && noCache != "1" && strings.TrimSpace(noCache) != "" { - WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) + controller.WriteText(http.StatusBadRequest, "parameter noCache must be 1 or 0", w) return } resp, err := core.ServiceAPI.GetTags(r.Context(), &pb.GetServiceTagsRequest{ @@ -81,7 +82,7 @@ func (this *TagService) GetTags(w http.ResponseWriter, r *http.Request) { }) respInternal := resp.Response resp.Response = nil - WriteJsonResponse(respInternal, resp, err, w) + controller.WriteJsonResponse(respInternal, resp, err, w) } func (this *TagService) DeleteTags(w http.ResponseWriter, r *http.Request) { @@ -92,5 +93,5 @@ func (this *TagService) DeleteTags(w http.ResponseWriter, r *http.Request) { ServiceId: r.URL.Query().Get(":serviceId"), Keys: ids, }) - WriteTextResponse(resp.GetResponse(), err, "", w) + controller.WriteTextResponse(resp.GetResponse(), err, "", w) } diff --git a/server/rest/routers/v3.go b/server/rest/controller/v3/v3.go similarity index 63% rename from server/rest/routers/v3.go rename to server/rest/controller/v3/v3.go index 228e659d1..be6a6400b 100644 --- a/server/rest/routers/v3.go +++ b/server/rest/controller/v3/v3.go @@ -11,24 +11,22 @@ //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. -package routers +package v3 import ( + roa "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/util" "net/http" - - rs "github.com/ServiceComb/service-center/server/rest" - "github.com/ServiceComb/service-center/util" - roa "github.com/ServiceComb/service-center/util/rest" ) func initRouter() { - roa.RegisterServent(&rs.MainService{}) - roa.RegisterServent(&rs.MicroServiceService{}) - roa.RegisterServent(&rs.TagService{}) - roa.RegisterServent(&rs.RuleService{}) - roa.RegisterServent(&rs.MicroServiceInstanceService{}) - roa.RegisterServent(&rs.WatchService{}) - roa.RegisterServent(&rs.GovernService{}) + roa.RegisterServent(&MainService{}) + roa.RegisterServent(&MicroServiceService{}) + roa.RegisterServent(&TagService{}) + roa.RegisterServent(&RuleService{}) + roa.RegisterServent(&MicroServiceInstanceService{}) + roa.RegisterServent(&WatchService{}) + roa.RegisterServent(&GovernService{}) } //GetRouter return the router fo REST service diff --git a/server/rest/handlers/server.go b/server/rest/handler.go similarity index 87% rename from server/rest/handlers/server.go rename to server/rest/handler.go index a41ce41bf..31dff9db3 100644 --- a/server/rest/handlers/server.go +++ b/server/rest/handler.go @@ -1,15 +1,15 @@ -package handlers +package rest import ( "github.com/ServiceComb/service-center/server/interceptor" - "github.com/ServiceComb/service-center/server/rest/routers" + "github.com/ServiceComb/service-center/server/rest/controller/v3" "net/http" ) var router http.Handler func init() { - router = routers.GetRouter() + router = v3.GetRouter() http.Handle("/", DefaultServerHandler()) } diff --git a/server/rest/server.go b/server/rest/server.go index 82069db48..67ceec2e8 100644 --- a/server/rest/server.go +++ b/server/rest/server.go @@ -15,9 +15,9 @@ package rest import ( "crypto/tls" - "github.com/ServiceComb/service-center/pkg/common" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" + "github.com/ServiceComb/service-center/pkg/rest" + ssl "github.com/ServiceComb/service-center/pkg/tlsutil" + "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" "net/http" "time" @@ -34,8 +34,8 @@ func LoadConfig() (srvCfg *rest.ServerConfig, err error) { writeTimeout, _ := time.ParseDuration(beego.AppConfig.DefaultString("write_timeout", "60s")) maxHeaderBytes := beego.AppConfig.DefaultInt("max_header_bytes", 16384) var tlsConfig *tls.Config - if common.GetServerSSLConfig().SSLEnabled { - verifyClient := common.GetServerSSLConfig().VerifyClient + if ssl.GetServerSSLConfig().SSLEnabled { + verifyClient := ssl.GetServerSSLConfig().VerifyClient tlsConfig, err = rest.GetServerTLSConfig(verifyClient) if err != nil { return diff --git a/server/rpc/server.go b/server/rpc/server.go index ff4c36d06..da61d6833 100644 --- a/server/rpc/server.go +++ b/server/rpc/server.go @@ -14,11 +14,11 @@ package rpc import ( - "github.com/ServiceComb/service-center/pkg/common" + "github.com/ServiceComb/service-center/pkg/rest" + "github.com/ServiceComb/service-center/pkg/tlsutil" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" - "github.com/ServiceComb/service-center/util/rest" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "net" @@ -40,8 +40,8 @@ func NewServer(ep string) (_ *Server, err error) { } var grpcSrv *grpc.Server - if common.GetServerSSLConfig().SSLEnabled { - tlsConfig, err := rest.GetServerTLSConfig(common.GetServerSSLConfig().VerifyClient) + if tlsutil.GetServerSSLConfig().SSLEnabled { + tlsConfig, err := rest.GetServerTLSConfig(tlsutil.GetServerSSLConfig().VerifyClient) if err != nil { util.Logger().Error("error to get server tls config", err) return nil, err diff --git a/server/server.go b/server/server.go index 74fda4ed9..a39eb5c9a 100644 --- a/server/server.go +++ b/server/server.go @@ -14,17 +14,16 @@ package server import _ "github.com/ServiceComb/service-center/server/service/event" -import _ "github.com/ServiceComb/service-center/server/rest/handlers" import ( "fmt" - "github.com/ServiceComb/service-center/pkg/common" + ssl "github.com/ServiceComb/service-center/pkg/tlsutil" + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server/core" - "github.com/ServiceComb/service-center/server/core/mux" "github.com/ServiceComb/service-center/server/core/registry" st "github.com/ServiceComb/service-center/server/core/registry/store" + "github.com/ServiceComb/service-center/server/mux" nf "github.com/ServiceComb/service-center/server/service/notification" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "github.com/ServiceComb/service-center/version" "github.com/astaxie/beego" "os" @@ -136,7 +135,7 @@ func (s *ServiceCenterServer) addEndpoint(t APIType, ip, port string) { return } address := util.StringJoin([]string{ip, port}, ":") - if common.GetServerSSLConfig().SSLEnabled { + if ssl.GetServerSSLConfig().SSLEnabled { address += "?sslEnabled=true" } s.apiServer.Endpoints[t] = fmt.Sprintf("%s://%s", t, address) diff --git a/server/service/concurrent_test.go b/server/service/concurrent_test.go index 5d194eb94..6a1d50740 100644 --- a/server/service/concurrent_test.go +++ b/server/service/concurrent_test.go @@ -22,11 +22,11 @@ import ( "encoding/json" "fmt" "github.com/ServiceComb/service-center/pkg/etcdsync" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/service" - "github.com/ServiceComb/service-center/util" "testing" "time" ) diff --git a/server/service/event/instance_event_handler.go b/server/service/event/instance_event_handler.go index 508133f93..8b42ff12b 100644 --- a/server/service/event/instance_event_handler.go +++ b/server/service/event/instance_event_handler.go @@ -15,11 +15,11 @@ package event import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry/store" nf "github.com/ServiceComb/service-center/server/service/notification" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) diff --git a/server/service/event/rule_event_handler.go b/server/service/event/rule_event_handler.go index 6ac3ed486..4df606848 100644 --- a/server/service/event/rule_event_handler.go +++ b/server/service/event/rule_event_handler.go @@ -16,11 +16,11 @@ package event import ( "encoding/json" "fmt" + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry/store" nf "github.com/ServiceComb/service-center/server/service/notification" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) diff --git a/server/service/event/tag_event_handler.go b/server/service/event/tag_event_handler.go index 269d9d8fc..19dc2203b 100644 --- a/server/service/event/tag_event_handler.go +++ b/server/service/event/tag_event_handler.go @@ -16,11 +16,11 @@ package event import ( "encoding/json" "fmt" + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry/store" nf "github.com/ServiceComb/service-center/server/service/notification" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) diff --git a/server/service/governservice.go b/server/service/governservice.go index 8dfdf3001..e0ba55536 100644 --- a/server/service/governservice.go +++ b/server/service/governservice.go @@ -15,12 +15,12 @@ package service import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" "strings" ) diff --git a/server/service/instances.go b/server/service/instances.go index 588f4a62d..d6ed8b003 100644 --- a/server/service/instances.go +++ b/server/service/instances.go @@ -17,16 +17,16 @@ import ( "encoding/json" "errors" "fmt" + errorsEx "github.com/ServiceComb/service-center/pkg/errors" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" "github.com/ServiceComb/service-center/server/infra/quota" - "github.com/ServiceComb/service-center/server/plugins/dynamic" + "github.com/ServiceComb/service-center/server/plugin/dynamic" nf "github.com/ServiceComb/service-center/server/service/notification" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" - errorsEx "github.com/ServiceComb/service-center/util/errors" "github.com/gorilla/websocket" "golang.org/x/net/context" "math" diff --git a/server/service/microservices.go b/server/service/microservices.go index b61035ca0..50defc46f 100644 --- a/server/service/microservices.go +++ b/server/service/microservices.go @@ -16,16 +16,16 @@ package service import ( "encoding/json" "fmt" + errorsEx "github.com/ServiceComb/service-center/pkg/errors" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" - "github.com/ServiceComb/service-center/server/core/mux" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" "github.com/ServiceComb/service-center/server/infra/quota" - "github.com/ServiceComb/service-center/server/plugins/dynamic" + "github.com/ServiceComb/service-center/server/mux" + "github.com/ServiceComb/service-center/server/plugin/dynamic" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" - errorsEx "github.com/ServiceComb/service-center/util/errors" "golang.org/x/net/context" "strconv" "time" diff --git a/server/service/microservices_test.go b/server/service/microservices_test.go index 70e8493e3..d0471dcc9 100644 --- a/server/service/microservices_test.go +++ b/server/service/microservices_test.go @@ -15,9 +15,9 @@ package service_test import ( "fmt" - constKey "github.com/ServiceComb/service-center/server/common" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" + "github.com/ServiceComb/service-center/server/plugin/infra/quota/buildin" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "strconv" @@ -400,7 +400,7 @@ var _ = Describe("ServiceController", func() { }) It("create service, schema param check", func() { - size := constKey.SCHEMA_NUM_MAX_FOR_ONESERVICE + 1 + size := buildin.SCHEMA_NUM_MAX_FOR_ONESERVICE + 1 schemas := make([]string, size) for i := 0; i < size; i++ { schemas = append(schemas, strconv.Itoa(i)) diff --git a/server/service/notification/listwatcher.go b/server/service/notification/listwatcher.go index 54de52d6a..b81d4971d 100644 --- a/server/service/notification/listwatcher.go +++ b/server/service/notification/listwatcher.go @@ -14,8 +14,8 @@ package notification import ( + "github.com/ServiceComb/service-center/pkg/util" pb "github.com/ServiceComb/service-center/server/core/proto" - "github.com/ServiceComb/service-center/util" ) // 状态变化推送 diff --git a/server/service/notification/notification_healthchecker.go b/server/service/notification/notification_healthchecker.go index fd934e416..596f46328 100644 --- a/server/service/notification/notification_healthchecker.go +++ b/server/service/notification/notification_healthchecker.go @@ -13,7 +13,7 @@ //limitations under the License. package notification -import "github.com/ServiceComb/service-center/util" +import "github.com/ServiceComb/service-center/pkg/util" const ( NOTIFY_SERVER_CHECKER_NAME = "__HealthChecker__" diff --git a/server/service/notification/notification_service.go b/server/service/notification/notification_service.go index fa0bdb58f..483b56005 100644 --- a/server/service/notification/notification_service.go +++ b/server/service/notification/notification_service.go @@ -16,7 +16,7 @@ package notification import ( "container/list" "errors" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "sync" "time" ) diff --git a/server/service/notification/watch_util.go b/server/service/notification/watch_util.go index eaf1846da..7cb31c39a 100644 --- a/server/service/notification/watch_util.go +++ b/server/service/notification/watch_util.go @@ -17,10 +17,10 @@ import ( "encoding/json" "errors" "fmt" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "github.com/gorilla/websocket" "golang.org/x/net/context" "time" diff --git a/server/service/rule.go b/server/service/rule.go index 10c3bebb1..c00559dc5 100644 --- a/server/service/rule.go +++ b/server/service/rule.go @@ -16,14 +16,14 @@ package service import ( "encoding/json" "fmt" + errorsEx "github.com/ServiceComb/service-center/pkg/errors" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/infra/quota" - "github.com/ServiceComb/service-center/server/plugins/dynamic" + "github.com/ServiceComb/service-center/server/plugin/dynamic" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" - errorsEx "github.com/ServiceComb/service-center/util/errors" "golang.org/x/net/context" "strconv" "time" diff --git a/server/service/rule_test.go b/server/service/rule_test.go index 06a1f5ad7..45f01b7b0 100644 --- a/server/service/rule_test.go +++ b/server/service/rule_test.go @@ -16,10 +16,10 @@ package service_test import ( "fmt" pb "github.com/ServiceComb/service-center/server/core/proto" + "github.com/ServiceComb/service-center/server/plugin/infra/quota/buildin" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "strconv" - constKey "github.com/ServiceComb/service-center/server/common" ) var _ = Describe("ServiceController", func() { @@ -146,8 +146,8 @@ var _ = Describe("ServiceController", func() { }) Expect(err).To(BeNil()) serviceIdForRule := rspServiceForRule.ServiceId - size := constKey.RULE_NUM_MAX_FOR_ONESERVICE + 1 - for i := 0; i < size; i ++ { + size := buildin.RULE_NUM_MAX_FOR_ONESERVICE + 1 + for i := 0; i < size; i++ { resp, _ := serviceResource.AddRule(getContext(), &pb.AddServiceRulesRequest{ ServiceId: serviceIdForRule, Rules: []*pb.AddOrUpdateServiceRule{ @@ -159,7 +159,7 @@ var _ = Describe("ServiceController", func() { }, }, }) - if i == size - 1 { + if i == size-1 { Expect(resp.GetResponse().Code).To(Equal(pb.Response_FAIL)) return } diff --git a/server/service/schema.go b/server/service/schema.go index 1b7e2df4b..8f4f2ce98 100644 --- a/server/service/schema.go +++ b/server/service/schema.go @@ -14,13 +14,13 @@ package service import ( + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" "github.com/ServiceComb/service-center/server/infra/quota" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) diff --git a/server/service/service_suite_test.go b/server/service/service_suite_test.go index e8b6a1db7..23059c029 100644 --- a/server/service/service_suite_test.go +++ b/server/service/service_suite_test.go @@ -14,13 +14,13 @@ package service_test import ( + "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/server" "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" _ "github.com/ServiceComb/service-center/server/core/registry" _ "github.com/ServiceComb/service-center/server/core/registry/etcd" - _ "github.com/ServiceComb/service-center/server/plugins/infra/quota/buildin" - "github.com/ServiceComb/service-center/util" + _ "github.com/ServiceComb/service-center/server/plugin/infra/quota/buildin" . "github.com/onsi/ginkgo" "github.com/onsi/ginkgo/reporters" . "github.com/onsi/gomega" diff --git a/server/service/services_dependency.go b/server/service/services_dependency.go index 7e3d5e6f3..35b896d9b 100644 --- a/server/service/services_dependency.go +++ b/server/service/services_dependency.go @@ -14,11 +14,11 @@ package service import ( + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" - "github.com/ServiceComb/service-center/server/core/mux" pb "github.com/ServiceComb/service-center/server/core/proto" + "github.com/ServiceComb/service-center/server/mux" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) diff --git a/server/service/tag.go b/server/service/tag.go index e0644a41b..765d31286 100644 --- a/server/service/tag.go +++ b/server/service/tag.go @@ -15,12 +15,12 @@ package service import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/infra/quota" serviceUtil "github.com/ServiceComb/service-center/server/service/util" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) diff --git a/server/service/tag_test.go b/server/service/tag_test.go index 81446a1c1..2c0be473f 100644 --- a/server/service/tag_test.go +++ b/server/service/tag_test.go @@ -16,10 +16,10 @@ package service_test import ( "fmt" pb "github.com/ServiceComb/service-center/server/core/proto" + "github.com/ServiceComb/service-center/server/plugin/infra/quota/buildin" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "strconv" - constKey "github.com/ServiceComb/service-center/server/common" ) var serviceId string @@ -124,14 +124,14 @@ var _ = Describe("ServiceController", func() { Expect(respAddTags.GetResponse().Code).To(Equal(pb.Response_FAIL)) }) It("size of tags checker for one service", func() { - size := constKey.TAG_MAX_NUM_FOR_ONESERVICE + 2 + size := buildin.TAG_MAX_NUM_FOR_ONESERVICE + 2 tags := make(map[string]string, size) - for i := 0 ; i < size; i ++ { - tags["a" + strconv.Itoa(i)] = "a" + strconv.Itoa(i) + for i := 0; i < size; i++ { + tags["a"+strconv.Itoa(i)] = "a" + strconv.Itoa(i) } respAddTags, _ := serviceResource.AddTags(getContext(), &pb.AddServiceTagsRequest{ ServiceId: serviceId, - Tags: tags, + Tags: tags, }) Expect(respAddTags.GetResponse().Code).To(Equal(pb.Response_FAIL)) }) diff --git a/server/service/util/dependency.go b/server/service/util/dependency.go index 26b06ece3..6dedbe003 100644 --- a/server/service/util/dependency.go +++ b/server/service/util/dependency.go @@ -17,16 +17,16 @@ import ( "encoding/json" "errors" "fmt" - "github.com/ServiceComb/service-center/pkg/common/cache" + "github.com/ServiceComb/service-center/pkg/cache" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/server/mux" "golang.org/x/net/context" "strings" "time" - "github.com/ServiceComb/service-center/server/core/mux" ) var consumerCache *cache.Cache diff --git a/server/service/util/instance_util.go b/server/service/util/instance_util.go index 4f0de669a..e125e03cb 100644 --- a/server/service/util/instance_util.go +++ b/server/service/util/instance_util.go @@ -15,11 +15,11 @@ package util import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" "strconv" diff --git a/server/service/util/microservice_util.go b/server/service/util/microservice_util.go index b0a1e25f9..54b56d504 100644 --- a/server/service/util/microservice_util.go +++ b/server/service/util/microservice_util.go @@ -15,12 +15,12 @@ package util import ( "encoding/json" - "github.com/ServiceComb/service-center/pkg/common/cache" + "github.com/ServiceComb/service-center/pkg/cache" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" "time" diff --git a/server/service/util/rule_util.go b/server/service/util/rule_util.go index 557c512e6..937342f10 100644 --- a/server/service/util/rule_util.go +++ b/server/service/util/rule_util.go @@ -16,12 +16,12 @@ package util import ( "encoding/json" "fmt" + errorsEx "github.com/ServiceComb/service-center/pkg/errors" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" - "github.com/ServiceComb/service-center/util" - errorsEx "github.com/ServiceComb/service-center/util/errors" "golang.org/x/net/context" "reflect" "regexp" diff --git a/server/service/util/tag_util.go b/server/service/util/tag_util.go index bce1615e9..e06b28ce3 100644 --- a/server/service/util/tag_util.go +++ b/server/service/util/tag_util.go @@ -15,10 +15,10 @@ package util import ( "encoding/json" + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" - "github.com/ServiceComb/service-center/util" "golang.org/x/net/context" ) diff --git a/server/service/util/tenant_util.go b/server/service/util/tenant_util.go index a91d36635..912616175 100644 --- a/server/service/util/tenant_util.go +++ b/server/service/util/tenant_util.go @@ -14,10 +14,10 @@ package util import ( + "github.com/ServiceComb/service-center/pkg/util" apt "github.com/ServiceComb/service-center/server/core" "github.com/ServiceComb/service-center/server/core/registry" "github.com/ServiceComb/service-center/server/core/registry/store" - "github.com/ServiceComb/service-center/util" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" "strings" diff --git a/server/service/util/versionrule.go b/server/service/util/versionrule.go index eb5648091..990a1cb29 100644 --- a/server/service/util/versionrule.go +++ b/server/service/util/versionrule.go @@ -15,7 +15,7 @@ package util import ( "bytes" - "github.com/ServiceComb/service-center/util" + "github.com/ServiceComb/service-center/pkg/util" "github.com/coreos/etcd/mvcc/mvccpb" "sort" "strconv" From 1860f8eacf0d657cc70b82578e005c3e9cba5b61 Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 10 Oct 2017 17:00:08 +0800 Subject: [PATCH 02/25] Bug fixes: do not print log when self preservation stopped. --- server/core/registry/store/defer.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/core/registry/store/defer.go b/server/core/registry/store/defer.go index 134b4011b..8cbcfc772 100644 --- a/server/core/registry/store/defer.go +++ b/server/core/registry/store/defer.go @@ -124,7 +124,6 @@ func (iedh *InstanceEventDeferHandler) check(stopCh <-chan struct{}) { return case <-time.After(time.Second): iedh.mux.Lock() - start := len(iedh.ttls) for key, ttl := range iedh.ttls { ttl-- if ttl > 0 { @@ -140,7 +139,7 @@ func (iedh *InstanceEventDeferHandler) check(stopCh <-chan struct{}) { iedh.deferCh <- evt } - if start > 0 && len(iedh.ttls) == 0 { + if iedh.enabled && len(iedh.ttls) == 0 { iedh.enabled = false util.Logger().Warnf(nil, "self preservation is stopped") } From acfdd49bb6b1417c98640770b1c96cd0eafa0946 Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 10 Oct 2017 17:10:48 +0800 Subject: [PATCH 03/25] New features: /version API supports return SC running environment information. --- server/rest/controller/v3/main_controller.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/server/rest/controller/v3/main_controller.go b/server/rest/controller/v3/main_controller.go index 27237dafc..f65b48241 100644 --- a/server/rest/controller/v3/main_controller.go +++ b/server/rest/controller/v3/main_controller.go @@ -20,12 +20,13 @@ import ( "github.com/ServiceComb/service-center/server/core" "github.com/ServiceComb/service-center/server/rest/controller" "github.com/ServiceComb/service-center/version" + "github.com/astaxie/beego" "net/http" ) type Result struct { - Info string `json:"info" description:"return info"` - Status int `json:"status" description:"http return code"` + version.VersionSet + RunMode string `json:"runMode"` } type MainService struct { @@ -53,7 +54,11 @@ func (this *MainService) ClusterHealth(w http.ResponseWriter, r *http.Request) { } func (this *MainService) GetVersion(w http.ResponseWriter, r *http.Request) { - versionJSON, _ := json.Marshal(version.Ver()) + result := Result{ + version.Ver(), + beego.AppConfig.String("runmode"), + } + resultJSON, _ := json.Marshal(result) w.Header().Set("Content-Type", "application/json;charset=utf-8") - w.Write(versionJSON) + w.Write(resultJSON) } From 8135515519c66e4c3515c8bfbf360b346a48ad38 Mon Sep 17 00:00:00 2001 From: little-cui Date: Thu, 12 Oct 2017 22:34:28 +0800 Subject: [PATCH 04/25] Optimize log performance. --- pkg/util/log.go | 61 +++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/pkg/util/log.go b/pkg/util/log.go index 3f0fe8928..ca5fafb60 100644 --- a/pkg/util/log.go +++ b/pkg/util/log.go @@ -15,14 +15,11 @@ package util import ( "fmt" - "os" - - "bufio" - "bytes" "github.com/ServiceComb/service-center/pkg/lager" "github.com/ServiceComb/service-center/pkg/lager/core" + "os" "path/filepath" - "runtime/debug" + "runtime" "strings" "sync" "time" @@ -75,12 +72,12 @@ func Logger() core.Logger { if len(loggerNames) == 0 { return LOGGER } - funcFullName := getCalleeFuncName(debug.Stack()) + funcFullName := getCalleeFuncName() for prefix, logFile := range loggerNames { if strings.Index(prefix, "/") < 0 { // function name - if prefix != funcFullName[strings.LastIndex(funcFullName, ".")+1:] { + if prefix != funcFullName[strings.LastIndex(funcFullName, " ")+1:] { continue } } else { @@ -113,22 +110,42 @@ func Logger() core.Logger { return LOGGER } -func getCalleeFuncName(stack []byte) string { - reader := bufio.NewReader(bytes.NewReader(stack)) - /* - goroutine 1 [running]: - runtime/debug.Stack(0x0, 0x0, 0x0) - runtime/debug/stack.go:24 +0xbe - github.com/ServiceComb/service-center/util.Logger(0x0, 0x0) - github.com/ServiceComb/service-center/util/log.go:67 +0xf2 - */ - for i := 0; i < 1+2*2; i++ { - reader.ReadLine() +func getCalleeFuncName() string { + fullName := "" + for i := 2; i <= 4; i++ { + pc, file, _, ok := runtime.Caller(i) + + if strings.Index(file, "log.go") > 0 { + continue + } + + if ok { + idx := strings.LastIndex(file, "src") + switch { + case idx >= 0: + fullName = file[idx+4:] + default: + fullName = file + } + + if f := runtime.FuncForPC(pc); f != nil { + fullName += " " + formatFuncName(f.Name()) + } + } + break + } + return fullName +} + +func formatFuncName(f string) string { + i := strings.LastIndex(f, "/") + j := strings.Index(f[i+1:], ".") + if j < 1 { + return "???" } - line, _, _ := reader.ReadLine() - funcFullName := BytesToStringWithNoCopy(line) - funcFullName = funcFullName[:strings.LastIndex(funcFullName, "(")] - return funcFullName + _, fun := f[:i+j+1], f[i+j+2:] + i = strings.LastIndex(fun, ".") + return fun[i+1:] } func CustomLogger(pkgOrFunc, fileName string) { From 3841eac00ce26ab60d6e64c5dc900120bbbdc9d5 Mon Sep 17 00:00:00 2001 From: little-cui Date: Sun, 24 Sep 2017 16:23:30 +0800 Subject: [PATCH 05/25] Code restructure. --- pkg/lager/core/chug/chug_suite_test.go | 26 -------------------------- pkg/lager/core/lager_suite_test.go | 26 -------------------------- 2 files changed, 52 deletions(-) delete mode 100644 pkg/lager/core/chug/chug_suite_test.go delete mode 100644 pkg/lager/core/lager_suite_test.go diff --git a/pkg/lager/core/chug/chug_suite_test.go b/pkg/lager/core/chug/chug_suite_test.go deleted file mode 100644 index 7a6fa234d..000000000 --- a/pkg/lager/core/chug/chug_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package chug_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestChug(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Chug Suite") -} diff --git a/pkg/lager/core/lager_suite_test.go b/pkg/lager/core/lager_suite_test.go deleted file mode 100644 index 43218fb90..000000000 --- a/pkg/lager/core/lager_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package core_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestLager(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Lager Suite") -} From 16e088eecf8671c9b24cac6307af43f4b83c9bef Mon Sep 17 00:00:00 2001 From: little-cui Date: Thu, 12 Oct 2017 22:34:28 +0800 Subject: [PATCH 06/25] Optimize log performance. --- pkg/util/log.go | 61 +++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/pkg/util/log.go b/pkg/util/log.go index 3f0fe8928..ca5fafb60 100644 --- a/pkg/util/log.go +++ b/pkg/util/log.go @@ -15,14 +15,11 @@ package util import ( "fmt" - "os" - - "bufio" - "bytes" "github.com/ServiceComb/service-center/pkg/lager" "github.com/ServiceComb/service-center/pkg/lager/core" + "os" "path/filepath" - "runtime/debug" + "runtime" "strings" "sync" "time" @@ -75,12 +72,12 @@ func Logger() core.Logger { if len(loggerNames) == 0 { return LOGGER } - funcFullName := getCalleeFuncName(debug.Stack()) + funcFullName := getCalleeFuncName() for prefix, logFile := range loggerNames { if strings.Index(prefix, "/") < 0 { // function name - if prefix != funcFullName[strings.LastIndex(funcFullName, ".")+1:] { + if prefix != funcFullName[strings.LastIndex(funcFullName, " ")+1:] { continue } } else { @@ -113,22 +110,42 @@ func Logger() core.Logger { return LOGGER } -func getCalleeFuncName(stack []byte) string { - reader := bufio.NewReader(bytes.NewReader(stack)) - /* - goroutine 1 [running]: - runtime/debug.Stack(0x0, 0x0, 0x0) - runtime/debug/stack.go:24 +0xbe - github.com/ServiceComb/service-center/util.Logger(0x0, 0x0) - github.com/ServiceComb/service-center/util/log.go:67 +0xf2 - */ - for i := 0; i < 1+2*2; i++ { - reader.ReadLine() +func getCalleeFuncName() string { + fullName := "" + for i := 2; i <= 4; i++ { + pc, file, _, ok := runtime.Caller(i) + + if strings.Index(file, "log.go") > 0 { + continue + } + + if ok { + idx := strings.LastIndex(file, "src") + switch { + case idx >= 0: + fullName = file[idx+4:] + default: + fullName = file + } + + if f := runtime.FuncForPC(pc); f != nil { + fullName += " " + formatFuncName(f.Name()) + } + } + break + } + return fullName +} + +func formatFuncName(f string) string { + i := strings.LastIndex(f, "/") + j := strings.Index(f[i+1:], ".") + if j < 1 { + return "???" } - line, _, _ := reader.ReadLine() - funcFullName := BytesToStringWithNoCopy(line) - funcFullName = funcFullName[:strings.LastIndex(funcFullName, "(")] - return funcFullName + _, fun := f[:i+j+1], f[i+j+2:] + i = strings.LastIndex(fun, ".") + return fun[i+1:] } func CustomLogger(pkgOrFunc, fileName string) { From 596b1e7cb5f6853c0738be4fcb6f74c784248eb1 Mon Sep 17 00:00:00 2001 From: little-cui Date: Sun, 24 Sep 2017 16:23:30 +0800 Subject: [PATCH 07/25] Code restructure. --- .../ginkgoreporter_suite_test.go | 26 ------------------- .../ratelimiter/ratelimiter_suite_test.go | 26 ------------------- 2 files changed, 52 deletions(-) delete mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go delete mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go deleted file mode 100644 index 7439eef3b..000000000 --- a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ginkgoreporter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGinkgoReporter(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "GinkgoReporter Suite") -} diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go deleted file mode 100644 index 0cbc1e9ee..000000000 --- a/server/interceptor/ratelimiter/ratelimiter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ratelimiter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestNet(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "RateLimiter Suite") -} From 1e913fb28419a024a556d7f868eb4510ba593197 Mon Sep 17 00:00:00 2001 From: little-cui Date: Mon, 16 Oct 2017 23:50:54 +0800 Subject: [PATCH 08/25] Optimize heartbeat log print. --- pkg/lager/core/chug/chug_suite_test.go | 26 ++++++++++++++++ .../ginkgoreporter_suite_test.go | 26 ++++++++++++++++ pkg/lager/core/lager_suite_test.go | 26 ++++++++++++++++ pkg/lager/core/logger.go | 16 ++++++++-- server/core/registry/store/store.go | 31 ++++++++++++++----- .../ratelimiter/ratelimiter_suite_test.go | 26 ++++++++++++++++ server/service/instances.go | 6 ++-- 7 files changed, 145 insertions(+), 12 deletions(-) create mode 100644 pkg/lager/core/chug/chug_suite_test.go create mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go create mode 100644 pkg/lager/core/lager_suite_test.go create mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/chug/chug_suite_test.go b/pkg/lager/core/chug/chug_suite_test.go new file mode 100644 index 000000000..7a6fa234d --- /dev/null +++ b/pkg/lager/core/chug/chug_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package chug_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestChug(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Chug Suite") +} diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go new file mode 100644 index 000000000..7439eef3b --- /dev/null +++ b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ginkgoreporter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestGinkgoReporter(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "GinkgoReporter Suite") +} diff --git a/pkg/lager/core/lager_suite_test.go b/pkg/lager/core/lager_suite_test.go new file mode 100644 index 000000000..43218fb90 --- /dev/null +++ b/pkg/lager/core/lager_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package core_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestLager(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Lager Suite") +} diff --git a/pkg/lager/core/logger.go b/pkg/lager/core/logger.go index ecf7566a3..d447ac86b 100644 --- a/pkg/lager/core/logger.go +++ b/pkg/lager/core/logger.go @@ -150,7 +150,7 @@ func (l *logger) logs(ss []Sink, loglevel LogLevel, action string, err error, da log := LogFormat{ Timestamp: currentTimestamp(), Source: l.component, - Message: l.task + "." + strconv.QuoteToGraphic(action), + Message: strconv.QuoteToGraphic(action), LogLevel: loglevel, Data: logData, } @@ -160,6 +160,7 @@ func (l *logger) logs(ss []Sink, loglevel LogLevel, action string, err error, da for _, sink := range ss { if !(l.logFormatText) { + log.Message = l.task + "." + log.Message jsondata, jserr := log.ToJSON() if jserr != nil { fmt.Printf("[lager] ToJSON() ERROR! action: %s, jserr: %s, log: %s\n", action, jserr, log) @@ -175,7 +176,7 @@ func (l *logger) logs(ss []Sink, loglevel LogLevel, action string, err error, da } else { levelstr := strings.ToUpper(FormatLogLevel(log.LogLevel)) buf := bytes.Buffer{} - buf.WriteString(fmt.Sprintf("%s %s %s %d %s %s():%d - %s", + buf.WriteString(fmt.Sprintf("%s %s %s %d %s %s():%d %s", log.Timestamp, levelstr, log.Source, log.ProcessID, log.File, log.Method, log.LineNo, log.Message)) if err != nil { buf.WriteString(fmt.Sprintf("(error: %s)", logData["error"])) @@ -264,7 +265,7 @@ func (l *logger) baseData(givenData ...Data) Data { } func currentTimestamp() string { - return time.Now().Format(time.RFC3339Nano) + return time.Now().Format("2006-01-02T15:04:05.000Z07:00") } func addExtLogInfo(logf *LogFormat) { @@ -285,6 +286,15 @@ func addExtLogInfo(logf *LogFormat) { default: logf.File = file } + packages := strings.Split(logf.File, "/") + if len(packages) > 0 { + short := "" + for _, p := range packages { + short += p[0:1] + "/" + } + short += packages[len(packages)-1] + logf.File = short + } logf.LineNo = line if f := runtime.FuncForPC(pc); f != nil { diff --git a/server/core/registry/store/store.go b/server/core/registry/store/store.go index 246aaf1eb..9484e7ba9 100644 --- a/server/core/registry/store/store.go +++ b/server/core/registry/store/store.go @@ -21,6 +21,7 @@ import ( "golang.org/x/net/context" "strconv" "sync" + "time" ) const ( @@ -85,10 +86,12 @@ func init() { } type LeaseAsyncTask struct { - key string - LeaseID int64 - TTL int64 - err error + key string + LeaseID int64 + TTL int64 + CreateTime time.Time + StartTime time.Time + err error } func (lat *LeaseAsyncTask) Key() string { @@ -96,9 +99,22 @@ func (lat *LeaseAsyncTask) Key() string { } func (lat *LeaseAsyncTask) Do(ctx context.Context) error { + lat.StartTime = time.Now() lat.TTL, lat.err = registry.GetRegisterCenter().LeaseRenew(ctx, lat.LeaseID) if lat.err != nil { - util.Logger().Errorf(lat.err, "renew lease %d failed, key %s", lat.LeaseID, lat.Key()) + util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", + lat.LeaseID, + lat.CreateTime.Format("15:04:05.000"), + lat.StartTime.Format("15:04:05.000"), + time.Now().Sub(lat.StartTime), + lat.Key()) + } else { + util.Logger().Debugf("renew lease %d(rev: %s, start: %s(cost %s)), key %s", + lat.LeaseID, + lat.CreateTime.Format("15:04:05.000"), + lat.StartTime.Format("15:04:05.000"), + time.Now().Sub(lat.StartTime), + lat.Key()) } return lat.err } @@ -336,8 +352,9 @@ func Store() *KvStore { func NewLeaseAsyncTask(op registry.PluginOp) *LeaseAsyncTask { return &LeaseAsyncTask{ - key: "LeaseAsyncTask_" + util.BytesToStringWithNoCopy(op.Key), - LeaseID: op.Lease, + key: "LeaseAsyncTask_" + util.BytesToStringWithNoCopy(op.Key), + LeaseID: op.Lease, + CreateTime: time.Now(), } } diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go new file mode 100644 index 000000000..0cbc1e9ee --- /dev/null +++ b/server/interceptor/ratelimiter/ratelimiter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ratelimiter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestNet(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "RateLimiter Suite") +} diff --git a/server/service/instances.go b/server/service/instances.go index d6ed8b003..f07e08eea 100644 --- a/server/service/instances.go +++ b/server/service/instances.go @@ -19,6 +19,7 @@ import ( "fmt" errorsEx "github.com/ServiceComb/service-center/pkg/errors" "github.com/ServiceComb/service-center/pkg/util" + "github.com/ServiceComb/service-center/server/core" apt "github.com/ServiceComb/service-center/server/core" pb "github.com/ServiceComb/service-center/server/core/proto" "github.com/ServiceComb/service-center/server/core/registry" @@ -32,7 +33,6 @@ import ( "math" "strconv" "time" - "github.com/ServiceComb/service-center/server/core" ) type InstanceController struct { @@ -307,6 +307,7 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Request format invalid."), }, nil } + startTime := time.Now() remoteIP := util.GetIPFromContext(ctx) tenant := util.ParseTenantProject(ctx) instanceFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId}, "/") @@ -324,7 +325,8 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Service instance does not exist."), }, nil } - util.Logger().Infof("heartbeat successful: %s renew ttl to %d. operator: %s", instanceFlag, ttl, remoteIP) + util.Logger().Infof("heartbeat(cost %s) successful: %s renew ttl to %d. operator: %s", + time.Since(startTime), instanceFlag, ttl, remoteIP) return &pb.HeartbeatResponse{ Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service instance heartbeat successfully."), }, nil From 699ecc405ceb597dc88c6487b04196336deaef71 Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 17 Oct 2017 00:16:46 +0800 Subject: [PATCH 09/25] Optimize heartbeat log print. --- server/core/registry/store/store.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server/core/registry/store/store.go b/server/core/registry/store/store.go index 9484e7ba9..60256cfda 100644 --- a/server/core/registry/store/store.go +++ b/server/core/registry/store/store.go @@ -91,6 +91,7 @@ type LeaseAsyncTask struct { TTL int64 CreateTime time.Time StartTime time.Time + EndTime time.Time err error } @@ -101,6 +102,7 @@ func (lat *LeaseAsyncTask) Key() string { func (lat *LeaseAsyncTask) Do(ctx context.Context) error { lat.StartTime = time.Now() lat.TTL, lat.err = registry.GetRegisterCenter().LeaseRenew(ctx, lat.LeaseID) + lat.EndTime = time.Now() if lat.err != nil { util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, @@ -108,15 +110,18 @@ func (lat *LeaseAsyncTask) Do(ctx context.Context) error { lat.StartTime.Format("15:04:05.000"), time.Now().Sub(lat.StartTime), lat.Key()) - } else { - util.Logger().Debugf("renew lease %d(rev: %s, start: %s(cost %s)), key %s", + return lat.err + } + + if lat.EndTime.Sub(lat.StartTime) > time.Second { + util.Logger().Warnf(nil, "renew lease %d(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), lat.StartTime.Format("15:04:05.000"), time.Now().Sub(lat.StartTime), lat.Key()) } - return lat.err + return nil } func (lat *LeaseAsyncTask) Err() error { From a0a466d7599d1c6323d7742cf6c6ac4527426c5f Mon Sep 17 00:00:00 2001 From: little-cui Date: Sun, 24 Sep 2017 16:23:30 +0800 Subject: [PATCH 10/25] Code restructure. --- .../ginkgoreporter_suite_test.go | 26 ------------------- .../ratelimiter/ratelimiter_suite_test.go | 26 ------------------- 2 files changed, 52 deletions(-) delete mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go delete mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go deleted file mode 100644 index 7439eef3b..000000000 --- a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ginkgoreporter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGinkgoReporter(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "GinkgoReporter Suite") -} diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go deleted file mode 100644 index 0cbc1e9ee..000000000 --- a/server/interceptor/ratelimiter/ratelimiter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ratelimiter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestNet(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "RateLimiter Suite") -} From 0dc7328992450b797e1a59be16edeaf72ee89abb Mon Sep 17 00:00:00 2001 From: little-cui Date: Mon, 16 Oct 2017 23:50:54 +0800 Subject: [PATCH 11/25] Optimize heartbeat log print. --- pkg/lager/core/chug/chug_suite_test.go | 26 +++++++++++++++++++ .../ginkgoreporter_suite_test.go | 26 +++++++++++++++++++ pkg/lager/core/lager_suite_test.go | 26 +++++++++++++++++++ server/core/registry/store/store.go | 13 +++++++--- .../ratelimiter/ratelimiter_suite_test.go | 26 +++++++++++++++++++ 5 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 pkg/lager/core/chug/chug_suite_test.go create mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go create mode 100644 pkg/lager/core/lager_suite_test.go create mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/chug/chug_suite_test.go b/pkg/lager/core/chug/chug_suite_test.go new file mode 100644 index 000000000..7a6fa234d --- /dev/null +++ b/pkg/lager/core/chug/chug_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package chug_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestChug(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Chug Suite") +} diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go new file mode 100644 index 000000000..7439eef3b --- /dev/null +++ b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ginkgoreporter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestGinkgoReporter(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "GinkgoReporter Suite") +} diff --git a/pkg/lager/core/lager_suite_test.go b/pkg/lager/core/lager_suite_test.go new file mode 100644 index 000000000..43218fb90 --- /dev/null +++ b/pkg/lager/core/lager_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package core_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestLager(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Lager Suite") +} diff --git a/server/core/registry/store/store.go b/server/core/registry/store/store.go index 60256cfda..baf0139ff 100644 --- a/server/core/registry/store/store.go +++ b/server/core/registry/store/store.go @@ -104,14 +104,21 @@ func (lat *LeaseAsyncTask) Do(ctx context.Context) error { lat.TTL, lat.err = registry.GetRegisterCenter().LeaseRenew(ctx, lat.LeaseID) lat.EndTime = time.Now() if lat.err != nil { - util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", + util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), + lat.StartTime.Format("15:04:05.000"), + time.Now().Sub(lat.StartTime), + lat.Key()) + } else { + util.Logger().Debugf("renew lease %d(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), lat.StartTime.Format("15:04:05.000"), + time.Now().Sub(lat.StartTime),lat.CreateTime.Format("15:04:05.000"), + lat.StartTime.Format("15:04:05.000"), time.Now().Sub(lat.StartTime), lat.Key()) - return lat.err - } + return lat.err +} if lat.EndTime.Sub(lat.StartTime) > time.Second { util.Logger().Warnf(nil, "renew lease %d(rev: %s, start: %s(cost %s)), key %s", diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go new file mode 100644 index 000000000..0cbc1e9ee --- /dev/null +++ b/server/interceptor/ratelimiter/ratelimiter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ratelimiter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestNet(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "RateLimiter Suite") +} From 12af4cad27564c7d42aec1fec8539907cdc91141 Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 17 Oct 2017 00:16:46 +0800 Subject: [PATCH 12/25] Optimize log print. --- pkg/util/log.go | 26 ++++++ .../core/registry/etcd/remote_etcd_plugin.go | 20 ++++- server/core/registry/registry.go | 80 ++++++++++++++----- server/core/registry/store/opt.go | 2 +- server/core/registry/store/store.go | 13 +-- 5 files changed, 106 insertions(+), 35 deletions(-) diff --git a/pkg/util/log.go b/pkg/util/log.go index ca5fafb60..5deac3657 100644 --- a/pkg/util/log.go +++ b/pkg/util/log.go @@ -176,3 +176,29 @@ func monitorLogFile() { } }) } + +func LogNilOrWarnf(start time.Time, format string, args ...interface{}) { + cost := time.Now().Sub(start) + if cost < time.Second { + return + } + Logger().Warnf(nil, "[%s]%s", cost, fmt.Sprintf(format, args...)) +} + +func LogDebugOrWarnf(start time.Time, format string, args ...interface{}) { + cost := time.Now().Sub(start) + if cost < time.Second { + Logger().Debugf("[%s]%s", cost, fmt.Sprintf(format, args...)) + return + } + Logger().Warnf(nil, "[%s]%s", cost, fmt.Sprintf(format, args...)) +} + +func LogInfoOrWarnf(start time.Time, format string, args ...interface{}) { + cost := time.Now().Sub(start) + if cost < time.Second { + Logger().Infof("[%s]%s", cost, fmt.Sprintf(format, args...)) + return + } + Logger().Warnf(nil, "[%s]%s", cost, fmt.Sprintf(format, args...)) +} diff --git a/server/core/registry/etcd/remote_etcd_plugin.go b/server/core/registry/etcd/remote_etcd_plugin.go index f063c2fd3..fd9c40d68 100644 --- a/server/core/registry/etcd/remote_etcd_plugin.go +++ b/server/core/registry/etcd/remote_etcd_plugin.go @@ -224,6 +224,7 @@ func (c *EtcdClient) paging(ctx context.Context, op registry.PluginOp, countPerP var etcdResp *clientv3.GetResponse key := util.BytesToStringWithNoCopy(op.Key) + start := time.Now() tempOp := op tempOp.CountOnly = true coutResp, err := c.Client.Get(ctx, key, c.toGetRequest(tempOp)...) @@ -236,9 +237,6 @@ func (c *EtcdClient) paging(ctx context.Context, op registry.PluginOp, countPerP return nil, nil // no paging } - util.Logger().Debugf("get too many KeyValues from etcdserver, now paging.(%d vs %d)", - recordCount, countPerPage) - tempOp.KeyOnly = false tempOp.CountOnly = false tempOp.Prefix = false @@ -274,6 +272,9 @@ func (c *EtcdClient) paging(ctx context.Context, op registry.PluginOp, countPerP etcdResp.Kvs = append(etcdResp.Kvs, recordResp.Kvs...) } + util.LogInfoOrWarnf(start, "get too many KeyValues from etcdserver, now paging.(%d vs %d)", + recordCount, countPerPage) + // too slow if op.SortOrder == registry.SORT_DESCEND { t := time.Now() @@ -285,12 +286,13 @@ func (c *EtcdClient) paging(ctx context.Context, op registry.PluginOp, countPerP } etcdResp.Kvs[i], etcdResp.Kvs[last] = etcdResp.Kvs[last], etcdResp.Kvs[i] } - util.Logger().Debugf("sorted %d KeyValues spend %s", recordCount, time.Now().Sub(t)) + util.LogNilOrWarnf(t, "sorted %d KeyValues", recordCount) } return etcdResp, nil } func (c *EtcdClient) Do(ctx context.Context, opts ...registry.PluginOpOption) (*registry.PluginResponse, error) { + start := time.Now() op := registry.OptionsToOp(opts...) otCtx, cancel := registry.WithTimeout(ctx) @@ -348,6 +350,8 @@ func (c *EtcdClient) Do(ctx context.Context, opts ...registry.PluginOpOption) (* return nil, err } resp.Succeeded = true + + util.LogNilOrWarnf(start, "registry client do %s", op) return resp, nil } @@ -366,6 +370,7 @@ func (c *EtcdClient) TxnWithCmp(ctx context.Context, success []registry.PluginOp otCtx, cancel := registry.WithTimeout(ctx) defer cancel() + start := time.Now() etcdCmps := c.toCompares(cmps) etcdSuccessOps := c.toTxnRequest(success) etcdFailOps := c.toTxnRequest(fail) @@ -383,6 +388,7 @@ func (c *EtcdClient) TxnWithCmp(ctx context.Context, success []registry.PluginOp if err != nil { return nil, err } + util.LogNilOrWarnf(start, "registry client txn {cmp: %s, success: %s, fail: %s}", cmps, success, fail) return ®istry.PluginResponse{ Succeeded: resp.Succeeded, Revision: resp.Header.Revision, @@ -392,30 +398,36 @@ func (c *EtcdClient) TxnWithCmp(ctx context.Context, success []registry.PluginOp func (c *EtcdClient) LeaseGrant(ctx context.Context, TTL int64) (int64, error) { otCtx, cancel := registry.WithTimeout(ctx) defer cancel() + start := time.Now() etcdResp, err := c.Client.Grant(otCtx, TTL) if err != nil { return 0, err } + util.LogNilOrWarnf(start, "registry client grant lease %ds", TTL) return int64(etcdResp.ID), nil } func (c *EtcdClient) LeaseRenew(ctx context.Context, leaseID int64) (int64, error) { otCtx, cancel := registry.WithTimeout(ctx) defer cancel() + start := time.Now() etcdResp, err := c.Client.KeepAliveOnce(otCtx, clientv3.LeaseID(leaseID)) if err != nil { return 0, err } + util.LogNilOrWarnf(start, "registry client renew lease %d", leaseID) return etcdResp.TTL, nil } func (c *EtcdClient) LeaseRevoke(ctx context.Context, leaseID int64) error { otCtx, cancel := registry.WithTimeout(ctx) defer cancel() + start := time.Now() _, err := c.Client.Revoke(otCtx, clientv3.LeaseID(leaseID)) if err != nil { return err } + util.LogNilOrWarnf(start, "registry client revoke lease %d", leaseID) return nil } diff --git a/server/core/registry/registry.go b/server/core/registry/registry.go index edfb7b4d4..601afeb85 100644 --- a/server/core/registry/registry.go +++ b/server/core/registry/registry.go @@ -14,7 +14,6 @@ package registry import ( - "encoding/json" "fmt" "github.com/ServiceComb/service-center/pkg/util" "github.com/astaxie/beego" @@ -78,8 +77,39 @@ func (so SortOrder) String() string { } type CompareType int + +func (ct CompareType) String() string { + switch ct { + case CMP_VERSION: + return "CMP_VERSION" + case CMP_CREATE: + return "CMP_CREATE" + case CMP_MOD: + return "CMP_MOD" + case CMP_VALUE: + return "CMP_VALUE" + default: + return "CMP_TYPE" + strconv.Itoa(int(ct)) + } +} + type CompareResult int +func (cr CompareResult) String() string { + switch cr { + case CMP_EQUAL: + return "CMP_EQUAL" + case CMP_GREATER: + return "CMP_GREATER" + case CMP_LESS: + return "CMP_LESS" + case CMP_NOT_EQUAL: + return "CMP_NOT_EQUAL" + default: + return "CMP_RESULT" + strconv.Itoa(int(cr)) + } +} + const ( Get ActionType = iota Put @@ -151,25 +181,28 @@ type Config struct { } type PluginOp struct { - Action ActionType `json:"action"` - Key []byte `json:"key,omitempty"` - EndKey []byte `json:"endKey,omitempty"` - Value []byte `json:"value,omitempty"` - Prefix bool `json:"prefix,omitempty"` - PrevKV bool `json:"prevKV,omitempty"` - Lease int64 `json:"leaseId,omitempty"` - KeyOnly bool `json:"keyOnly,omitempty"` - CountOnly bool `json:"countOnly,omitempty"` - SortOrder SortOrder `json:"sort,omitempty"` - Revision int64 `json:"rev,omitempty"` - IgnoreLease bool `json:"ignoreLease,omitempty"` - Mode CacheMode `json:"mode,omitempty"` - WatchCallback WatchCallback `json:"watchCallback,omitempty"` -} - -func (op *PluginOp) String() string { - b, _ := json.Marshal(op) - return util.BytesToStringWithNoCopy(b) + Action ActionType + Key []byte + EndKey []byte + Value []byte + Prefix bool + PrevKV bool + Lease int64 + KeyOnly bool + CountOnly bool + SortOrder SortOrder + Revision int64 + IgnoreLease bool + Mode CacheMode + WatchCallback WatchCallback +} + +func (op PluginOp) String() string { + return fmt.Sprintf( + "{action: %s, key: %s, end: %s, val: %s, prefix: %t, prev: %t, lease: %d, keyOnly: %t, countOnly: %t, sort: %s, rev: %d, ignoreLease: %t, mode: %s}", + op.Action, op.Key, op.EndKey, op.Value, op.Prefix, op.PrevKV, op.Lease, op.KeyOnly, op.CountOnly, + op.SortOrder, op.Revision, op.IgnoreLease, op.Mode, + ) } type PluginOpOption func(*PluginOp) @@ -247,6 +280,13 @@ type CompareOp struct { Value interface{} } +func (op CompareOp) String() string { + return fmt.Sprintf( + "{key: %s, type: %s, result: %s, val: %s}", + op.Key, op.Type, op.Result, op.Value, + ) +} + func CmpVer(key []byte) CompareOp { return CompareOp{Key: key, Type: CMP_VERSION} } func CmpCreateRev(key []byte) CompareOp { return CompareOp{Key: key, Type: CMP_CREATE} } func CmpModRev(key []byte) CompareOp { return CompareOp{Key: key, Type: CMP_MOD} } diff --git a/server/core/registry/store/opt.go b/server/core/registry/store/opt.go index e246fcbfd..04fc97c98 100644 --- a/server/core/registry/store/opt.go +++ b/server/core/registry/store/opt.go @@ -34,7 +34,7 @@ type KvCacherCfg struct { DeferHander DeferHandler } -func (cfg *KvCacherCfg) String() string { +func (cfg KvCacherCfg) String() string { return fmt.Sprintf("{key: %s, timeout: %s, period: %s}", cfg.Key, cfg.Timeout, cfg.Period) } diff --git a/server/core/registry/store/store.go b/server/core/registry/store/store.go index baf0139ff..60256cfda 100644 --- a/server/core/registry/store/store.go +++ b/server/core/registry/store/store.go @@ -104,21 +104,14 @@ func (lat *LeaseAsyncTask) Do(ctx context.Context) error { lat.TTL, lat.err = registry.GetRegisterCenter().LeaseRenew(ctx, lat.LeaseID) lat.EndTime = time.Now() if lat.err != nil { - util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), - lat.StartTime.Format("15:04:05.000"), - time.Now().Sub(lat.StartTime), - lat.Key()) - } else { - util.Logger().Debugf("renew lease %d(rev: %s, start: %s(cost %s)), key %s", + util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), lat.StartTime.Format("15:04:05.000"), - time.Now().Sub(lat.StartTime),lat.CreateTime.Format("15:04:05.000"), - lat.StartTime.Format("15:04:05.000"), time.Now().Sub(lat.StartTime), lat.Key()) - return lat.err -} + return lat.err + } if lat.EndTime.Sub(lat.StartTime) > time.Second { util.Logger().Warnf(nil, "renew lease %d(rev: %s, start: %s(cost %s)), key %s", From b2d2672c2effb4e6b2403c6f47db3cbbac4f46ee Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 17 Oct 2017 16:49:45 +0800 Subject: [PATCH 13/25] Optimize log print. --- pkg/lager/core/logger.go | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/pkg/lager/core/logger.go b/pkg/lager/core/logger.go index d447ac86b..00ccc02e3 100644 --- a/pkg/lager/core/logger.go +++ b/pkg/lager/core/logger.go @@ -279,23 +279,13 @@ func addExtLogInfo(logf *LogFormat) { } if ok { - idx := strings.LastIndex(file, "src") + idx := strings.LastIndex(file, "/") switch { case idx >= 0: - logf.File = file[idx+4:] + logf.File = file[idx+1:] default: logf.File = file } - packages := strings.Split(logf.File, "/") - if len(packages) > 0 { - short := "" - for _, p := range packages { - short += p[0:1] + "/" - } - short += packages[len(packages)-1] - logf.File = short - } - logf.LineNo = line if f := runtime.FuncForPC(pc); f != nil { logf.Method = formatFuncName(f.Name()) From 91b55d1ef481e9573873c7d6a0dbf263d42c81b9 Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 17 Oct 2017 20:23:53 +0800 Subject: [PATCH 14/25] Optimize router and interceptor. --- pkg/util/log_test.go | 2 +- pkg/util/util.go | 22 +++++++++ server/common/header.go | 69 ----------------------------- server/interceptor/access/access.go | 3 +- server/interceptor/domain/domain.go | 48 +++++++++++++++----- server/rest/controller/v3/v3.go | 16 ++++--- 6 files changed, 70 insertions(+), 90 deletions(-) delete mode 100644 server/common/header.go diff --git a/pkg/util/log_test.go b/pkg/util/log_test.go index 80db5dc00..e0f96456b 100644 --- a/pkg/util/log_test.go +++ b/pkg/util/log_test.go @@ -47,7 +47,7 @@ func TestLogger(t *testing.T) { fmt.Println("should be the same logger") t.FailNow() } - CustomLogger("github.com/ServiceComb/service-center/util", "testPkgPath") + CustomLogger("github.com/ServiceComb/service-center/pkg/util", "testPkgPath") l = Logger() if l == LOGGER || l == nil { fmt.Println("should create a new instance for 'util'") diff --git a/pkg/util/util.go b/pkg/util/util.go index 2c8086e60..6cda7fcee 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -17,8 +17,10 @@ import ( "bytes" "encoding/gob" "golang.org/x/net/context" + "net/http" "net/url" "os" + "strings" "time" "unsafe" ) @@ -213,3 +215,23 @@ func ParseEndpoint(ep string) (string, error) { } return u.Hostname(), nil } + +func GetRealIP(r *http.Request) string { + addrs := strings.Split(r.RemoteAddr, ":") + if len(addrs) > 0 { + return addrs[0] + } + return "" +} + +func addIPToContext(r *http.Request) { + terminalIP := GetRealIP(r) + ctx := r.Context() + ctx = NewContext(ctx, "x-remote-ip", terminalIP) + request := r.WithContext(ctx) + *r = *request +} + +func InitContext(r *http.Request) { + addIPToContext(r) +} diff --git a/server/common/header.go b/server/common/header.go deleted file mode 100644 index 2513577c1..000000000 --- a/server/common/header.go +++ /dev/null @@ -1,69 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package common - -import ( - "errors" - "fmt" - "github.com/ServiceComb/service-center/pkg/util" - "github.com/ServiceComb/service-center/server/core" - "net/http" - "strings" -) - -const ( - DEFAULT_PROJECT = "default" -) - -var NO_CHEACK_URL = map[string]bool{"/version": true, "/health": true} - -func GetTenantProjectFromHeader(r *http.Request) (string, string, error) { - var domain, project string - domain = r.Header.Get("X-Tenant-Name") - if len(domain) == 0 { - domain = r.Header.Get("x-domain-name") - if len(domain) == 0 { - if _, ok := NO_CHEACK_URL[r.RequestURI]; ok { - return core.REGISTRY_TENANT, core.REGISTRY_PROJECT, nil - } - util.Logger().Errorf(nil, "%s does not contain domain.", r.RequestURI) - return "", "", errors.New(fmt.Sprintf("Header does not contain tenant.Invalid Request URI %s", r.RequestURI)) - } - } - project = r.Header.Get("X-Project-Name") - if len(project) == 0 { - project = DEFAULT_PROJECT - } - return domain, project, nil -} - -func GetRealIP(r *http.Request) string { - addrs := strings.Split(r.RemoteAddr, ":") - if len(addrs) > 0 { - return addrs[0] - } - return "" -} - -func addIPToContext(r *http.Request) { - terminalIP := GetRealIP(r) - ctx := r.Context() - ctx = util.NewContext(ctx, "x-remote-ip", terminalIP) - request := r.WithContext(ctx) - *r = *request -} - -func InitContext(r *http.Request) { - addIPToContext(r) -} diff --git a/server/interceptor/access/access.go b/server/interceptor/access/access.go index 0edd4c3b1..584656a35 100644 --- a/server/interceptor/access/access.go +++ b/server/interceptor/access/access.go @@ -17,7 +17,6 @@ import ( "fmt" "github.com/ServiceComb/service-center/pkg/util" "github.com/ServiceComb/service-center/pkg/validate" - "github.com/ServiceComb/service-center/server/common" "github.com/ServiceComb/service-center/server/core" "net/http" ) @@ -32,7 +31,7 @@ func addCommonResponseHeaders(w http.ResponseWriter) { } func Intercept(w http.ResponseWriter, r *http.Request) error { - common.InitContext(r) + util.InitContext(r) addCommonResponseHeaders(w) diff --git a/server/interceptor/domain/domain.go b/server/interceptor/domain/domain.go index 1a935b602..d14996f33 100644 --- a/server/interceptor/domain/domain.go +++ b/server/interceptor/domain/domain.go @@ -16,33 +16,31 @@ package domain import ( "errors" "github.com/ServiceComb/service-center/pkg/util" - "github.com/ServiceComb/service-center/server/common" + "github.com/ServiceComb/service-center/server/core" "net/http" ) const ( - TIME_FORMAT = "2006-01-02T15:04:05Z07:00" + DEFAULT_PROJECT = "default" ) -func Intercept(w http.ResponseWriter, r *http.Request) error { - util.Logger().Debugf("Intercept Domain") +var NO_CHECK_URL = map[string]bool{"/version": true, "/health": true} +func Intercept(w http.ResponseWriter, r *http.Request) error { request := r tenant := "" project := "" - var err error ctx := r.Context() - tenant, project, err = common.GetTenantProjectFromHeader(r) - if err != nil { + tenant, project = GetTenantProjectFromHeader(r) + if len(tenant) == 0 || len(project) == 0 { + err := errors.New("Header does not contain domain.") + + util.Logger().Errorf(err, "Invalid Request URI %s", r.RequestURI) + w.WriteHeader(http.StatusBadRequest) w.Write(util.StringToBytesWithNoCopy(err.Error())) return err } - if len(tenant) == 0 || len(project) == 0 { - w.WriteHeader(http.StatusBadRequest) - w.Write(util.StringToBytesWithNoCopy("Domain or project from token is empty.")) - return errors.New("Domain or project from token is empty.") - } ctx = util.NewContext(ctx, "tenant", tenant) ctx = util.NewContext(ctx, "project", project) @@ -50,3 +48,29 @@ func Intercept(w http.ResponseWriter, r *http.Request) error { *r = *request return nil } + +func IsSkip(uri string) bool { + if b, ok := NO_CHECK_URL[uri]; ok { + return b + } + return false +} + +func GetTenantProjectFromHeader(r *http.Request) (string, string) { + var domain, project string + domain = r.Header.Get("X-Tenant-Name") + if len(domain) == 0 { + domain = r.Header.Get("x-domain-name") + if len(domain) == 0 { + if IsSkip(r.RequestURI) { + return core.REGISTRY_TENANT, core.REGISTRY_PROJECT + } + return "", "" + } + } + project = r.Header.Get("X-Project-Name") + if len(project) == 0 { + project = DEFAULT_PROJECT + } + return domain, project +} diff --git a/server/rest/controller/v3/v3.go b/server/rest/controller/v3/v3.go index be6a6400b..28ceff24d 100644 --- a/server/rest/controller/v3/v3.go +++ b/server/rest/controller/v3/v3.go @@ -19,6 +19,14 @@ import ( "net/http" ) +var router http.Handler + +func init() { + util.Logger().Debugf("init router") + router = roa.InitROAServerHandler() + initRouter() +} + func initRouter() { roa.RegisterServent(&MainService{}) roa.RegisterServent(&MicroServiceService{}) @@ -30,10 +38,6 @@ func initRouter() { } //GetRouter return the router fo REST service -func GetRouter() (router http.Handler) { - util.Logger().Debugf("init router") - router = roa.InitROAServerHandler() - initRouter() - - return +func GetRouter() http.Handler { + return router } From 6c937ad540cc7d2ea9e921e0da97d01fabaab26b Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 17 Oct 2017 21:06:12 +0800 Subject: [PATCH 15/25] Add request metrics. --- pkg/util/util.go | 24 +++++++++++++++++++++--- server/bootstrap/bootstrap.go | 2 ++ server/interceptor/access/access.go | 5 +++++ server/service/instances.go | 4 +--- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/pkg/util/util.go b/pkg/util/util.go index 6cda7fcee..61368b01a 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -126,9 +126,11 @@ func ParseProject(ctx context.Context) string { } func GetIPFromContext(ctx context.Context) string { - remoteIp := "" - remoteIp, _ = ctx.Value("x-remote-ip").(string) - return remoteIp + v, ok := FromContext(ctx, "x-remote-ip").(string) + if !ok { + return "" + } + return v } func DeepCopy(dst, src interface{}) error { @@ -232,6 +234,22 @@ func addIPToContext(r *http.Request) { *r = *request } +func addStartTimestamp(r *http.Request) { + ctx := r.Context() + ctx = NewContext(ctx, "x-start-timestamp", time.Now()) + request := r.WithContext(ctx) + *r = *request +} + func InitContext(r *http.Request) { addIPToContext(r) + addStartTimestamp(r) +} + +func GetStartTimeFromContext(ctx context.Context) time.Time { + v, ok := FromContext(ctx, "x-start-timestamp").(time.Time) + if !ok { + return time.Now() + } + return v } diff --git a/server/bootstrap/bootstrap.go b/server/bootstrap/bootstrap.go index 05cac656c..5a17e58ad 100644 --- a/server/bootstrap/bootstrap.go +++ b/server/bootstrap/bootstrap.go @@ -39,4 +39,6 @@ func init() { interceptor.InterceptFunc(interceptor.ACCESS_PHASE, domain.Intercept) interceptor.InterceptFunc(interceptor.CONTENT_PHASE, maxbody.Intercept) + + interceptor.InterceptFunc(interceptor.LOG_PHASE, access.Log) } diff --git a/server/interceptor/access/access.go b/server/interceptor/access/access.go index 584656a35..a6ffb8c9b 100644 --- a/server/interceptor/access/access.go +++ b/server/interceptor/access/access.go @@ -43,3 +43,8 @@ func Intercept(w http.ResponseWriter, r *http.Request) error { } return nil } + +func Log(w http.ResponseWriter, r *http.Request) error { + util.LogNilOrWarnf(util.GetStartTimeFromContext(r.Context()), "%s %s", r.Method, r.RequestURI) + return nil +} diff --git a/server/service/instances.go b/server/service/instances.go index f07e08eea..1c9d265cd 100644 --- a/server/service/instances.go +++ b/server/service/instances.go @@ -307,7 +307,6 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Request format invalid."), }, nil } - startTime := time.Now() remoteIP := util.GetIPFromContext(ctx) tenant := util.ParseTenantProject(ctx) instanceFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId}, "/") @@ -325,8 +324,7 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Service instance does not exist."), }, nil } - util.Logger().Infof("heartbeat(cost %s) successful: %s renew ttl to %d. operator: %s", - time.Since(startTime), instanceFlag, ttl, remoteIP) + util.Logger().Infof("heartbeat successful: %s renew ttl to %d. operator: %s", instanceFlag, ttl, remoteIP) return &pb.HeartbeatResponse{ Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service instance heartbeat successfully."), }, nil From a1bcfa76e83edd217118b5508acc5a877381dd3c Mon Sep 17 00:00:00 2001 From: little-cui Date: Wed, 18 Oct 2017 16:20:11 +0800 Subject: [PATCH 16/25] Add /metrics API. --- server/rest/handler.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/rest/handler.go b/server/rest/handler.go index 31dff9db3..22d51b8de 100644 --- a/server/rest/handler.go +++ b/server/rest/handler.go @@ -3,6 +3,7 @@ package rest import ( "github.com/ServiceComb/service-center/server/interceptor" "github.com/ServiceComb/service-center/server/rest/controller/v3" + "github.com/prometheus/client_golang/prometheus/promhttp" "net/http" ) @@ -11,7 +12,11 @@ var router http.Handler func init() { router = v3.GetRouter() + // api http.Handle("/", DefaultServerHandler()) + + // prometheus metrics + http.Handle("/metrics", promhttp.Handler()) } type ServerHandler struct { From d5a1f2af7ef71a1d5971573970a4959bfc9d3455 Mon Sep 17 00:00:00 2001 From: little-cui Date: Sun, 24 Sep 2017 16:23:30 +0800 Subject: [PATCH 17/25] Code restructure. --- pkg/lager/core/chug/chug_suite_test.go | 26 -------------------------- pkg/lager/core/lager_suite_test.go | 26 -------------------------- 2 files changed, 52 deletions(-) delete mode 100644 pkg/lager/core/chug/chug_suite_test.go delete mode 100644 pkg/lager/core/lager_suite_test.go diff --git a/pkg/lager/core/chug/chug_suite_test.go b/pkg/lager/core/chug/chug_suite_test.go deleted file mode 100644 index 7a6fa234d..000000000 --- a/pkg/lager/core/chug/chug_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package chug_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestChug(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Chug Suite") -} diff --git a/pkg/lager/core/lager_suite_test.go b/pkg/lager/core/lager_suite_test.go deleted file mode 100644 index 43218fb90..000000000 --- a/pkg/lager/core/lager_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package core_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestLager(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Lager Suite") -} From ea5ad53dc313867f6b048879a021cd87ff0fe90b Mon Sep 17 00:00:00 2001 From: little-cui Date: Sun, 24 Sep 2017 16:23:30 +0800 Subject: [PATCH 18/25] Code restructure. --- .../ginkgoreporter_suite_test.go | 26 ------------------- .../ratelimiter/ratelimiter_suite_test.go | 26 ------------------- 2 files changed, 52 deletions(-) delete mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go delete mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go deleted file mode 100644 index 7439eef3b..000000000 --- a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ginkgoreporter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGinkgoReporter(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "GinkgoReporter Suite") -} diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go deleted file mode 100644 index 0cbc1e9ee..000000000 --- a/server/interceptor/ratelimiter/ratelimiter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ratelimiter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestNet(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "RateLimiter Suite") -} From f1c796e506e6280aaee1b4b9d20b8b50d4495220 Mon Sep 17 00:00:00 2001 From: little-cui Date: Mon, 16 Oct 2017 23:50:54 +0800 Subject: [PATCH 19/25] Optimize heartbeat log print. --- pkg/lager/core/chug/chug_suite_test.go | 26 +++++++++++++++++++ .../ginkgoreporter_suite_test.go | 26 +++++++++++++++++++ pkg/lager/core/lager_suite_test.go | 26 +++++++++++++++++++ .../ratelimiter/ratelimiter_suite_test.go | 26 +++++++++++++++++++ server/service/instances.go | 4 ++- 5 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 pkg/lager/core/chug/chug_suite_test.go create mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go create mode 100644 pkg/lager/core/lager_suite_test.go create mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/chug/chug_suite_test.go b/pkg/lager/core/chug/chug_suite_test.go new file mode 100644 index 000000000..7a6fa234d --- /dev/null +++ b/pkg/lager/core/chug/chug_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package chug_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestChug(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Chug Suite") +} diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go new file mode 100644 index 000000000..7439eef3b --- /dev/null +++ b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ginkgoreporter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestGinkgoReporter(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "GinkgoReporter Suite") +} diff --git a/pkg/lager/core/lager_suite_test.go b/pkg/lager/core/lager_suite_test.go new file mode 100644 index 000000000..43218fb90 --- /dev/null +++ b/pkg/lager/core/lager_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package core_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestLager(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Lager Suite") +} diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go new file mode 100644 index 000000000..0cbc1e9ee --- /dev/null +++ b/server/interceptor/ratelimiter/ratelimiter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ratelimiter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestNet(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "RateLimiter Suite") +} diff --git a/server/service/instances.go b/server/service/instances.go index 1c9d265cd..f07e08eea 100644 --- a/server/service/instances.go +++ b/server/service/instances.go @@ -307,6 +307,7 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Request format invalid."), }, nil } + startTime := time.Now() remoteIP := util.GetIPFromContext(ctx) tenant := util.ParseTenantProject(ctx) instanceFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId}, "/") @@ -324,7 +325,8 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Service instance does not exist."), }, nil } - util.Logger().Infof("heartbeat successful: %s renew ttl to %d. operator: %s", instanceFlag, ttl, remoteIP) + util.Logger().Infof("heartbeat(cost %s) successful: %s renew ttl to %d. operator: %s", + time.Since(startTime), instanceFlag, ttl, remoteIP) return &pb.HeartbeatResponse{ Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service instance heartbeat successfully."), }, nil From 3b08615c5703ef6923786344bee93d9edc4e20f0 Mon Sep 17 00:00:00 2001 From: little-cui Date: Sun, 24 Sep 2017 16:23:30 +0800 Subject: [PATCH 20/25] Code restructure. --- .../ginkgoreporter_suite_test.go | 26 ------------------- .../ratelimiter/ratelimiter_suite_test.go | 26 ------------------- 2 files changed, 52 deletions(-) delete mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go delete mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go deleted file mode 100644 index 7439eef3b..000000000 --- a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ginkgoreporter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGinkgoReporter(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "GinkgoReporter Suite") -} diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go deleted file mode 100644 index 0cbc1e9ee..000000000 --- a/server/interceptor/ratelimiter/ratelimiter_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -//Copyright 2017 Huawei Technologies Co., Ltd -// -//Licensed under the Apache License, Version 2.0 (the "License"); -//you may not use this file except in compliance with the License. -//You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -//Unless required by applicable law or agreed to in writing, software -//distributed under the License is distributed on an "AS IS" BASIS, -//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -//See the License for the specific language governing permissions and -//limitations under the License. -package ratelimiter_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestNet(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "RateLimiter Suite") -} From 88060516ac4c6fe98ca2f45da6ca3cde18aced10 Mon Sep 17 00:00:00 2001 From: little-cui Date: Mon, 16 Oct 2017 23:50:54 +0800 Subject: [PATCH 21/25] Optimize heartbeat log print. --- .../ginkgoreporter_suite_test.go | 26 +++++++++++++++++++ server/core/registry/store/store.go | 13 +++++++--- .../ratelimiter/ratelimiter_suite_test.go | 26 +++++++++++++++++++ 3 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go create mode 100644 server/interceptor/ratelimiter/ratelimiter_suite_test.go diff --git a/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go new file mode 100644 index 000000000..7439eef3b --- /dev/null +++ b/pkg/lager/core/ginkgoreporter/ginkgoreporter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ginkgoreporter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestGinkgoReporter(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "GinkgoReporter Suite") +} diff --git a/server/core/registry/store/store.go b/server/core/registry/store/store.go index 60256cfda..baf0139ff 100644 --- a/server/core/registry/store/store.go +++ b/server/core/registry/store/store.go @@ -104,14 +104,21 @@ func (lat *LeaseAsyncTask) Do(ctx context.Context) error { lat.TTL, lat.err = registry.GetRegisterCenter().LeaseRenew(ctx, lat.LeaseID) lat.EndTime = time.Now() if lat.err != nil { - util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", + util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), + lat.StartTime.Format("15:04:05.000"), + time.Now().Sub(lat.StartTime), + lat.Key()) + } else { + util.Logger().Debugf("renew lease %d(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), lat.StartTime.Format("15:04:05.000"), + time.Now().Sub(lat.StartTime),lat.CreateTime.Format("15:04:05.000"), + lat.StartTime.Format("15:04:05.000"), time.Now().Sub(lat.StartTime), lat.Key()) - return lat.err - } + return lat.err +} if lat.EndTime.Sub(lat.StartTime) > time.Second { util.Logger().Warnf(nil, "renew lease %d(rev: %s, start: %s(cost %s)), key %s", diff --git a/server/interceptor/ratelimiter/ratelimiter_suite_test.go b/server/interceptor/ratelimiter/ratelimiter_suite_test.go new file mode 100644 index 000000000..0cbc1e9ee --- /dev/null +++ b/server/interceptor/ratelimiter/ratelimiter_suite_test.go @@ -0,0 +1,26 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package ratelimiter_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestNet(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "RateLimiter Suite") +} From ca65b3a2747ec2dabebba97bf6e5783e40a0dcdc Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 17 Oct 2017 00:16:46 +0800 Subject: [PATCH 22/25] Optimize log print. --- server/core/registry/store/store.go | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/server/core/registry/store/store.go b/server/core/registry/store/store.go index baf0139ff..60256cfda 100644 --- a/server/core/registry/store/store.go +++ b/server/core/registry/store/store.go @@ -104,21 +104,14 @@ func (lat *LeaseAsyncTask) Do(ctx context.Context) error { lat.TTL, lat.err = registry.GetRegisterCenter().LeaseRenew(ctx, lat.LeaseID) lat.EndTime = time.Now() if lat.err != nil { - util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), - lat.StartTime.Format("15:04:05.000"), - time.Now().Sub(lat.StartTime), - lat.Key()) - } else { - util.Logger().Debugf("renew lease %d(rev: %s, start: %s(cost %s)), key %s", + util.Logger().Errorf(lat.err, "renew lease %d failed(rev: %s, start: %s(cost %s)), key %s", lat.LeaseID, lat.CreateTime.Format("15:04:05.000"), lat.StartTime.Format("15:04:05.000"), - time.Now().Sub(lat.StartTime),lat.CreateTime.Format("15:04:05.000"), - lat.StartTime.Format("15:04:05.000"), time.Now().Sub(lat.StartTime), lat.Key()) - return lat.err -} + return lat.err + } if lat.EndTime.Sub(lat.StartTime) > time.Second { util.Logger().Warnf(nil, "renew lease %d(rev: %s, start: %s(cost %s)), key %s", From c89c9306077369de3ffab6359f23b11d5e09c00d Mon Sep 17 00:00:00 2001 From: little-cui Date: Tue, 17 Oct 2017 21:06:12 +0800 Subject: [PATCH 23/25] Add request metrics. --- server/service/instances.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/service/instances.go b/server/service/instances.go index f07e08eea..1c9d265cd 100644 --- a/server/service/instances.go +++ b/server/service/instances.go @@ -307,7 +307,6 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Request format invalid."), }, nil } - startTime := time.Now() remoteIP := util.GetIPFromContext(ctx) tenant := util.ParseTenantProject(ctx) instanceFlag := util.StringJoin([]string{in.ServiceId, in.InstanceId}, "/") @@ -325,8 +324,7 @@ func (s *InstanceController) Heartbeat(ctx context.Context, in *pb.HeartbeatRequ Response: pb.CreateResponse(pb.Response_FAIL, "Service instance does not exist."), }, nil } - util.Logger().Infof("heartbeat(cost %s) successful: %s renew ttl to %d. operator: %s", - time.Since(startTime), instanceFlag, ttl, remoteIP) + util.Logger().Infof("heartbeat successful: %s renew ttl to %d. operator: %s", instanceFlag, ttl, remoteIP) return &pb.HeartbeatResponse{ Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service instance heartbeat successfully."), }, nil From a841bd9720b2d0dd42fa5a9f00fae4995574fcda Mon Sep 17 00:00:00 2001 From: little-cui Date: Wed, 18 Oct 2017 16:20:11 +0800 Subject: [PATCH 24/25] Add /metrics API. --- server/rest/handler.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/rest/handler.go b/server/rest/handler.go index 31dff9db3..22d51b8de 100644 --- a/server/rest/handler.go +++ b/server/rest/handler.go @@ -3,6 +3,7 @@ package rest import ( "github.com/ServiceComb/service-center/server/interceptor" "github.com/ServiceComb/service-center/server/rest/controller/v3" + "github.com/prometheus/client_golang/prometheus/promhttp" "net/http" ) @@ -11,7 +12,11 @@ var router http.Handler func init() { router = v3.GetRouter() + // api http.Handle("/", DefaultServerHandler()) + + // prometheus metrics + http.Handle("/metrics", promhttp.Handler()) } type ServerHandler struct { From 70418c78695d5157b3530791332a375dc252aac5 Mon Sep 17 00:00:00 2001 From: little-cui Date: Wed, 18 Oct 2017 23:43:34 +0800 Subject: [PATCH 25/25] Optimize versionrule.go --- pkg/util/sys.go | 13 +++++++ pkg/util/util.go | 20 ++++++++++ pkg/util/util_test.go | 50 +++++++++++++++++++++++++ server/service/util/versionrule.go | 34 +++++++++-------- server/service/util/versionrule_test.go | 22 +++++++++++ 5 files changed, 124 insertions(+), 15 deletions(-) create mode 100644 pkg/util/util_test.go diff --git a/pkg/util/sys.go b/pkg/util/sys.go index 836189594..bc8fde207 100644 --- a/pkg/util/sys.go +++ b/pkg/util/sys.go @@ -16,8 +16,11 @@ package util import ( "net" "os" + "unsafe" ) +const INT_SIZE int = int(unsafe.Sizeof(0)) + func GetLocalHostname() string { hostName, _ := os.Hostname() return hostName @@ -38,3 +41,13 @@ func GetLocalIP() string { } return "" } + +func IsBigEndian() bool { + return !IsLittleEndian() +} + +func IsLittleEndian() bool { + i := 0x1 + bs := (*[INT_SIZE]byte)(unsafe.Pointer(&i)) + return bs[0] == 0 +} diff --git a/pkg/util/util.go b/pkg/util/util.go index 61368b01a..42d0b4f01 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -253,3 +253,23 @@ func GetStartTimeFromContext(ctx context.Context) time.Time { } return v } + +func BytesToInt32(bs []byte) (in int32) { + l := len(bs) + if l > 4 || l == 0 { + return 0 + } + + pi := (*[4]byte)(unsafe.Pointer(&in)) + if IsBigEndian() { + for i := range bs { + pi[i] = bs[l-i-1] + } + return + } + + for i := range bs { + pi[3-i] = bs[l-i-1] + } + return +} diff --git a/pkg/util/util_test.go b/pkg/util/util_test.go new file mode 100644 index 000000000..f196959bf --- /dev/null +++ b/pkg/util/util_test.go @@ -0,0 +1,50 @@ +//Copyright 2017 Huawei Technologies Co., Ltd +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. +package util + +import ( + "testing" +) + +func TestBytesToInt32(t *testing.T) { + bs := []byte{0, 0, 0, 1} + i := BytesToInt32(bs) + if i != 1 { + t.FailNow() + } + + bs = []byte{1, 0, 0, 0} + i = BytesToInt32(bs) + if i != 1<<(3*8) { + t.FailNow() + } + + bs = []byte{0, 0, 0, 0, 1} + i = BytesToInt32(bs) + if i != 0 { + t.FailNow() + } + + bs = []byte{1} + i = BytesToInt32(bs) + if i != 1 { + t.FailNow() + } + + bs = []byte{1, 0} + i = BytesToInt32(bs) + if i != 1<<8 { + t.FailNow() + } +} diff --git a/server/service/util/versionrule.go b/server/service/util/versionrule.go index 990a1cb29..57886bd92 100644 --- a/server/service/util/versionrule.go +++ b/server/service/util/versionrule.go @@ -14,7 +14,6 @@ package util import ( - "bytes" "github.com/ServiceComb/service-center/pkg/util" "github.com/coreos/etcd/mvcc/mvccpb" "sort" @@ -27,13 +26,14 @@ type VersionRule func(sorted []string, kvs map[string]string, start, end string) func (vr VersionRule) Match(kvs []*mvccpb.KeyValue, ops ...string) []string { sorter := &serviceKeySorter{ sortArr: make([]string, len(kvs)), - kvs: make(map[string]string), + kvs: make(map[string]string, len(kvs)), cmp: Larger, } for i, kv := range kvs { key := util.BytesToStringWithNoCopy(kv.Key) - sorter.sortArr[i] = key[strings.LastIndex(key, "/")+1:] - sorter.kvs[sorter.sortArr[i]] = util.BytesToStringWithNoCopy(kv.Value) + ver := key[strings.LastIndex(key, "/")+1:] + sorter.sortArr[i] = ver + sorter.kvs[ver] = util.BytesToStringWithNoCopy(kv.Value) } sort.Sort(sorter) @@ -66,23 +66,27 @@ func (sks *serviceKeySorter) Less(i, j int) bool { return sks.cmp(sks.sortArr[i], sks.sortArr[j]) } -func stringToBytesVersion(versionStr string) []byte { - verSet := strings.Split(versionStr, ".") - verBytes := make([]byte, len(verSet)) - for i, v := range verSet { - integer, err := strconv.ParseInt(v, 10, 8) - if err != nil { - return []byte{} +func versionToInt(versionStr string) (ret int32) { + verBytes := [4]byte{} + idx := 0 + for i := 0; i < 4 && idx < len(versionStr); i++ { + f := strings.IndexRune(versionStr[idx:], '.') + if f < 0 { + f = len(versionStr) - idx + } + integer, err := strconv.ParseInt(versionStr[idx:idx+f], 10, 8) + if err != nil || integer < 0 { + return 0 } verBytes[i] = byte(integer) + idx += f + 1 } - return verBytes[:] + ret = util.BytesToInt32(verBytes[:]) + return } func Larger(start, end string) bool { - startVerBytes := stringToBytesVersion(start) - endVerBytes := stringToBytesVersion(end) - return bytes.Compare(startVerBytes, endVerBytes) > 0 + return versionToInt(start) > versionToInt(end) } func Latest(sorted []string, kvs map[string]string, start, end string) []string { diff --git a/server/service/util/versionrule_test.go b/server/service/util/versionrule_test.go index 015f6686e..78c89158d 100644 --- a/server/service/util/versionrule_test.go +++ b/server/service/util/versionrule_test.go @@ -18,7 +18,10 @@ import ( "github.com/coreos/etcd/mvcc/mvccpb" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + "math" + "math/rand" "sort" + "testing" ) var _ = Describe("Version Rule sorter", func() { @@ -220,3 +223,22 @@ var _ = Describe("Version Rule sorter", func() { }) }) }) + +func BenchmarkVersionRule_Match(b *testing.B) { + var kvs = []*mvccpb.KeyValue{} + for i := 1; i <= b.N; i++ { + x := rand.Intn(math.MaxInt8) + y := rand.Intn(math.MaxInt8) + z := rand.Intn(math.MaxInt8) + kvs = append(kvs, &mvccpb.KeyValue{ + Key: []byte(fmt.Sprintf("/service/ver/%d.%d.%d", x, y, z)), + Value: []byte(fmt.Sprintf("%d.%d.%d", x, y, z)), + }) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + VersionRule(Latest).Match(kvs) + } + b.ReportAllocs() +}