Skip to content

Commit

Permalink
update statistics response for gov service (#139)
Browse files Browse the repository at this point in the history
* find api dependency rule bug fix

* find api dependency rule bug fix

* quota apply bug fix

* http client bug fix
delete service bug fix
dependency optimize

* add upload schemas api

* upload schemas,add info in services.yaml

* delete service bug fix

* find dependency bug fix

* find dependency bug fix
governservice add some new response

* update gov service 's response

* update gov service response
  • Loading branch information
aseTo2016 authored and little-cui committed Oct 26, 2017
1 parent f5026c3 commit d81050f
Show file tree
Hide file tree
Showing 7 changed files with 393 additions and 294 deletions.
4 changes: 4 additions & 0 deletions server/core/microservice.go
Expand Up @@ -71,6 +71,10 @@ func AddDefaultContextValue(ctx context.Context) context.Context {
return ctx
}

func IsDefaultDomain(tenantProject string) bool{
return tenantProject == util.StringJoin([]string{REGISTRY_TENANT, REGISTRY_PROJECT}, "/")
}

func ISSCSelf(ctx context.Context) bool {
if ctx.Value(IS_SC_SELF) != nil && ctx.Value(IS_SC_SELF).(bool) {
return true
Expand Down
607 changes: 322 additions & 285 deletions server/core/proto/services.pb.go

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions server/core/proto/services.proto
Expand Up @@ -91,15 +91,21 @@ message InstanceHbRst {

message StService {
int64 count = 1;
int64 onlineCount = 2;
}

message StInstance {
int64 count = 1;
}

message StApp {
int64 count = 1;
}

message Statistics {
StService services = 1;
StInstance instances = 2;
StApp apps = 3;
}

message GetServicesInfoRequest {
Expand Down
2 changes: 1 addition & 1 deletion server/core/swagger/services.yaml
Expand Up @@ -1815,7 +1815,7 @@ definitions:
type: string
force:
description: 不传即默认为false。 强制删除,则与该服务相关的信息删除,非强制删除: 如果作为该被依赖(作为provider,提供服务,且不是只存在自依赖)或者存在实例,则不能删除,其它均删除。
type: string
type: bool

DelServicesResponse:
type: object
Expand Down
44 changes: 37 additions & 7 deletions server/service/governservice.go
Expand Up @@ -269,34 +269,44 @@ func statistics(ctx context.Context, opts ...registry.PluginOpOption) (*pb.Stati
result := &pb.Statistics{
Services: &pb.StService{},
Instances: &pb.StInstance{},
Apps: &pb.StApp{},
}
tenantProject := util.ParseTenantProject(ctx)

// services
key := apt.GenerateServiceKey(tenantProject, "")
key := apt.GetServiceIndexRootKey(tenantProject)
svcOpts := append(opts,
registry.WithStrKey(key),
registry.WithPrefix(),
registry.WithCountOnly())
registry.WithKeyOnly())
resp, err := store.Store().Service().Search(ctx, svcOpts...)
if err != nil {
return nil, err
}
if resp.Count > 0 {
result.Services.Count = resp.Count - 1
result.Services.Count = RemoveSCSelf(tenantProject, resp.Count, 1)

app := map[string]interface{}{}
for _, kv := range resp.Kvs {
key := util.BytesToStringWithNoCopy(kv.Key)
keySpilted := strings.Split(key, "/")
if len(keySpilted) > 6 {
appId := keySpilted[6]
app[appId] = nil
}
}
result.Apps.Count = RemoveSCSelf(tenantProject, int64(len(app)), 1)

// instance
key = apt.GetInstanceRootKey(tenantProject)
instOpts := append(opts,
registry.WithStrKey(key),
registry.WithPrefix(),
registry.WithCountOnly())
resp, err = store.Store().Instance().Search(ctx, instOpts...)
registry.WithKeyOnly())
respIns, err := store.Store().Instance().Search(ctx, instOpts...)
if err != nil {
return nil, err
}
result.Instances.Count = resp.Count
result.Instances.Count = respIns.Count
key = apt.GenerateInstanceKey(tenantProject, apt.Service.ServiceId, "")
scOpts := append(opts,
registry.WithStrKey(key),
Expand All @@ -307,5 +317,25 @@ func statistics(ctx context.Context, opts ...registry.PluginOpOption) (*pb.Stati
return nil, err
}
result.Instances.Count = result.Instances.Count - resp.Count

onlineServices := map[string] interface{}{}
for _, kv := range respIns.Kvs {
key := util.BytesToStringWithNoCopy(kv.Key)
keySpilted := strings.Split(key, "/")
if len(keySpilted) > 6 {
servieId := keySpilted[6]
onlineServices[servieId] = nil
}
}
result.Services.OnlineCount = RemoveSCSelf(tenantProject, int64(len(onlineServices)), 1)
return result, err
}

func RemoveSCSelf(tenantProject string, count int64, removeNum int64) int64{
if count > 0 {
if apt.IsDefaultDomain(tenantProject) {
count = count - removeNum
}
}
return count
}
9 changes: 8 additions & 1 deletion server/service/governservice_test.go
Expand Up @@ -41,7 +41,14 @@ var _ = Describe("GovernServiceController", func() {
Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))

resp, err = governService.GetServicesInfo(getContext(), &pb.GetServicesInfoRequest{
Options: []string{"tags", "rules", "instances", "schemas"},
Options: []string{"tags", "rules", "instances", "schemas", "statistics"},
})

Expect(err).To(BeNil())
Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))

resp, err = governService.GetServicesInfo(getContext(), &pb.GetServicesInfoRequest{
Options: []string{"statistics"},
})

Expect(err).To(BeNil())
Expand Down
15 changes: 15 additions & 0 deletions server/service/util/dependency.go
Expand Up @@ -373,6 +373,10 @@ func CreateDependencyRuleForFind(ctx context.Context, tenant string, provider *p
util.Logger().Errorf(err, "get dependency rule failed, consumer %s: get consumer depedency rule failed.", consumerFlag)
return err
}
if isDependencyAll(oldProviderRules) {
util.Logger().Infof("find update dep rule, exist * for %v", consumer)
return nil
}
opts := []registry.PluginOp{}
if oldProviderRule := isNeedUpdate(oldProviderRules.Dependency, provider); oldProviderRule != nil {
opt, err := deleteConsumerDepOfProviderRule(ctx, tenant, oldProviderRule, consumer)
Expand Down Expand Up @@ -428,6 +432,15 @@ func CreateDependencyRuleForFind(ctx context.Context, tenant string, provider *p
return nil
}

func isDependencyAll(dep *pb.MicroServiceDependency) bool{
for _, servicedep := range dep.Dependency {
if servicedep.ServiceName == "*" {
return true
}
}
return false
}

func isExist(services []*pb.MicroServiceKey, service *pb.MicroServiceKey) bool{
for _, tmp := range services {
if equalServiceDependency(tmp, service) {
Expand All @@ -450,6 +463,7 @@ func deleteDepRuleUtil(key string, deps *pb.MicroServiceDependency, deleteDepRul
for key, consumerDepRule := range deps.Dependency {
if equalServiceDependency(consumerDepRule, deleteDepRule) {
deps.Dependency = append(deps.Dependency[:key], deps.Dependency[key+1:]...)
break
}
}
data, err := json.Marshal(deps)
Expand All @@ -473,6 +487,7 @@ func updateDepRuleUtil(key string, deps *pb.MicroServiceDependency, updateDepRul
for _, serviceRule := range deps.Dependency {
if serviceRule.ServiceName == updateDepRule.ServiceName && updateDepRule.AppId == serviceRule.AppId && updateDepRule.Version != serviceRule.Version{
serviceRule.Version = updateDepRule.Version
break
}
}
data, err := json.Marshal(deps)
Expand Down

0 comments on commit d81050f

Please sign in to comment.