@@ -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,20 @@ 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, method string, spec types.FunctionDeployment) (int, error) {
249+ func (s * Client ) Deploy (ctx context.Context , spec types.FunctionDeployment ) error {
207250 return s .deploy (ctx , http .MethodPost , spec )
208-
209251}
210252
211- func (s * Client ) Update (ctx context.Context , spec types.FunctionDeployment ) ( int , error ) {
253+ func (s * Client ) Update (ctx context.Context , spec types.FunctionDeployment ) error {
212254 return s .deploy (ctx , http .MethodPut , spec )
213255}
214256
215- func (s * Client ) deploy (ctx context.Context , method string , spec types.FunctionDeployment ) ( int , error ) {
257+ func (s * Client ) deploy (ctx context.Context , method string , spec types.FunctionDeployment ) error {
216258
217259 bodyBytes , err := json .Marshal (spec )
218260 if err != nil {
219- return http .StatusBadRequest , err
261+ return createHttpError ( err , http .StatusBadRequest )
220262 }
221263
222264 bodyReader := bytes .NewReader (bodyBytes )
@@ -226,18 +268,18 @@ func (s *Client) deploy(ctx context.Context, method string, spec types.FunctionD
226268
227269 req , err := http .NewRequestWithContext (ctx , method , u .String (), bodyReader )
228270 if err != nil {
229- return http . StatusBadGateway , err
271+ return fmt . Errorf ( "unable to create request for %s, error: %w" , u . String (), err )
230272 }
231273
232274 if s .ClientAuth != nil {
233275 if err := s .ClientAuth .Set (req ); err != nil {
234- return http . StatusInternalServerError , fmt .Errorf ("unable to set Authorization header: %w" , err )
276+ return fmt .Errorf ("unable to set Authorization header: %w" , err )
235277 }
236278 }
237279
238280 res , err := s .Client .Do (req )
239281 if err != nil {
240- return http . StatusBadGateway , err
282+ return fmt . Errorf ( "unable to make HTTP request to OpenFaaS on URL: %s, error: %s" , s . GatewayURL , err )
241283 }
242284
243285 var body []byte
@@ -248,13 +290,13 @@ func (s *Client) deploy(ctx context.Context, method string, spec types.FunctionD
248290
249291 switch res .StatusCode {
250292 case http .StatusAccepted , http .StatusOK , http .StatusCreated :
251- return res . StatusCode , nil
293+ return nil
252294
253295 case http .StatusUnauthorized :
254- return res . StatusCode , fmt .Errorf ("unauthorized action, please setup authentication for this server" )
296+ return createHttpError ( fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res . StatusCode )
255297
256298 default :
257- return res . StatusCode , fmt .Errorf ("unexpected status code: %d, message: %q" , res .StatusCode , string (body ))
299+ return createHttpError ( fmt .Errorf ("unexpected status code: %d, message: %q" , res .StatusCode , string (body )), res . StatusCode )
258300 }
259301}
260302
@@ -280,7 +322,7 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
280322
281323 req , err := http .NewRequestWithContext (ctx , http .MethodPost , u .String (), bodyReader )
282324 if err != nil {
283- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s " , u .String (), err )
325+ return fmt .Errorf ("unable to create request for %s, error: %w " , u .String (), err )
284326 }
285327
286328 if s .ClientAuth != nil {
@@ -290,7 +332,7 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
290332 }
291333 res , err := http .DefaultClient .Do (req )
292334 if err != nil {
293- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
335+ return fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
294336
295337 }
296338
@@ -303,10 +345,10 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
303345 break
304346
305347 case http .StatusNotFound :
306- return fmt .Errorf ("function %s not found" , functionName )
348+ return createHttpError ( fmt .Errorf ("function %s not found" , functionName ), res . StatusCode )
307349
308350 case http .StatusUnauthorized :
309- return fmt .Errorf ("unauthorized action, please setup authentication for this server" )
351+ return createHttpError ( fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res . StatusCode )
310352
311353 default :
312354 var err error
@@ -315,7 +357,7 @@ func (s *Client) ScaleFunction(ctx context.Context, functionName, namespace stri
315357 return err
316358 }
317359
318- return fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut ))
360+ return createHttpError ( fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut )), res . StatusCode )
319361 }
320362 return nil
321363}
@@ -338,7 +380,7 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
338380
339381 req , err := http .NewRequestWithContext (ctx , http .MethodDelete , u .String (), bodyReader )
340382 if err != nil {
341- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s " , u .String (), err )
383+ return fmt .Errorf ("unable to create request for %s, error: %w " , u .String (), err )
342384 }
343385
344386 if s .ClientAuth != nil {
@@ -348,7 +390,7 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
348390 }
349391 res , err := http .DefaultClient .Do (req )
350392 if err != nil {
351- return fmt .Errorf ("cannot connect to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
393+ return fmt .Errorf ("unable to make HTTP request to OpenFaaS on URL: %s, error: %s" , s .GatewayURL , err )
352394
353395 }
354396
@@ -361,10 +403,10 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
361403 break
362404
363405 case http .StatusNotFound :
364- return fmt .Errorf ("function %s not found" , functionName )
406+ return createHttpError ( fmt .Errorf ("function %s not found" , functionName ), res . StatusCode )
365407
366408 case http .StatusUnauthorized :
367- return fmt .Errorf ("unauthorized action, please setup authentication for this server" )
409+ return createHttpError ( fmt .Errorf ("unauthorized action, please setup authentication for this server" ), res . StatusCode )
368410
369411 default :
370412 var err error
@@ -373,7 +415,7 @@ func (s *Client) DeleteFunction(ctx context.Context, functionName, namespace str
373415 return err
374416 }
375417
376- return fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut ))
418+ return createHttpError ( fmt .Errorf ("server returned unexpected status code %d, message: %q" , res .StatusCode , string (bytesOut )), res . StatusCode )
377419 }
378420 return nil
379421}
0 commit comments