scctl/pkg/plugin/get/instance/instance_cmd.go (72 lines of code) (raw):
/*
* 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 instance
import (
"context"
"strings"
"github.com/apache/servicecomb-service-center/client"
"github.com/apache/servicecomb-service-center/datasource/etcd/path"
"github.com/apache/servicecomb-service-center/pkg/dump"
"github.com/apache/servicecomb-service-center/scctl/pkg/cmd"
"github.com/apache/servicecomb-service-center/scctl/pkg/model"
"github.com/apache/servicecomb-service-center/scctl/pkg/plugin/get"
"github.com/apache/servicecomb-service-center/scctl/pkg/writer"
"github.com/spf13/cobra"
)
func init() {
NewInstanceCommand(get.RootCmd)
}
func NewInstanceCommand(parent *cobra.Command) *cobra.Command {
cmd := &cobra.Command{
Use: "instance [options]",
Aliases: []string{"inst"},
Short: "Output the instance information of the service center ",
Run: CommandFunc,
}
parent.AddCommand(cmd)
return cmd
}
func CommandFunc(_ *cobra.Command, _ []string) {
scClient, err := client.NewSCClient(cmd.ScClientConfig)
if err != nil {
cmd.StopAndExit(cmd.ExitError, err)
}
cache, scErr := scClient.GetScCache(context.Background())
if scErr != nil {
cmd.StopAndExit(cmd.ExitError, scErr)
}
svcMap := make(map[string]*dump.Microservice)
for _, ms := range cache.Microservices {
svcMap[ms.Value.ServiceId] = ms
}
records := make(map[string]*Record)
for _, inst := range cache.Instances {
domainProject := model.GetDomainProject(inst)
if !get.AllDomains && strings.Index(domainProject+path.SPLIT, get.Domain+path.SPLIT) != 0 {
continue
}
svc, ok := svcMap[inst.Value.ServiceId]
if !ok {
continue
}
instance, ok := records[inst.Value.InstanceId]
if !ok {
instance = &Record{
Instance: model.Instance{
DomainProject: domainProject,
Host: inst.Value.HostName,
Endpoints: inst.Value.Endpoints,
Environment: svc.Value.Environment,
AppID: svc.Value.AppId,
ServiceName: svc.Value.ServiceName,
Version: svc.Value.Version,
Framework: svc.Value.Framework,
},
}
records[inst.Value.InstanceId] = instance
}
instance.SetLease(inst.Value.HealthCheck)
instance.UpdateTimestamp(inst.Value.Timestamp)
}
sp := &Printer{Records: records}
sp.SetOutputFormat(get.Output, get.AllDomains)
writer.PrintTable(sp)
}