From fade276a6b3bf5375f5bb572b52095f4890b071a Mon Sep 17 00:00:00 2001 From: Abe Date: Sun, 26 May 2024 00:30:00 -0400 Subject: [PATCH] Log Request Headers --- drf_api_sample/db.sqlite3 | Bin 163840 -> 167936 bytes rest_framework_tracking/admin.py | 2 ++ rest_framework_tracking/base_mixins.py | 2 ++ rest_framework_tracking/base_models.py | 1 + .../migrations/0014_apirequestlog_headers.py | 17 +++++++++++++++++ 5 files changed, 22 insertions(+) create mode 100644 rest_framework_tracking/migrations/0014_apirequestlog_headers.py diff --git a/drf_api_sample/db.sqlite3 b/drf_api_sample/db.sqlite3 index 1a5f9980c59245bd7c0b3dbb90ba07645599be3f..1b4af35b60d56c9bdf94751fc90c8d93fa638afa 100644 GIT binary patch delta 1357 zcmZ`(Pi)&%825XQ?Z!#!gtlZfY2#!aOJG~=#7*aQYsuP)ZvB&qismpO<27F5=3kpQ zTQ3u}fT0PbwFL1H5)!J=cHk7MH4+u22o60UvAnm|zlNf>>SP$@=PGy2%>GwT- zPru*y{XRcGFE6vppRy}Hk3N$dT9K>=l-bxjdWl5ID zdnlqSmB5X%f?##b8`xmelp;G$;vzJmtqz57kcly4Pn9 zY%#l?|=lIScu)FMOma-R_ZTbW1 zHt-Wt-JGzY^J(xoDwIHt#eOW{r?Hy`06N}$!L%{nKmc4jh;Hb>3&O~A4s@U|b+Cop zIl!Zj=D`xZ_ZCsV4t$N>OCSXsVh)_N0d^hS`zyJ&?cTTpXud(a;bX3EuR${&#?i`o z3#j00#q+4v)tyK>J7+;dLSP zB-}v!DfnC+a%4E17OYkogytN;&zP-DITNzhm< z!XD5O;xDV^xvW|aM+G6mPro`jiQXwemHp?kp{)Y&CXeu;Czm(G8`_f5r1GQVXGSOZ zaQNIza$1>9Or9MJ@6#fD@|CAVXJ?v{NF-t|nn9%MFb@u+A9VOOdBNn-a1KV1Plv8O zt6$B-0V^FP(`Eq8&ch6Fpsjg$m0UD?Epe<9pNCPcD08K>ro`rC4G$1&iUDhtmAYFI zLVR+X4_UP5JNaNckv5ZpegS zf*z#yFo`F`gpfdtwMr8YNa8^~$;s%=gGUb}Y7au93sEk1lK*?}pZwSt#3 z3&%`uhGDAz3aNP|UDIH3GpBu@OH>EAphl(&@8CktG&YAzrE%3;BvFkvttZ19l`JXn zaKV-dN^&lA{*cIkvnp8SOk#%Uplc`wW zU~+VFOb}REw{IsWqDi&8IkV=zgltQ-{SP;}JU0fr^7Ci&3mpHG^`*%JHN#q#tU&%< z2U2XO)Ek%!GTaUq#EH_!;z!}B;gg|GH>c~?ZfNKEEk2{!1rNH&TuBo*Xr5%rca}~? z&}#m56d}lu#L;Ddx(52e2elQ3Syw$T$uhd@NQG|2H4w-3T5N%in;>n3r z-$*zSb=q%-lQ(1GWOW05A49YBMGV>VZ*HM>jyj_#gY-G{<#*T8rg41>Y3w=8;xD}1 z560zfWL&ocGGg^1oDg8JxwKMLgg}%h#)6TH^US=PJnv7FpL~~UZJC2!1S9J+Sv#})S$p1U1)|T+OB|+<`q!b zUc&5ksHaC;VHMq>Z(HF9o=Z&gQYeJ(Df>UQzi3ocw@p0W(cS6q>9qIw&jvcFzYVJB qKqG8HS5LmN31mbQ9=J-oJRn(J>eT;Em0CDeIaJwS+Tbfr2f06J_S+%= diff --git a/rest_framework_tracking/admin.py b/rest_framework_tracking/admin.py index d0691d3..593a80f 100644 --- a/rest_framework_tracking/admin.py +++ b/rest_framework_tracking/admin.py @@ -50,6 +50,7 @@ class APIRequestLogAdmin(admin.ModelAdmin): "errors", "status_code", "user_agent", + "headers", ) def changelist_view(self, request, extra_context=None): @@ -95,3 +96,4 @@ def chart_data(self, start_date, end_date): admin.site.register(APIRequestLog, APIRequestLogAdmin) + diff --git a/rest_framework_tracking/base_mixins.py b/rest_framework_tracking/base_mixins.py index a4725a5..6c64484 100644 --- a/rest_framework_tracking/base_mixins.py +++ b/rest_framework_tracking/base_mixins.py @@ -85,6 +85,7 @@ def finalize_response(self, request, response, *args, **kwargs): "response_ms": self._get_response_ms(), "response": self._clean_data(rendered_content), "status_code": response.status_code, + "headers": self._clean_data(dict(request.headers)), } ) if self._clean_data(request.query_params.dict()) == {}: @@ -214,3 +215,4 @@ def _clean_data(self, data): if key.lower() in SENSITIVE_FIELDS: data[key] = self.CLEANED_SUBSTITUTE return data + diff --git a/rest_framework_tracking/base_models.py b/rest_framework_tracking/base_models.py index a05ddf2..706b407 100644 --- a/rest_framework_tracking/base_models.py +++ b/rest_framework_tracking/base_models.py @@ -48,6 +48,7 @@ class BaseAPIRequestLog(models.Model): response = models.TextField(null=True, blank=True) errors = models.TextField(null=True, blank=True) status_code = models.PositiveIntegerField(null=True, blank=True, db_index=True) + headers = models.JSONField(null=True, blank=True) objects = PrefetchUserManager() class Meta: diff --git a/rest_framework_tracking/migrations/0014_apirequestlog_headers.py b/rest_framework_tracking/migrations/0014_apirequestlog_headers.py new file mode 100644 index 0000000..607f1d8 --- /dev/null +++ b/rest_framework_tracking/migrations/0014_apirequestlog_headers.py @@ -0,0 +1,17 @@ +# Generated by Django 5.0.6 on 2024-05-26 04:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("rest_framework_tracking", "0013_apirequestlog_user_agent"), + ] + + operations = [ + migrations.AddField( + model_name="apirequestlog", + name="headers", + field=models.JSONField(blank=True, null=True), + ), + ]