@@ -35,6 +35,19 @@ func NewClient(gatewayURL *url.URL, auth ClientAuth, client *http.Client) *Clien
3535 }
3636}
3737
38+ type HttpError struct {
39+ Err error
40+ Status int
41+ }
42+
43+ func (e * HttpError ) Error () string {
44+ return e .Err .Error ()
45+ }
46+
47+ func createHttpError (err error , statusCode int ) * HttpError {
48+ return & HttpError {Err : err , Status : statusCode }
49+ }
50+
3851// GetNamespaces get openfaas namespaces
3952func (s * Client ) GetNamespaces (ctx context.Context ) ([]string , error ) {
4053 u := s .GatewayURL
@@ -54,7 +67,7 @@ func (s *Client) GetNamespaces(ctx context.Context) ([]string, error) {
5467
5568 res , err := s .Client .Do (req )
5669 if err != nil {
57- return namespaces , fmt .Errorf ("unable to make request: %w" , err )
70+ return namespaces , fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL : %s, error: %s" , s . GatewayURL , err )
5871 }
5972
6073 if res .Body != nil {
@@ -66,8 +79,15 @@ func (s *Client) GetNamespaces(ctx context.Context) ([]string, error) {
6679 return namespaces , err
6780 }
6881
69- if res .StatusCode == http .StatusUnauthorized {
70- return namespaces , fmt .Errorf ("check authorization, status code: %d" , res .StatusCode )
82+ switch res .StatusCode {
83+ case http .StatusOK :
84+ break
85+
86+ case http .StatusUnauthorized :
87+ return namespaces , createHttpError (fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res .StatusCode )
88+
89+ default :
90+ return namespaces , createHttpError (fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut )), res .StatusCode )
7191 }
7292
7393 if len (bytesOut ) == 0 {
@@ -106,7 +126,7 @@ func (s *Client) GetFunctions(ctx context.Context, namespace string) ([]types.Fu
106126
107127 res , err := s .Client .Do (req )
108128 if err != nil {
109- return []types.FunctionStatus {}, fmt .Errorf ("unable to make HTTP request: %w" , err )
129+ return []types.FunctionStatus {}, fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL : %s, error: %s" , s . GatewayURL , err )
110130 }
111131
112132 if res .Body != nil {
@@ -115,6 +135,17 @@ func (s *Client) GetFunctions(ctx context.Context, namespace string) ([]types.Fu
115135
116136 body , _ := io .ReadAll (res .Body )
117137
138+ switch res .StatusCode {
139+ case http .StatusAccepted , http .StatusOK :
140+ break
141+
142+ case http .StatusUnauthorized :
143+ return nil , createHttpError (fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res .StatusCode )
144+
145+ default :
146+ return nil , createHttpError (fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (body )), res .StatusCode )
147+ }
148+
118149 functions := []types.FunctionStatus {}
119150 if err := json .Unmarshal (body , & functions ); err != nil {
120151 return []types.FunctionStatus {},
@@ -142,7 +173,7 @@ func (s *Client) GetInfo(ctx context.Context) (SystemInfo, error) {
142173
143174 res , err := s .Client .Do (req )
144175 if err != nil {
145- return SystemInfo {}, fmt .Errorf ("unable to make HTTP request: %w" , err )
176+ return SystemInfo {}, fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL : %s, error: %s" , s . GatewayURL , err )
146177 }
147178
148179 if res .Body != nil {
@@ -185,7 +216,7 @@ func (s *Client) GetFunction(ctx context.Context, name, namespace string) (types
185216
186217 res , err := s .Client .Do (req )
187218 if err != nil {
188- return types.FunctionDeployment {}, fmt .Errorf ("unable to make HTTP request: %w" , err )
219+ return types.FunctionDeployment {}, fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL : %s, error: %s" , s . GatewayURL , err )
189220 }
190221
191222 if res .Body != nil {
@@ -194,6 +225,17 @@ func (s *Client) GetFunction(ctx context.Context, name, namespace string) (types
194225
195226 body , _ := io .ReadAll (res .Body )
196227
228+ switch res .StatusCode {
229+ case http .StatusOK :
230+ break
231+
232+ case http .StatusUnauthorized :
233+ return types.FunctionDeployment {}, createHttpError (fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res .StatusCode )
234+
235+ default :
236+ return types.FunctionDeployment {}, createHttpError (fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (body )), res .StatusCode )
237+ }
238+
197239 functions := types.FunctionDeployment {}
198240 if err := json .Unmarshal (body , & functions ); err != nil {
199241 return types.FunctionDeployment {},
@@ -203,20 +245,19 @@ func (s *Client) GetFunction(ctx context.Context, name, namespace string) (types
203245 return functions , nil
204246}
205247
206- func (s * Client ) Deploy (ctx context.Context , spec types.FunctionDeployment ) ( int , error ) {
248+ func (s * Client ) Deploy (ctx context.Context , spec types.FunctionDeployment ) error {
207249 return s .deploy (ctx , http .MethodPost , spec )
208-
209250}
210251
211- func (s * Client ) Update (ctx context.Context , spec types.FunctionDeployment ) ( int , error ) {
252+ func (s * Client ) Update (ctx context.Context , spec types.FunctionDeployment ) error {
212253 return s .deploy (ctx , http .MethodPut , spec )
213254}
214255
215- func (s * Client ) deploy (ctx context.Context , method string , spec types.FunctionDeployment ) ( int , error ) {
256+ func (s * Client ) deploy (ctx context.Context , method string , spec types.FunctionDeployment ) error {
216257
217258 bodyBytes , err := json .Marshal (spec )
218259 if err != nil {
219- return http .StatusBadRequest , err
260+ return createHttpError ( err , http .StatusBadRequest )
220261 }
221262
222263 bodyReader := bytes .NewReader (bodyBytes )
@@ -226,18 +267,18 @@ func (s *Client) deploy(ctx context.Context, method string, spec types.FunctionD
226267
227268 req , err := http .NewRequestWithContext (ctx , method , u .String (), bodyReader )
228269 if err != nil {
229- return http . StatusBadGateway , err
270+ return fmt . Errorf ( "unable to create request for %s, error: %w" , u . String (), err )
230271 }
231272
232273 if s .ClientAuth != nil {
233274 if err := s .ClientAuth .Set (req ); err != nil {
234- return http . StatusInternalServerError , fmt .Errorf ("unable to set Authorization header: %w" , err )
275+ return fmt .Errorf ("unable to set Authorization header: %w" , err )
235276 }
236277 }
237278
238279 res , err := s .Client .Do (req )
239280 if err != nil {
240- return http . StatusBadGateway , err
281+ return fmt . Errorf ( "unable to make HTTP request to OpenFaaS on URL: %s, error: %s" , s . GatewayURL , err )
241282 }
242283
243284 var body []byte
@@ -248,13 +289,13 @@ func (s *Client) deploy(ctx context.Context, method string, spec types.FunctionD
248289
249290 switch res .StatusCode {
250291 case http .StatusAccepted , http .StatusOK , http .StatusCreated :
251- return res . StatusCode , nil
292+ return nil
252293
253294 case http .StatusUnauthorized :
254- return res . StatusCode , fmt .Errorf ("unauthorized action, please setup authentication for this server" )
295+ return createHttpError ( fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res . StatusCode )
255296
256297 default :
257- return res . StatusCode , fmt .Errorf ("unexpected status code: %d, message: %q" , res .StatusCode , string (body ))
298+ return createHttpError ( fmt .Errorf ("unexpected status code: %d, message: %q" , res .StatusCode , string (body )), res . StatusCode )
258299 }
259300}
260301
@@ -280,7 +321,7 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
280321
281322 req , err := http .NewRequestWithContext (ctx , http .MethodPost , u .String (), bodyReader )
282323 if err != nil {
283- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s " , u .String (), err )
324+ return fmt .Errorf ("unable to create request for %s, error: %w " , u .String (), err )
284325 }
285326
286327 if s .ClientAuth != nil {
@@ -290,7 +331,7 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
290331 }
291332 res , err := http .DefaultClient .Do (req )
292333 if err != nil {
293- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
334+ return fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
294335
295336 }
296337
@@ -303,10 +344,10 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
303344 break
304345
305346 case http .StatusNotFound :
306- return fmt .Errorf ("function %s not found" , functionName )
347+ return createHttpError ( fmt .Errorf ("function %s not found" , functionName ), res . StatusCode )
307348
308349 case http .StatusUnauthorized :
309- return fmt .Errorf ("unauthorized action, please setup authentication for this server" )
350+ return createHttpError ( fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res . StatusCode )
310351
311352 default :
312353 var err error
@@ -315,7 +356,7 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
315356 return err
316357 }
317358
318- return fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut ))
359+ return createHttpError ( fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut )), res . StatusCode )
319360 }
320361 return nil
321362}
@@ -338,7 +379,7 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
338379
339380 req , err := http .NewRequestWithContext (ctx , http .MethodDelete , u .String (), bodyReader )
340381 if err != nil {
341- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s " , u .String (), err )
382+ return fmt .Errorf ("unable to create request for %s, error: %w " , u .String (), err )
342383 }
343384
344385 if s .ClientAuth != nil {
@@ -348,7 +389,7 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
348389 }
349390 res , err := http .DefaultClient .Do (req )
350391 if err != nil {
351- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
392+ return fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
352393
353394 }
354395
@@ -361,10 +402,10 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
361402 break
362403
363404 case http .StatusNotFound :
364- return fmt .Errorf ("function %s not found" , functionName )
405+ return createHttpError ( fmt .Errorf ("function %s not found" , functionName ), res . StatusCode )
365406
366407 case http .StatusUnauthorized :
367- return fmt .Errorf ("unauthorized action, please setup authentication for this server" )
408+ return createHttpError ( fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res . StatusCode )
368409
369410 default :
370411 var err error
@@ -373,7 +414,7 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
373414 return err
374415 }
375416
376- return fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut ))
417+ return createHttpError ( fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut )), res . StatusCode )
377418 }
378419 return nil
379420}
0 commit comments