11package status
22
33import (
4- "context"
54 "fmt"
65 "io"
7- "os"
8- "path/filepath"
96 "reflect"
107 "strings"
118 "text/tabwriter"
129
13- "github.com/redhat-developer/app-services-cli/pkg/shared/kafkautil"
10+ "github.com/redhat-developer/app-services-cli/pkg/shared/contextutil"
11+ "github.com/redhat-developer/app-services-cli/pkg/shared/factory"
1412 "github.com/redhat-developer/app-services-cli/pkg/shared/servicespec"
1513 "github.com/redhat-developer/app-services-cli/pkg/shared/svcstatus"
14+ registrymgmtclient "github.com/redhat-developer/app-services-sdk-go/registrymgmt/apiv1/client"
1615
17- kafkamgmtv1errors "github.com/redhat-developer/app-services-sdk-go/kafkamgmt/apiv1/error "
16+ kafkamgmtclient "github.com/redhat-developer/app-services-sdk-go/kafkamgmt/apiv1/client "
1817
19- "github.com/redhat-developer/app-services-cli/pkg/core/config"
20- "github.com/redhat-developer/app-services-cli/pkg/core/localize"
21- "github.com/redhat-developer/app-services-cli/pkg/core/logging"
2218 "github.com/redhat-developer/app-services-cli/pkg/core/servicecontext"
23- "github.com/redhat-developer/app-services-cli/pkg/shared/connection"
2419
2520 "github.com/openconfig/goyang/pkg/indent"
2621)
2722
2823const tagTitle = "title"
2924
3025type serviceStatus struct {
31- Name string `json:"name,omitempty" title:"Name"`
32- Location string `json:"location,omitempty" title:"Location"`
26+ Name string `json:"name,omitempty" title:"Service Context Name"`
27+ Location string `json:"location,omitempty" title:"Context File Location"`
3328 Kafka * kafkaStatus `json:"kafka,omitempty" title:"Kafka"`
3429 Registry * registryStatus `json:"registry,omitempty" title:"Service Registry"`
3530}
3631
32+ func (s serviceStatus ) hasStatus () bool {
33+ return s .Kafka != nil || s .Registry != nil
34+ }
35+
3736type kafkaStatus struct {
3837 ID string `json:"id,omitempty"`
3938 Name string `json:"name,omitempty"`
@@ -50,91 +49,57 @@ type registryStatus struct {
5049}
5150
5251type clientConfig struct {
53- context context.Context
54- config config.IConfig
55- Logger logging.Logger
56- connection connection.Connection
57- localizer localize.Localizer
52+ f * factory.Factory
5853 serviceConfig * servicecontext.ServiceConfig
5954}
6055
6156type statusClient struct {
62- context context.Context
63- config config.IConfig
64- Logger logging.Logger
65- conn connection.Connection
66- localizer localize.Localizer
57+ f * factory.Factory
6758 serviceConfig * servicecontext.ServiceConfig
6859}
6960
7061// newStatusClient returns a new client to fetch service statuses
7162// and build it into a service status config object
7263func newStatusClient (cfg * clientConfig ) * statusClient {
7364 return & statusClient {
74- config : cfg .config ,
75- Logger : cfg .Logger ,
76- conn : cfg .connection ,
77- localizer : cfg .localizer ,
65+ f : cfg .f ,
7866 serviceConfig : cfg .serviceConfig ,
7967 }
8068}
8169
8270// BuildStatus gets the status of all services currently set in the service context
83- func (c * statusClient ) BuildStatus (ctxName string , services []string ) (status * serviceStatus , ok bool , err error ) {
71+ func (c * statusClient ) BuildStatus (services []string ) (status * serviceStatus , err error ) {
72+ factory := c .f
8473
8574 status = & serviceStatus {}
8675
87- status .Name = ctxName
88-
89- if rhoasContext := os .Getenv ("RHOAS_CONTEXT" ); rhoasContext != "" {
90- status .Location = rhoasContext
91- } else {
92- ctxDirLocation , _ := servicecontext .DefaultDir ()
93- status .Location = filepath .Join (ctxDirLocation , "contexts.json" )
94- }
95-
9676 if stringInSlice (servicespec .KafkaServiceName , services ) {
97- if c .serviceConfig .KafkaID != "" {
98- // nolint:govet
99- kafkaStatus , err := c .getKafkaStatus (c .context , c .serviceConfig .KafkaID )
100- if err != nil {
101- if kafkamgmtv1errors .IsAPIError (err , kafkamgmtv1errors .ERROR_7 ) {
102- err = kafkautil .NotFoundByIDError (c .serviceConfig .KafkaID )
103- c .Logger .Error (err )
104- c .Logger .Info (c .localizer .MustLocalize ("status.log.info.rhoasKafkaUse" ))
105- }
106- } else {
107- status .Kafka = kafkaStatus
108- ok = true
109- }
110- } else {
111- c .Logger .Debug ("No Kafka instance is currently used, skipping status check" )
77+ kafkaResponse , err := contextutil .GetKafkaForServiceConfig (c .serviceConfig , factory )
78+ if err != nil {
79+ return status , err
11280 }
81+ kafkaStatus , err := c .getKafkaStatus (kafkaResponse )
82+ if err != nil {
83+ return status , err
84+ }
85+ status .Kafka = kafkaStatus
11386 }
11487
11588 if stringInSlice (servicespec .ServiceRegistryServiceName , services ) {
116- if c .serviceConfig .ServiceRegistryID != "" {
117- // nolint:govet
118- registry , newErr := c .getRegistryStatus (c .context , c .serviceConfig .ServiceRegistryID )
119- if newErr != nil {
120- return status , ok , newErr
121- }
122- status .Registry = registry
123- ok = true
124- } else {
125- c .Logger .Debug ("No service registry is currently used, skipping status check" )
89+ registryResponse , err := contextutil .GetRegistryForServiceConfig (c .serviceConfig , factory )
90+ if err != nil {
91+ return status , err
12692 }
93+ registry , newErr := c .getRegistryStatus (registryResponse )
94+ if newErr != nil {
95+ return status , newErr
96+ }
97+ status .Registry = registry
12798 }
128-
129- return status , ok , err
99+ return status , err
130100}
131101
132- func (c * statusClient ) getKafkaStatus (ctx context.Context , id string ) (status * kafkaStatus , err error ) {
133- kafkaResponse , _ , err := c .conn .API ().KafkaMgmt ().GetKafkaById (ctx , id ).Execute ()
134- if err != nil {
135- return nil , err
136- }
137-
102+ func (c * statusClient ) getKafkaStatus (kafkaResponse * kafkamgmtclient.KafkaRequest ) (status * kafkaStatus , err error ) {
138103 status = & kafkaStatus {
139104 ID : kafkaResponse .GetId (),
140105 Name : kafkaResponse .GetName (),
@@ -149,12 +114,7 @@ func (c *statusClient) getKafkaStatus(ctx context.Context, id string) (status *k
149114 return status , err
150115}
151116
152- func (c * statusClient ) getRegistryStatus (ctx context.Context , id string ) (status * registryStatus , err error ) {
153- registry , _ , err := c .conn .API ().ServiceRegistryMgmt ().GetRegistry (ctx , id ).Execute ()
154- if err != nil {
155- return nil , err
156- }
157-
117+ func (c * statusClient ) getRegistryStatus (registry * registrymgmtclient.Registry ) (status * registryStatus , err error ) {
158118 status = & registryStatus {
159119 ID : registry .GetId (),
160120 Name : registry .GetName (),
0 commit comments