faas-cli icon indicating copy to clipboard operation
faas-cli copied to clipboard

Proposal: add --debug flag to `deploy` (print out HTTP request)

Open ewilde opened this issue 5 years ago • 5 comments

During provider development i've found it helpful to log the the entire request/response sent from the CLI to the gateway.

Expected Behaviour

faas cli deploy --debug

Current behaviour

$faas deploy 
Deploying: echo.
Unexpected status: 400, message: Please provide a valid route /function/function_name.

Function 'echo' failed to deploy with status code: 400

Future behaviour with debug flag

$ faas deploy --debug                                    
Deploying: echo.
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
2019/05/10 18:54:21
-------- deploy request:echo --------
PUT /system/functions HTTP/1.1
Host: 127.0.0.1:8080
Authorization: Basic YWRtaW46OGFmYzg4N2YxMjM3NGViZmMwN2I0ZTZjMTQ3MzY5Y2Y1NzQ5MGNmZTA1N2ZkOGIyYTE1ZTk2MWEwZjc2Y2ZhNQ==

{"service":"echo","image":"ewilde/echo:latest","network":"","envProcess":"python index.py","envVars":{},"constraints":null,"secrets":[],"labels":{},"annotations":{},"limits":null,"requests":null,"readOnlyRootFilesystem":false}
-------------------------------------
2019/05/10 18:54:21
-------- deploy response:echo --------
HTTP/1.1 400 Bad Request
Content-Length: 53
Content-Type: text/plain; charset=utf-8
Date: Fri, 10 May 2019 17:54:21 GMT

Please provide a valid route /function/function_name.
-------------------------------------

Unexpected status: 400, message: Please provide a valid route /function/function_name.

I have a private fork with the above functionality, if it's something the community wants I can PR it in / or adapt based on feedback.

Alternatives

  • Run faas-cli through a proxy which logs request/response (not such great DX?)

Extensions

  • Flag could get proxied as a header X-OpenFaaS-Trace to gateways / provider which could debug log request/response as each hop

ewilde avatar May 10 '19 17:05 ewilde

I'm not against this at all, but perhaps a better DX might be simply adding the error message to the output.

Rather than Function 'echo' failed to deploy with status code: 400

Function 'echo' failed to deploy. Bad Request. Message: 'Please provide a valid route /function/function_name.'

That would be in addition to your suggestion for the --debug command. Perhaps -v --verbose instead?

It would be good to be able to also get the full request and response output to diagnose an issue better. Generally speaking, at least from my experience, just having the error message returned would greatly improve the experience.

burtonr avatar May 10 '19 21:05 burtonr

@burtonr apologies if it wasn’t clear, my proposal is to add full request/response logging with debug flag

ewilde avatar May 11 '19 06:05 ewilde

I can see how this might be useful, but what about using a simple intercepting proxy instead?

You'll get complete logs of request and response with the ability to replay etc.

alexellis avatar May 11 '19 08:05 alexellis

@alexellis I agree that at the CLI level this can be achieved with a proxy. I mentioned this in the issue under ‘alternatives’.

Couple of draw backs:

  • won’t work with TLS
  • DX, not as simple
  • won’t help with extending to server components see: extension point above

ewilde avatar May 11 '19 10:05 ewilde

Hi what about https://mitmproxy.org/ ?

alexellis avatar May 11 '19 10:05 alexellis