This is an automated email from the ASF dual-hosted git repository.
asifdxtreme pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/incubator-servicecomb-service-center.git
The following commit(s) were added to refs/heads/master by this push:
new 7f97881 SCB-892 Output plugins configs in version api (#436)
7f97881 is described below
commit 7f978813003fcd410ada949dbc85094f4c00fde8
Author: little-cui <[email protected]>
AuthorDate: Wed Sep 5 13:17:01 2018 +0800
SCB-892 Output plugins configs in version api (#436)
---
pkg/util/map.go | 76 ++++++++++++++++
pkg/util/map_test.go | 86 ++++++++++++++++++
server/admin/model/dump.go | 2 +-
server/admin/service.go | 2 +-
server/core/config.go | 4 +-
server/core/microservice.go | 2 +-
server/core/proto/common.go | 93 ++++++++++++++++++++
server/core/proto/services.go | 127 +--------------------------
server/core/proto/types.go | 72 +++++++++++++++
server/govern/govern_suite_test.go | 2 +-
server/govern/service.go | 2 +-
server/plugin/infra/quota/buildin/buildin.go | 1 +
server/plugin/infra/quota/buildin/common.go | 10 +++
server/plugin/plugin.go | 28 +++++-
server/plugin/plugin_test.go | 9 +-
server/server.go | 4 +
server/service/microservice.go | 2 +-
server/service/service.go | 4 +-
server/service/service_suite_test.go | 2 +-
19 files changed, 388 insertions(+), 140 deletions(-)
diff --git a/pkg/util/map.go b/pkg/util/map.go
new file mode 100644
index 0000000..f5d8597
--- /dev/null
+++ b/pkg/util/map.go
@@ -0,0 +1,76 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 (
+ "fmt"
+ "reflect"
+ "strconv"
+)
+
+type JSONObject map[string]interface{}
+
+func (c JSONObject) Set(k interface{}, v interface{}) JSONObject {
+ c[toString(k)] = v
+ return c
+}
+
+func (c JSONObject) Bool(k interface{}, def bool) bool {
+ if v, ok := c[toString(k)].(bool); ok {
+ return v
+ }
+ return def
+}
+
+func (c JSONObject) Int(k interface{}, def int) int {
+ if v, ok := c[toString(k)].(int); ok {
+ return v
+ }
+ return def
+}
+
+func (c JSONObject) String(k interface{}, def string) string {
+ if v, ok := c[toString(k)].(string); ok {
+ return v
+ }
+ return def
+}
+
+func (c JSONObject) Object(k interface{}) JSONObject {
+ key := toString(k)
+ if v, ok := c[key].(JSONObject); ok {
+ return v
+ }
+ v := make(JSONObject)
+ c[key] = v
+ return v
+}
+
+func toString(v interface{}) string {
+ r := reflect.ValueOf(v)
+ switch r.Kind() {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,
reflect.Int64:
+ return strconv.FormatInt(r.Int(), 10)
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,
reflect.Uint64:
+ return strconv.FormatUint(r.Uint(), 10)
+ case reflect.Float32, reflect.Float64:
+ return strconv.FormatFloat(r.Float(), 'f', -1, 64)
+ case reflect.String:
+ return r.String()
+ default:
+ return fmt.Sprintf("%#v", v)
+ }
+}
diff --git a/pkg/util/map_test.go b/pkg/util/map_test.go
new file mode 100644
index 0000000..2e4affe
--- /dev/null
+++ b/pkg/util/map_test.go
@@ -0,0 +1,86 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 (
+ "encoding/json"
+ "fmt"
+ "testing"
+)
+
+func TestNewServerInformation(t *testing.T) {
+ var c JSONObject
+ c = make(JSONObject)
+ if !c.Bool("a", true) {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if 1 != c.Int("a", 1) {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if "a" != c.String("a", "a") {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if nil == c.Object("a") {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+
+ c.Set("a", true)
+ c.Set("b", 1)
+ c.Set("c", "a")
+ c.Object("d").Set("a", false)
+ if !c.Bool("a", true) {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if 1 != c.Int("b", 1) {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if "a" != c.String("c", "a") {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if c.Object("d").Bool("a", true) {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+
+ if "a" != c.String("a", "a") {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if !c.Bool("b", true) {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if 1 != c.Int("c", 1) {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if "a" != c.String("d", "a") {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+ if nil == c.Object("a") {
+ t.Fatalf("TestNewServerInformation failed")
+ }
+
+ c.Set(1, 1)
+ c.Set(uint(2), 2)
+ c.Set(1.2, 1.2)
+ c.Set(1+1i, 0)
+ c.Set(nil, nil)
+ c.Set(make(map[string]string), "")
+ c.Set(make([]string, 1), "")
+ type a struct{}
+ c.Set(a{}, "")
+ c.Set(&a{}, "")
+
+ b, _ := json.Marshal(c)
+ fmt.Println(string(b))
+}
diff --git a/server/admin/model/dump.go b/server/admin/model/dump.go
index 3354d7c..60ac6ce 100644
--- a/server/admin/model/dump.go
+++ b/server/admin/model/dump.go
@@ -183,7 +183,7 @@ type DumpRequest struct {
type DumpResponse struct {
Response *pb.Response `json:"response,omitempty"`
Info *version.VersionSet `json:"info,omitempty"`
- Config map[string]string `json:"config,omitempty"`
+ AppConfig map[string]string `json:"appConf,omitempty"`
Environments map[string]string `json:"environments,omitempty"`
Cache *Cache `json:"cache,omitempty"`
}
diff --git a/server/admin/service.go b/server/admin/service.go
index 91689b2..b22e05b 100644
--- a/server/admin/service.go
+++ b/server/admin/service.go
@@ -69,7 +69,7 @@ func (service *AdminService) Dump(ctx context.Context, in
*model.DumpRequest) (*
return &model.DumpResponse{
Response: pb.CreateResponse(pb.Response_SUCCESS, "Admin
dump successfully"),
Info: version.Ver(),
- Config: configs,
+ AppConfig: configs,
Environments: environments,
Cache: &cache,
}, nil
diff --git a/server/core/config.go b/server/core/config.go
index 33876e7..587396b 100644
--- a/server/core/config.go
+++ b/server/core/config.go
@@ -19,6 +19,7 @@ package core
import (
"github.com/apache/incubator-servicecomb-service-center/pkg/log"
"github.com/apache/incubator-servicecomb-service-center/pkg/plugin"
+ "github.com/apache/incubator-servicecomb-service-center/pkg/util"
pb
"github.com/apache/incubator-servicecomb-service-center/server/core/proto"
"github.com/apache/incubator-servicecomb-service-center/version"
"github.com/astaxie/beego"
@@ -30,7 +31,7 @@ const (
INIT_VERSION = "0"
)
-var ServerInfo = new(pb.ServerInformation)
+var ServerInfo = pb.NewServerInformation()
func Configure() {
setCPUs()
@@ -87,6 +88,7 @@ func newInfo() pb.ServerInformation {
LogSys: beego.AppConfig.DefaultBool("log_sys",
false),
PluginsDir:
beego.AppConfig.DefaultString("plugins_dir", "./plugins"),
+ Plugins: make(util.JSONObject),
EnablePProf: beego.AppConfig.DefaultInt("enable_pprof",
0) != 0,
EnableCache: beego.AppConfig.DefaultInt("enable_cache",
1) != 0,
diff --git a/server/core/microservice.go b/server/core/microservice.go
index 47adf68..807fdf9 100644
--- a/server/core/microservice.go
+++ b/server/core/microservice.go
@@ -28,7 +28,7 @@ import (
var (
ServiceAPI pb.ServiceCtrlServer
- InstanceAPI pb.SerivceInstanceCtrlServerEx
+ InstanceAPI pb.ServiceInstanceCtrlServerEx
Service *pb.MicroService
Instance *pb.MicroServiceInstance
sharedServiceNames map[string]struct{}
diff --git a/server/core/proto/common.go b/server/core/proto/common.go
new file mode 100644
index 0000000..1595eeb
--- /dev/null
+++ b/server/core/proto/common.go
@@ -0,0 +1,93 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 proto
+
+import (
+ scerr
"github.com/apache/incubator-servicecomb-service-center/server/error"
+)
+
+const (
+ EVT_INIT EventType = "INIT"
+ EVT_CREATE EventType = "CREATE"
+ EVT_UPDATE EventType = "UPDATE"
+ EVT_DELETE EventType = "DELETE"
+ EVT_EXPIRE EventType = "EXPIRE"
+ EVT_ERROR EventType = "ERROR"
+ MS_UP string = "UP"
+ MS_DOWN string = "DOWN"
+
+ MSI_UP string = "UP"
+ MSI_DOWN string = "DOWN"
+ MSI_STARTING string = "STARTING"
+ MSI_OUTOFSERVICE string = "OUTOFSERVICE"
+
+ CHECK_BY_HEARTBEAT string = "push"
+ CHECK_BY_PLATFORM string = "pull"
+
+ EXISTENCE_MS string = "microservice"
+ EXISTENCE_SCHEMA string = "schema"
+
+ PROP_ALLOW_CROSS_APP = "allowCrossApp"
+
+ Response_SUCCESS int32 = 0
+
+ ENV_DEV string = "development"
+ ENV_TEST string = "testing"
+ ENV_ACCEPT string = "acceptance"
+ ENV_PROD string = "production"
+
+ REGISTERBY_SDK string = "SDK"
+ REGISTERBY_SIDECAR string = "SIDECAR"
+ REGISTERBY_PLATFORM string = "PLATFORM"
+
+ APP_ID = "default"
+ VERSION = "0.0.1"
+)
+
+func CreateResponse(code int32, message string) *Response {
+ resp := &Response{
+ Code: code,
+ Message: message,
+ }
+ return resp
+}
+
+func CreateResponseWithSCErr(err *scerr.Error) *Response {
+ return &Response{
+ Code: err.Code,
+ Message: err.Detail,
+ }
+}
+
+func DependenciesToKeys(in []*MicroServiceKey, domainProject string)
[]*MicroServiceKey {
+ for _, value := range in {
+ if len(value.Tenant) == 0 {
+ value.Tenant = domainProject
+ }
+ }
+ return in
+}
+
+func MicroServiceToKey(domainProject string, in *MicroService)
*MicroServiceKey {
+ return &MicroServiceKey{
+ Tenant: domainProject,
+ Environment: in.Environment,
+ AppId: in.AppId,
+ ServiceName: in.ServiceName,
+ Alias: in.Alias,
+ Version: in.Version,
+ }
+}
diff --git a/server/core/proto/services.go b/server/core/proto/services.go
index 7fd0d38..80b158a 100644
--- a/server/core/proto/services.go
+++ b/server/core/proto/services.go
@@ -17,139 +17,14 @@
package proto
import (
- scerr
"github.com/apache/incubator-servicecomb-service-center/server/error"
"github.com/gorilla/websocket"
"golang.org/x/net/context"
)
-type EventType string
-
-const (
- EVT_INIT EventType = "INIT"
- EVT_CREATE EventType = "CREATE"
- EVT_UPDATE EventType = "UPDATE"
- EVT_DELETE EventType = "DELETE"
- EVT_EXPIRE EventType = "EXPIRE"
- EVT_ERROR EventType = "ERROR"
- MS_UP string = "UP"
- MS_DOWN string = "DOWN"
-
- MSI_UP string = "UP"
- MSI_DOWN string = "DOWN"
- MSI_STARTING string = "STARTING"
- MSI_OUTOFSERVICE string = "OUTOFSERVICE"
-
- CHECK_BY_HEARTBEAT string = "push"
- CHECK_BY_PLATFORM string = "pull"
-
- EXISTENCE_MS string = "microservice"
- EXISTENCE_SCHEMA string = "schema"
-
- PROP_ALLOW_CROSS_APP = "allowCrossApp"
-
- Response_SUCCESS int32 = 0
-
- ENV_DEV string = "development"
- ENV_TEST string = "testing"
- ENV_ACCEPT string = "acceptance"
- ENV_PROD string = "production"
-
- REGISTERBY_SDK string = "SDK"
- REGISTERBY_SIDECAR string = "SIDECAR"
- REGISTERBY_PLATFORM string = "PLATFORM"
-
- APP_ID = "default"
- VERSION = "0.0.1"
-)
-
-type SerivceInstanceCtrlServerEx interface {
+type ServiceInstanceCtrlServerEx interface {
ServiceInstanceCtrlServer
WebSocketWatch(ctx context.Context, in *WatchInstanceRequest, conn
*websocket.Conn)
WebSocketListAndWatch(ctx context.Context, in *WatchInstanceRequest,
conn *websocket.Conn)
ClusterHealth(ctx context.Context) (*GetInstancesResponse, error)
}
-
-type GovernServiceCtrlServerEx interface {
- GovernServiceCtrlServer
-}
-
-type MicroServiceDependency struct {
- Dependency []*MicroServiceKey `json:"Dependency,omitempty"`
-}
-
-type ServerConfig struct {
- MaxHeaderBytes int64 `json:"maxHeaderBytes"`
- MaxBodyBytes int64 `json:"maxBodyBytes"`
-
- ReadHeaderTimeout string `json:"readHeaderTimeout"`
- ReadTimeout string `json:"readTimeout"`
- IdleTimeout string `json:"idleTimeout"`
- WriteTimeout string `json:"writeTimeout"`
-
- LimitTTLUnit string `json:"limitTTLUnit"`
- LimitConnections int64 `json:"limitConnections"`
- LimitIPLookup string `json:"limitIPLookup"`
-
- SslEnabled bool `json:"sslEnabled,string"`
- SslMinVersion string `json:"sslMinVersion"`
- SslVerifyPeer bool `json:"sslVerifyPeer,string"`
- SslCiphers string `json:"sslCiphers"`
-
- AutoSyncInterval string `json:"-"`
- CompactIndexDelta int64 `json:"-"`
- CompactInterval string `json:"-"`
-
- EnablePProf bool `json:"-"`
- EnableCache bool `json:"-"`
-
- LoggerName string `json:"-"`
- LogRotateSize int64 `json:"-"`
- LogBackupCount int64 `json:"-"`
- LogFilePath string `json:"-"`
- LogLevel string `json:"-"`
- LogFormat string `json:"-"`
- LogSys bool `json:"-"`
-
- PluginsDir string `json:"-"`
-}
-
-type ServerInformation struct {
- Version string `json:"version"`
- Config ServerConfig `json:"-"`
-}
-
-func CreateResponse(code int32, message string) *Response {
- resp := &Response{
- Code: code,
- Message: message,
- }
- return resp
-}
-
-func CreateResponseWithSCErr(err *scerr.Error) *Response {
- return &Response{
- Code: err.Code,
- Message: err.Detail,
- }
-}
-
-func DependenciesToKeys(in []*MicroServiceKey, domainProject string)
[]*MicroServiceKey {
- for _, value := range in {
- if len(value.Tenant) == 0 {
- value.Tenant = domainProject
- }
- }
- return in
-}
-
-func MicroServiceToKey(domainProject string, in *MicroService)
*MicroServiceKey {
- return &MicroServiceKey{
- Tenant: domainProject,
- Environment: in.Environment,
- AppId: in.AppId,
- ServiceName: in.ServiceName,
- Alias: in.Alias,
- Version: in.Version,
- }
-}
diff --git a/server/core/proto/types.go b/server/core/proto/types.go
new file mode 100644
index 0000000..fce6295
--- /dev/null
+++ b/server/core/proto/types.go
@@ -0,0 +1,72 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You 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 proto
+
+import (
+ "github.com/apache/incubator-servicecomb-service-center/pkg/util"
+)
+
+type EventType string
+
+type MicroServiceDependency struct {
+ Dependency []*MicroServiceKey `json:"Dependency,omitempty"`
+}
+
+type ServerConfig struct {
+ MaxHeaderBytes int64 `json:"maxHeaderBytes"`
+ MaxBodyBytes int64 `json:"maxBodyBytes"`
+
+ ReadHeaderTimeout string `json:"readHeaderTimeout"`
+ ReadTimeout string `json:"readTimeout"`
+ IdleTimeout string `json:"idleTimeout"`
+ WriteTimeout string `json:"writeTimeout"`
+
+ LimitTTLUnit string `json:"limitTTLUnit"`
+ LimitConnections int64 `json:"limitConnections"`
+ LimitIPLookup string `json:"limitIPLookup"`
+
+ SslEnabled bool `json:"sslEnabled,string"`
+ SslMinVersion string `json:"sslMinVersion"`
+ SslVerifyPeer bool `json:"sslVerifyPeer,string"`
+ SslCiphers string `json:"sslCiphers"`
+
+ AutoSyncInterval string `json:"-"`
+ CompactIndexDelta int64 `json:"-"`
+ CompactInterval string `json:"-"`
+
+ EnablePProf bool `json:"-"`
+ EnableCache bool `json:"-"`
+
+ LoggerName string `json:"-"`
+ LogRotateSize int64 `json:"-"`
+ LogBackupCount int64 `json:"-"`
+ LogFilePath string `json:"-"`
+ LogLevel string `json:"-"`
+ LogFormat string `json:"-"`
+ LogSys bool `json:"-"`
+
+ PluginsDir string `json:"-"`
+ Plugins util.JSONObject `json:"plugins"`
+}
+
+type ServerInformation struct {
+ Version string `json:"version"`
+ Config ServerConfig `json:"-"`
+}
+
+func NewServerInformation() *ServerInformation {
+ return &ServerInformation{Config: ServerConfig{Plugins:
make(util.JSONObject)}}
+}
diff --git a/server/govern/govern_suite_test.go
b/server/govern/govern_suite_test.go
index a5c38b5..3c333c5 100644
--- a/server/govern/govern_suite_test.go
+++ b/server/govern/govern_suite_test.go
@@ -38,7 +38,7 @@ func TestGovern(t *testing.T) {
RunSpecsWithDefaultAndCustomReporters(t, "model Suite",
[]Reporter{junitReporter})
}
-var governService pb.GovernServiceCtrlServerEx
+var governService pb.GovernServiceCtrlServer
var _ = BeforeSuite(func() {
//init plugin
diff --git a/server/govern/service.go b/server/govern/service.go
index 7384a65..fe26eec 100644
--- a/server/govern/service.go
+++ b/server/govern/service.go
@@ -30,7 +30,7 @@ import (
"golang.org/x/net/context"
)
-var GovernServiceAPI pb.GovernServiceCtrlServerEx = &GovernService{}
+var GovernServiceAPI pb.GovernServiceCtrlServer = &GovernService{}
type GovernService struct {
}
diff --git a/server/plugin/infra/quota/buildin/buildin.go
b/server/plugin/infra/quota/buildin/buildin.go
index a4eb7b0..cac1e9f 100644
--- a/server/plugin/infra/quota/buildin/buildin.go
+++ b/server/plugin/infra/quota/buildin/buildin.go
@@ -28,6 +28,7 @@ func init() {
}
func New() mgr.PluginInstance {
+ InitConfigs()
log.Infof("quota init, service: %d, instance: %d, schema: %d/service,
tag: %d/service, rule: %d/service",
quota.DefaultServiceQuota, quota.DefaultInstanceQuota,
quota.DefaultSchemaQuota, quota.DefaultTagQuota,
quota.DefaultRuleQuota)
diff --git a/server/plugin/infra/quota/buildin/common.go
b/server/plugin/infra/quota/buildin/common.go
index d31ef8c..e47a131 100644
--- a/server/plugin/infra/quota/buildin/common.go
+++ b/server/plugin/infra/quota/buildin/common.go
@@ -25,6 +25,7 @@ import (
scerr
"github.com/apache/incubator-servicecomb-service-center/server/error"
"github.com/apache/incubator-servicecomb-service-center/server/infra/quota"
"github.com/apache/incubator-servicecomb-service-center/server/infra/registry"
+ mgr
"github.com/apache/incubator-servicecomb-service-center/server/plugin"
serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
)
@@ -113,3 +114,12 @@ func resourceLimitHandler(ctx context.Context, res
*quota.ApplyQuotaResource) (i
}
return resp.Count, nil
}
+
+func InitConfigs() {
+ mgr.QUOTA.ActiveConfigs().
+ Set("service", quota.DefaultServiceQuota).
+ Set("instance", quota.DefaultInstanceQuota).
+ Set("schema", quota.DefaultSchemaQuota).
+ Set("tag", quota.DefaultTagQuota).
+ Set("rule", quota.DefaultRuleQuota)
+}
diff --git a/server/plugin/plugin.go b/server/plugin/plugin.go
index 9627f79..7511cd0 100644
--- a/server/plugin/plugin.go
+++ b/server/plugin/plugin.go
@@ -20,6 +20,7 @@ import (
"github.com/apache/incubator-servicecomb-service-center/pkg/log"
"github.com/apache/incubator-servicecomb-service-center/pkg/plugin"
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
+ "github.com/apache/incubator-servicecomb-service-center/server/core"
"github.com/apache/incubator-servicecomb-service-center/server/infra/auditlog"
"github.com/apache/incubator-servicecomb-service-center/server/infra/auth"
"github.com/apache/incubator-servicecomb-service-center/server/infra/quota"
@@ -34,7 +35,12 @@ import (
"sync"
)
-const BUILDIN = "buildin"
+const (
+ BUILDIN = "buildin"
+ STATIC = "static"
+ DYNAMIC = "dynamic"
+ keyPluginName = "name"
+)
const (
UUID PluginName = iota
@@ -74,6 +80,14 @@ func (pn PluginName) String() string {
return "PLUGIN" + strconv.Itoa(int(pn))
}
+func (pn PluginName) ActiveConfigs() util.JSONObject {
+ return core.ServerInfo.Config.Plugins.Object(pn.String())
+}
+
+func (pn PluginName) ClearConfigs() {
+ core.ServerInfo.Config.Plugins.Set(pn.String(), nil)
+}
+
type Plugin struct {
// plugin class name
PName PluginName
@@ -151,7 +165,7 @@ func (pm *PluginManager) Instance(pn PluginName)
PluginInstance {
func (pm *PluginManager) New(pn PluginName) {
var (
- title = "static"
+ title = STATIC
f func() PluginInstance
)
@@ -159,7 +173,7 @@ func (pm *PluginManager) New(pn PluginName) {
p := pm.existDynamicPlugin(pn)
if p != nil {
wi.dynamic = true
- title = "dynamic"
+ title = DYNAMIC
f = p.New
} else {
wi.dynamic = false
@@ -175,6 +189,7 @@ func (pm *PluginManager) New(pn PluginName) {
}
f = p.New
+ pn.ActiveConfigs().Set(keyPluginName, name)
}
log.Infof("call %s '%s' plugin %s(), new a '%s' instance",
title, p.PName, util.FuncName(f), p.Name)
@@ -186,6 +201,7 @@ func (pm *PluginManager) Reload(pn PluginName) {
wi := pm.instances[pn]
wi.lock.Lock()
wi.instance = nil
+ pn.ClearConfigs()
wi.lock.Unlock()
}
@@ -234,3 +250,9 @@ func DynamicPluginFunc(pn PluginName, funcName string)
pg.Symbol {
}
return f
}
+
+func LoadPlugins() {
+ for t := PluginName(0); t != typeEnd; t++ {
+ Plugins().Instance(t)
+ }
+}
diff --git a/server/plugin/plugin_test.go b/server/plugin/plugin_test.go
index 7df1e84..2cbf810 100644
--- a/server/plugin/plugin_test.go
+++ b/server/plugin/plugin_test.go
@@ -41,16 +41,21 @@ func TestPluginManager_New(t *testing.T) {
times := 0
fn := func() PluginInstance {
times++
+ AUTH.ActiveConfigs().Set("a", "a")
return &mockAuthPlugin{times}
}
pm.Register(Plugin{AUTH, "buildin", fn})
i := pm.Instance(AUTH)
- if i != pm.Instance(AUTH) {
+ if i != pm.Instance(AUTH) || AUTH.ActiveConfigs().String("a", "") !=
"a" {
t.Fatalf("TestPluginManager_New failed")
}
pm.ReloadAll()
+ if AUTH.ActiveConfigs().String("a", "") != "" {
+ t.Fatalf("TestPluginManager_New failed")
+ }
+
n := pm.Instance(AUTH)
if i == n {
t.Fatalf("TestPluginManager_New failed")
@@ -63,4 +68,6 @@ func TestPluginManager_New(t *testing.T) {
}()
RegisterPlugin(Plugin{PluginName(999), "999", nil})
DynamicPluginFunc(PluginName(999), "999")
+
+ LoadPlugins()
}
diff --git a/server/server.go b/server/server.go
index f8048d0..e111874 100644
--- a/server/server.go
+++ b/server/server.go
@@ -24,6 +24,7 @@ import (
"github.com/apache/incubator-servicecomb-service-center/server/core"
"github.com/apache/incubator-servicecomb-service-center/server/core/backend"
"github.com/apache/incubator-servicecomb-service-center/server/mux"
+ "github.com/apache/incubator-servicecomb-service-center/server/plugin"
nf
"github.com/apache/incubator-servicecomb-service-center/server/service/notification"
serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"github.com/apache/incubator-servicecomb-service-center/version"
@@ -101,6 +102,9 @@ func (s *ServiceCenterServer) initialize() {
s.apiServer = GetAPIServer()
s.goroutine = gopool.New(context.Background())
+ // load server plugins
+ plugin.LoadPlugins()
+
// check version
s.loadOrUpgradeServerVersion()
diff --git a/server/service/microservice.go b/server/service/microservice.go
index ab9b0b7..389b5b9 100644
--- a/server/service/microservice.go
+++ b/server/service/microservice.go
@@ -38,7 +38,7 @@ import (
)
type MicroServiceService struct {
- instanceService pb.SerivceInstanceCtrlServerEx
+ instanceService pb.ServiceInstanceCtrlServerEx
}
const (
diff --git a/server/service/service.go b/server/service/service.go
index 494db55..24a5f65 100644
--- a/server/service/service.go
+++ b/server/service/service.go
@@ -24,7 +24,7 @@ import (
var (
serviceService pb.ServiceCtrlServer
- instanceService pb.SerivceInstanceCtrlServerEx
+ instanceService pb.ServiceInstanceCtrlServerEx
)
func init() {
@@ -40,6 +40,6 @@ func RegisterGrpcServices(s *grpc.Server) {
pb.RegisterServiceInstanceCtrlServer(s, instanceService)
}
-func AssembleResources() (pb.ServiceCtrlServer,
pb.SerivceInstanceCtrlServerEx) {
+func AssembleResources() (pb.ServiceCtrlServer,
pb.ServiceInstanceCtrlServerEx) {
return serviceService, instanceService
}
diff --git a/server/service/service_suite_test.go
b/server/service/service_suite_test.go
index 09c0a20..7b59098 100644
--- a/server/service/service_suite_test.go
+++ b/server/service/service_suite_test.go
@@ -33,7 +33,7 @@ import (
)
var serviceResource pb.ServiceCtrlServer
-var instanceResource pb.SerivceInstanceCtrlServerEx
+var instanceResource pb.ServiceInstanceCtrlServerEx
var _ = BeforeSuite(func() {
//init plugin