Skip to content

Commit 7fd5fba

Browse files
authored
If enabled, print log framing content to stdout/stderr (#81)
* If enabled, print log framing content to stdout/stderr * Test log frame header * Refactor, get env values at module level * Minor refactor
1 parent 261c6c4 commit 7fd5fba

3 files changed

Lines changed: 32 additions & 1 deletion

File tree

fdk/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
CONTENT_LENGTH = "Content-Length"
3232
FN_ENFORCED_RESPONSE_CODES = [200, 502, 504]
3333
FN_DEFAULT_RESPONSE_CODE = 200
34+
FN_LOGFRAME_NAME = "FN_LOGFRAME_NAME"
35+
FN_LOGFRAME_HDR = "FN_LOGFRAME_HDR"
3436

3537

3638
# todo: python 3.8 is on its way, make more flexible

fdk/event_handler.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,18 @@
1414

1515
import io
1616
import logging
17+
import os
18+
import sys
1719

1820
from fdk import constants
1921

2022
from fdk.async_http import response
2123

2224
logger = logging.getLogger(__name__)
2325

26+
fn_logframe_name = os.environ.get(constants.FN_LOGFRAME_NAME)
27+
fn_logframe_hdr = os.environ.get(constants.FN_LOGFRAME_HDR)
28+
2429

2530
def event_handle(handle_code):
2631
"""
@@ -32,9 +37,11 @@ def event_handle(handle_code):
3237
async def pure_handler(request):
3338
from fdk import runner
3439
logger.info("in pure_handler")
40+
headers = dict(request.headers)
41+
log_frame_header(headers)
3542
func_response = await runner.handle_request(
3643
handle_code, constants.HTTPSTREAM,
37-
headers=dict(request.headers), data=io.BytesIO(request.body))
44+
headers=headers, data=io.BytesIO(request.body))
3845
logger.info("request execution completed")
3946

4047
headers = func_response.context().GetResponseHeaders()
@@ -50,3 +57,13 @@ async def pure_handler(request):
5057
)
5158

5259
return pure_handler
60+
61+
62+
def log_frame_header(headers):
63+
if all((fn_logframe_name, fn_logframe_hdr)):
64+
frm = fn_logframe_hdr.lower()
65+
if frm in headers:
66+
id = headers.get(frm)
67+
frm = "\n{}={}\n".format(fn_logframe_name, id)
68+
print(frm, file=sys.stderr, flush=True)
69+
print(frm, file=sys.stdout, flush=True)

fdk/tests/test_http_stream.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,15 @@ async def test_enforced_response_codes_504():
143143

144144
assert http_resp.status == 504
145145
assert http_resp.headers.get(constants.FN_HTTP_STATUS) == "504"
146+
147+
148+
def test_log_frame_header(monkeypatch, capsys):
149+
monkeypatch.setattr("fdk.event_handler.fn_logframe_name", "foo")
150+
monkeypatch.setattr("fdk.event_handler.fn_logframe_hdr", "Fn-Call-Id")
151+
headers = {"fn-call-id": 12345}
152+
153+
event_handler.log_frame_header(headers)
154+
155+
captured = capsys.readouterr()
156+
assert "\nfoo=12345\n" in captured.out
157+
assert "\nfoo=12345\n" in captured.err

0 commit comments

Comments
 (0)