From 97ab8247f62782246b6ac2210d8f73b87b2311f8 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 9 Feb 2026 19:20:57 +0000 Subject: [PATCH] Auto commit: 2026-02-09T19:20:56.861Z --- celery.log | 43 +++++++++ config/__pycache__/settings.cpython-311.pyc | Bin 6480 -> 6530 bytes config/settings.py | 4 +- core/__pycache__/models.cpython-311.pyc | Bin 7052 -> 7330 bytes core/__pycache__/urls.cpython-311.pyc | Bin 2769 -> 2919 bytes core/__pycache__/views.cpython-311.pyc | Bin 13656 -> 14505 bytes core/models.py | 8 +- core/templates/base.html | 1 + core/templates/core/activity_log.html | 94 ++++++++++++++++++++ core/urls.py | 7 +- core/views.py | 12 ++- requirements.txt | 1 + 12 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 core/templates/core/activity_log.html diff --git a/celery.log b/celery.log index 01f6805..78b9646 100644 --- a/celery.log +++ b/celery.log @@ -164,3 +164,46 @@ you should set broker_connection_retry_on_startup to True. [2026-02-09 18:31:03,713: INFO/ForkPoolWorker-1] Decoded JSON for 27: summary=True, tags=['development', 'research', 'new', 'company'] [2026-02-09 18:31:03,987: INFO/ForkPoolWorker-1] Successfully added tags ['development', 'research', 'new', 'company'] to bookmark 27 [2026-02-09 18:31:04,321: INFO/ForkPoolWorker-1] Task core.tasks.generate_summary[944ef664-f321-45b6-82f8-607291008ea6] succeeded in 13.666462198016234s: 'Generated summary and tags for bookmark 27' +[2026-02-09 19:04:23,495: INFO/MainProcess] Task core.tasks.process_bookmark[70bb649c-6afd-477d-ac5f-959b9ea12bb0] received +[2026-02-09 19:04:26,064: INFO/ForkPoolWorker-2] HTTP Request: GET https://facebook.com "HTTP/1.1 301 Moved Permanently" +[2026-02-09 19:04:26,361: INFO/ForkPoolWorker-2] HTTP Request: GET https://www.facebook.com/ "HTTP/1.1 400 Bad Request" +[2026-02-09 19:04:26,399: WARNING/ForkPoolWorker-2] Error fetching bookmark 28 (https://facebook.com): Client error '400 Bad Request' for url 'https://www.facebook.com/' +For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400. Trying base domain backup. +[2026-02-09 19:04:26,403: ERROR/ForkPoolWorker-2] Error fetching base domain for bookmark 28: Client error '400 Bad Request' for url 'https://www.facebook.com/' +For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 +[2026-02-09 19:04:27,088: INFO/MainProcess] Task core.tasks.generate_summary[b0feb8a7-8741-4581-a7f0-7e703e4a2e70] received +[2026-02-09 19:04:27,151: INFO/ForkPoolWorker-2] Task core.tasks.process_bookmark[70bb649c-6afd-477d-ac5f-959b9ea12bb0] succeeded in 3.190528256993275s: 'Processed bookmark 28' +[2026-02-09 19:04:28,313: INFO/ForkPoolWorker-1] Generating summary/tags for bookmark 28... +[2026-02-09 19:04:39,614: INFO/ForkPoolWorker-1] AI Raw Response for 28: { + "summary": "The webpage content could not be retrieved; requests to https://facebook.com and its base domain failed. No content was available for analysis, so no page details can be provided." +} +[2026-02-09 19:04:39,614: INFO/ForkPoolWorker-1] Decoded JSON for 28: summary=True, tags=[] +[2026-02-09 19:04:40,920: INFO/ForkPoolWorker-1] Task core.tasks.generate_summary[b0feb8a7-8741-4581-a7f0-7e703e4a2e70] succeeded in 13.627130784036126s: 'Generated summary for bookmark 28' +[2026-02-09 19:08:50,036: INFO/MainProcess] Task core.tasks.process_bookmark[ff409078-4458-47ef-b732-facaaf2cd761] received +[2026-02-09 19:08:50,262: INFO/ForkPoolWorker-2] HTTP Request: GET https://youtube.com "HTTP/1.1 301 Moved Permanently" +[2026-02-09 19:08:50,403: INFO/ForkPoolWorker-2] HTTP Request: GET https://www.youtube.com/ "HTTP/1.1 200 OK" +[2026-02-09 19:08:50,858: INFO/MainProcess] Task core.tasks.generate_summary[57582068-b4a2-48dc-9357-6d22a1ba1778] received +[2026-02-09 19:08:50,865: INFO/ForkPoolWorker-2] Task core.tasks.process_bookmark[ff409078-4458-47ef-b732-facaaf2cd761] succeeded in 0.824686923995614s: 'Processed bookmark 29' +[2026-02-09 19:08:50,927: INFO/ForkPoolWorker-1] Generating summary/tags for bookmark 29... +[2026-02-09 19:09:01,754: INFO/ForkPoolWorker-1] AI Raw Response for 29: { + "summary": "This is a YouTube footer listing navigational and legal links (About, Press, Copyright, Contact, Creators, Advertise, Developers, Terms, Privacy, Policy & Safety, How YouTube works, and Test new features). It also includes a 2026 copyright attribution to Google LLC." +} +[2026-02-09 19:09:01,754: INFO/ForkPoolWorker-1] Decoded JSON for 29: summary=True, tags=[] +[2026-02-09 19:09:01,769: INFO/ForkPoolWorker-1] Task core.tasks.generate_summary[57582068-b4a2-48dc-9357-6d22a1ba1778] succeeded in 10.908533619949594s: 'Generated summary for bookmark 29' +[2026-02-09 19:09:42,382: INFO/MainProcess] Task core.tasks.process_bookmark[21590aeb-6045-4341-8f97-80291d55e5bb] received +[2026-02-09 19:09:42,476: INFO/ForkPoolWorker-2] HTTP Request: GET https://youtube.com "HTTP/1.1 301 Moved Permanently" +[2026-02-09 19:09:42,577: INFO/ForkPoolWorker-2] HTTP Request: GET https://www.youtube.com/ "HTTP/1.1 200 OK" +[2026-02-09 19:09:42,874: INFO/MainProcess] Task core.tasks.generate_summary[3a3f1ae2-e049-44a0-8743-e0dd2392820f] received +[2026-02-09 19:09:42,877: INFO/ForkPoolWorker-2] Task core.tasks.process_bookmark[21590aeb-6045-4341-8f97-80291d55e5bb] succeeded in 0.48919728299370036s: 'Processed bookmark 29' +[2026-02-09 19:09:43,056: INFO/ForkPoolWorker-2] Generating summary/tags for bookmark 29... +[2026-02-09 19:09:53,936: INFO/ForkPoolWorker-2] AI Raw Response for 29: { + "summary": "The content is a YouTube footer listing navigation links to corporate and support resources — About, Press, Copyright, Contact, Creators, Advertise, Developers, Terms, Privacy, Policy & Safety, How YouTube works, and Test new features. It also includes a copyright notice attributing the site to Google LLC (2026)." +} +[2026-02-09 19:09:53,938: INFO/ForkPoolWorker-2] Decoded JSON for 29: summary=True, tags=[] +[2026-02-09 19:09:53,962: INFO/ForkPoolWorker-2] Task core.tasks.generate_summary[3a3f1ae2-e049-44a0-8743-e0dd2392820f] succeeded in 11.077497629041318s: 'Generated summary for bookmark 29' +[2026-02-09 19:20:12,359: INFO/MainProcess] Task core.tasks.process_bookmark[e19646b8-ea58-48a7-89e1-3d0429b9030a] received +[2026-02-09 19:20:26,876: INFO/ForkPoolWorker-2] HTTP Request: GET https://instagram.com "HTTP/1.1 301 Moved Permanently" +[2026-02-09 19:20:28,386: INFO/ForkPoolWorker-2] HTTP Request: GET https://www.instagram.com/ "HTTP/1.1 200 OK" +[2026-02-09 19:20:39,598: INFO/MainProcess] Task core.tasks.generate_summary[cfcfea70-d5a2-4694-9467-45333ac44d3f] received +[2026-02-09 19:20:40,610: INFO/ForkPoolWorker-2] Task core.tasks.process_bookmark[e19646b8-ea58-48a7-89e1-3d0429b9030a] succeeded in 24.209723198961s: 'Processed bookmark 30' +[2026-02-09 19:20:51,094: INFO/ForkPoolWorker-1] Task core.tasks.generate_summary[cfcfea70-d5a2-4694-9467-45333ac44d3f] succeeded in 8.763452520011924s: None diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 59678c394d10639ae5643b8b765daa9f3d4f7ddd..a9b1d179220e2a5307bd43eebbfd7e9b1458fa0e 100644 GIT binary patch delta 220 zcmca$)MU)NoR^o20SH=+x-zG31G4{)h7u_*x!E7INkmghJVCkE!N_KoXnCUm&s>^HP}2s!d{bq3*TU@+I&SMoKcBK di0K0ZjA-EdAj8E66o3&8TpuJh`-(9$0|0Z@K3D(% delta 180 zcmZoNzF@?=oR^o20SN3gyD}p-@-lHUa!nTC+|SOEoL`ix$u{``=hw}Dxn!8w6oHD0 zbT-TL9%o`)yZJf)V`ft`kdQf$xW$~AS5jmF;#z?SYY<@rB5Xl~J&?G?T3nEmSyJRY z`MdO4h#=!6x#DM`}DC6^oA!00Io)x38p3<&YBEnZD4|# z^BXRs&n(3(ngy~$d~!07%>iLEs!X21D9Wh{bRScySeE4ECT3Mmz9^{_wO|HK^~oEU z!x?!dbFkbN5DqO)EpkjQ$t=q(sr1QD-+YhdBclXoB2+}biU-Ej&B;%ne2z_#QF`(R zwrNa7B9oih3%S&R9%lsN;%}4xu?N+&F*1E%7&w9#*>-`=mpFDY3Q1oOGrS zikTxzd~yJ@AuCg=XqLp}UCgSSyit-VD!~kzs*_(Zhcj|dc3`=^*?{#8<788I1xBgK zVeHc;e`L?&QUki25r~UVPtN2Bs%K?n`oJ)71T)hIzRm8OyBH@cahvhW3-B{FaD!lx H3ebrFooieZ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 8790f1608578b77a480b346590fea45543687501..8dcc5c2e5ddbed674ef86d668c06315f4336ecb4 100644 GIT binary patch delta 3542 zcma)8eN0=|75BBVF%ITYLjapE;~2xE7-$LYlmr4@X_h7-l}NKBO7I?j597wh&V3J3 zvJKNTQ@T!Rmz}j;wPkJ8j|365Q!I7=>_eNht$%D9iKv2JH)+~`lcp-uCQVvZZRgxa zhGWb+C;ar@`JH?2Irn_rxAx4^nW}4Eug8YJpFaFza)0yXss?+=e!25TPPM6(sbIS8 zL>sf&ZToDh_kvBW(!5&vyJa@pGX7b=6CuG$$W|lkE@F2G_5oyl$a;#{uwZMDtwnZQ z0UJf@C)x$Q9qBrxD+*|0BZ93*wgG;`{2hLL3ZR~|NUu}qH6q(YEZk+=bIthHf^Wsa zbP3&7WP>Gkd{D4$$c9Sn(=FH?$c9T;j;ihBHaYSaIyE`pWe>4RnVIf`nZ)Rf!RJBo z)#WE0Lk`vkS6#!b1ODuqW;OW(<>&1qkK!6G6Lb+gNYF;mORx*UbSSBm?Bsp)>^gl` z;R)R=k7s5K?OB6A3RNDztDlqyA?k^s^&_5du>ts#Co!;7h-sZS7K^78U5{(2R4lf{ z_+u#58Nx6Zi6O!n|E(jJc!j1trmJb_@k zrjlAp)%iY>cnM|*&JgS-5Z(#5578?@FSvbAS#BSK37_g3BW4^v^cnInKFSVWMG}qR zECQYZIV;Wp{UdP(w3-ff5H8hp3QKW2+;Y_Be_!)6#*V^E+ZUR|?#D>?1g*6rP;ewT z1)X(|u;UP`dn70Pn?R}TwK6(I8a)Kn2&PLhGU;TTt0WN~(P5d+cuG?^Pm*++z(B6=ljGmVmOV9|x~51i$s~wo+zbrA@LU zkPR4(i=_A*!Dhey9SDz$vpi3{<(qrULMo`8QXX9(8w8Uu*EnoBasfu#{rQg?=NSva z;pV`hjfSLN=1%}tjaQ+M9Io~s+T4)N)%suhFj2w2>I=k|+-AEmSHB%g$eg){YkT5)5^Gvw!Odu9AHMk(@W^jg*E>?qIuMqVsfnsZQD4!Jl-tuq)t|+qdd~?PQ;>0c)si*#Ym63c>f_tMYmWyn~a! z8BFE)eWZ>OBRd18) zeNuS^4z@Ldy>H=v^wUjLEk=y0D@o%k{4GHag3Av}Wf zZZ2ue5>rA8ScX=PkHHoFUx%QDW&s=I?LA zi-9l0U|EA(b-at0|FRuE^Y-L$Kj#>J@j20OhMOC0J)hP1&vD^7Pt-`_Rc$EgELK(|#x@Pd-H$t#ys>^l1i>%xPp1-J{O`ZD%G$-zwc75*Lu-MK zm9qLZU+v<7yJgIoV|Q(((V9bKZ_FL{Kpn5BHsT1TL1TQ delta 3032 zcma)8Yiv|S6yDk0ZlBxN_O;!XZp*gx7Fr5@M5SWo8A`26O9h24%kFKvu#YnL7PN`B zJjAFdkO3v~urUN&KoeYziHQk`{4qxT3Au?H{EddhKgRgO^UdvxZ3}MFuQTVHGjq`*!#z&*|JU>)-5j{f%*}WwRxebIcNQs!lciirr$lPJia_ zWv^s&iOnN6BZaM&Y(B9C#AcMJ;ub5e^3tq&fjt{SHN6&PX|l&! z&yq)MeKzJ5cO0FpPL!n&v%=)z^dr_i?G!a$4^RLN056~k@Fam@3q&GH8efUAWB;K5 zAJUBUU_7R)uj(B7MyB5%j07~z@7L03?xo)ZUri(4A%a#Gg>j4`8MSzV2hGQ_SMnW3j1c?(61&jb-A(tl0Ky+gYXcB7+Uod^? z7H0}Wj_1H^6NfX3M4@Ys@(fKC8_$I_1UN`Q!GXatIAkNlF>&6tjBOR)x$0SK^1ka1 zW81~;;x{Vf!7pLSPN+Rx zB+?MX$w&)E)BxwhkPZO~0Wku_E^Xv-2(}X#nR;Nz9}7fPO+$GiElk@fK%%SE%X*Ug zOE0qaDk2kUW?UCa#Y4o;bsZ@*RwX7~rI`mtRsNc$>H}iH-LT_v7sd~erg>Yi*t{s2 zkSVvNfd$}ZwVmRo$0hm;^Mtj0jd^vNsLXMTUFBO?ueegKd&Z$K0hnj3X!H1bWpEFJ zH*L&VG^ys~(L$CT#U6lwxZ&wEjX5fs>pPRHE4Hz%2&KY|d~Gw2Hqsa6`(6IKo*jEs;v7#NM{ z8i(8bGy(OXhkfR=#af0%^`g;N(}fmcUh|Ag{3DXhH07!CgSBHNy`#}+fWNkVBoxrq z{;+ze3H~0z`f*X&>=9r3hJDgs{sA^laqk>tfWxA*cFMhTa4&hPb^{xiuI0#ABBoOs z(o=CB8vo0u60DSIc@d-8YcpS=R3AT~MJYbkap|OcBb^%v>fv}S#n1PkGa>yvvn<@Q zxSx}-03h%45@uM;C&|~K9i=4V4STy1tcTKK_W7Kxv3U)FRL0zWRG8giO_zZmQg#1y zC%YilE47Q2SusxD2zYdvUB(i?hg4=AX6{`Ue<{Ctu7J4;m}i&xqrsakH9rO4N>7qo ztXlr(^SF5>ov(qk15gB*Z5ts>mlI5v72Yu336M{^okrCAC#F9MVk>+On4tBElUX(5 zn-%T72gLRffV-@1p#!`nY&(B3!^QA{rAdmin Panel
  • Task Monitor
  • {% endif %} +
  • Activity Log
  • diff --git a/core/templates/core/activity_log.html b/core/templates/core/activity_log.html new file mode 100644 index 0000000..6b61379 --- /dev/null +++ b/core/templates/core/activity_log.html @@ -0,0 +1,94 @@ +{% extends "base.html" %} + +{% block title %}Activity Log{% endblock %} + +{% block content %} +
    +
    +

    Activity Log

    +

    History of your actions and changes.

    +
    +
    + +
    +
    +
    + + + + + + + + + + + {% for entry in log_entries %} + + + + + + + {% empty %} + + + + {% endfor %} + +
    TimeActionResourceDetails
    + {{ entry.timestamp|date:"M d, Y H:i" }} + + {% if entry.action == 0 %} + Created + {% elif entry.action == 1 %} + Updated + {% elif entry.action == 2 %} + Deleted + {% else %} + Accessed + {% endif %} + + {{ entry.content_type.name|capfirst }} +
    + {{ entry.object_repr }} +
    +
    + {% if entry.changes %} + {{ entry.changes|truncatechars:100 }} + {% else %} + - + {% endif %} +
    +
    + + No activity recorded yet. +
    +
    +
    +
    + +{% if is_paginated %} +
    + +
    +{% endif %} +{% endblock %} diff --git a/core/urls.py b/core/urls.py index a3a0f7e..f2fc4bd 100644 --- a/core/urls.py +++ b/core/urls.py @@ -5,7 +5,8 @@ from core.views import ( BookmarkListView, BookmarkCreateView, BookmarkDetailView, BookmarkUpdateView, BookmarkDeleteView, TeamListView, TeamDetailView, BookmarkShareToggleView, - BookmarkRegenerateView, SummaryUpdateView, ExtractionUpdateView + BookmarkRegenerateView, SummaryUpdateView, ExtractionUpdateView, + UserActivityLogView ) router = DefaultRouter() @@ -26,6 +27,8 @@ urlpatterns = [ path("teams/", TeamListView.as_view(), name="team-list"), path("teams//", TeamDetailView.as_view(), name="team-detail"), + path("activity/", UserActivityLogView.as_view(), name="activity-log"), + path("api/status/", ApiStatusView.as_view(), name="api-status"), path("api/", include(router.urls)), -] \ No newline at end of file +] diff --git a/core/views.py b/core/views.py index cce8307..17286f5 100644 --- a/core/views.py +++ b/core/views.py @@ -8,6 +8,7 @@ from django.db import transaction from django.http import JsonResponse, HttpResponseRedirect from .models import Bookmark, Team, Extraction, BookmarkShare, Summary from .tasks import process_bookmark +from auditlog.models import LogEntry class BookmarkListView(LoginRequiredMixin, ListView): model = Bookmark @@ -187,4 +188,13 @@ class BookmarkShareToggleView(LoginRequiredMixin, View): else: shared = True - return JsonResponse({'shared': shared}) \ No newline at end of file + return JsonResponse({'shared': shared}) + +class UserActivityLogView(LoginRequiredMixin, ListView): + model = LogEntry + template_name = 'core/activity_log.html' + context_object_name = 'log_entries' + paginate_by = 20 + + def get_queryset(self): + return LogEntry.objects.filter(actor=self.request.user).select_related('content_type', 'actor').order_by('-timestamp') diff --git a/requirements.txt b/requirements.txt index afba81a..71f799b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,4 @@ redis==5.0.8 django-filter==24.3 flower==2.0.1 django-revproxy==0.11.0 +django-auditlog==3.4.1