diff --git a/butler/views.py b/butler/views.py index 7525b6a..3c8e7c2 100644 --- a/butler/views.py +++ b/butler/views.py @@ -60,29 +60,46 @@ def ip_mgmt_view(request): return render(request, "butler/ip_mgmt.html", {"records": records, "var_search": query}) +import logging +from opentelemetry import trace + +logger = logging.getLogger(__name__) +tracer = trace.get_tracer(__name__) # 트레이서 가져오기 + def add_ip_record(request): - # print(f"Create_Record_IP_ADDRS") if request.method == "POST": network_nm = request.POST.get("network_nm") ip_addrs = request.POST.get("ip_addrs") svr_nm = request.POST.get("svr_nm") contents = request.POST.get("contents") remark = request.POST.get("remark") - # 작성자 (author)는 로그인된 사용자로 설정 author = request.user - # 데이터 저장 - IPManagementRecord.objects.create( - network_nm=network_nm, - ip_addrs=ip_addrs, - svr_nm=svr_nm, - contents=contents, - remark=remark, - author=author, - ) - - # 2025-04-14 Log 등록 + + # 2025-04-14 트레이스 span 생성 + with tracer.start_as_current_span("create_ip_record") as span: + # 데이터 저장 + IPManagementRecord.objects.create( + network_nm=network_nm, + ip_addrs=ip_addrs, + svr_nm=svr_nm, + contents=contents, + remark=remark, + author=author, + ) + + # 2025-04-14 Jaeger용 Event 추가 + span.add_event( + "Saved IPManagementRecord", + attributes={ + "ip_addrs": ip_addrs, + "svr_nm": svr_nm, + "desc": "jager logs test", + } + ) + + # 2025-04-14 로그 등록 (콘솔+FluentBit용) logger.info(f"Create_Record_IP_ADDRS: {ip_addrs}") - + return redirect("/ip_mgmt") diff --git a/butler/views.py.bakcup b/butler/views.py.bakcup new file mode 100644 index 0000000..7525b6a --- /dev/null +++ b/butler/views.py.bakcup @@ -0,0 +1,157 @@ +from django.shortcuts import render, redirect, get_object_or_404 +from django.contrib.auth.decorators import login_required +from django.views.generic import TemplateView +from pathlib import Path +import markdown +import os +import logging # 2025-04-14 Log 등록 +from .models import IPManagementRecord +from blog.models import Post +from board_notice.models import BoardNotice +from django.db.models import Q + +# 2025-04-14 Log 등록 +logger = logging.getLogger(__name__) + +class LandingPageView(TemplateView): + template_name = "butler/landing.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + # context['var'] var를 templates로 전달해서 보여지는 것. + context['blog_posts'] = Post.objects.order_by('-created_at')[:3] + context['board_notices'] = BoardNotice.objects.order_by('-created_at')[:3] + return context + +# --- ip management --- +# def ip_mgmt_view(request): +# # records = IPManagementRecord.objects.all() +# if request.user.is_authenticated: +# # records = IPManagementRecord.objects.filter(author=request.user).order_by( +# records = IPManagementRecord.objects.order_by( +# "ip_addrs" +# ) +# else: +# # records = IPManagementRecord.objects.none() +# records = IPManagementRecord.objects.all().order_by("ip_addrs") +# return render(request, "butler/ip_mgmt.html", {"records": records}) + + +def ip_mgmt_view(request): + query = request.GET.get("var_search", "").strip() + + records = IPManagementRecord.objects.order_by( + "ip_addrs" + ) + + if query: + records = records.filter( + # Q(author__username__icontains=query) | Q(author__email__icontains=query) + Q(author__username__icontains=query) | Q(network_nm__icontains=query) + ) + """ + SELECT * FROM ip_management_record AS ip JOIN auth_user AS au + ON ip.author_id = au.id + WHERE au.username LIKE CONCAT('%', 조회할 값, '%') + OR au.email LIKE CONCAT('%', 조회할 값, '%') + ORDER BY ip.ip_addrs; + """ + records = records.order_by("ip_addrs") + return render(request, "butler/ip_mgmt.html", {"records": records, "var_search": query}) + + +def add_ip_record(request): + # print(f"Create_Record_IP_ADDRS") + if request.method == "POST": + network_nm = request.POST.get("network_nm") + ip_addrs = request.POST.get("ip_addrs") + svr_nm = request.POST.get("svr_nm") + contents = request.POST.get("contents") + remark = request.POST.get("remark") + # 작성자 (author)는 로그인된 사용자로 설정 + author = request.user + # 데이터 저장 + IPManagementRecord.objects.create( + network_nm=network_nm, + ip_addrs=ip_addrs, + svr_nm=svr_nm, + contents=contents, + remark=remark, + author=author, + ) + + # 2025-04-14 Log 등록 + logger.info(f"Create_Record_IP_ADDRS: {ip_addrs}") + + return redirect("/ip_mgmt") + + +def delete_ip_records(request): + # print(f"Delete_Record_IP_ADDRS") + if request.method == "POST": + selected_ids = request.POST.getlist("selected_records") + if selected_ids: + IPManagementRecord.objects.filter(id__in=selected_ids).delete() + + # 2025-04-14 Log 등록 + logger.info(f"Delete_Record_IP_ADDRS_idx: {selected_ids}") + return redirect("/ip_mgmt") + + +def edit_ip_record(request, pk): + # print(f"Edit_Record_IP_ADDRS") + record = get_object_or_404(IPManagementRecord, pk=pk) + + # 검색 키워드 유지 + var_search = request.GET.get("var_search") or request.POST.get("var_search") + + if request.method == "POST": + record.network_nm = request.POST.get("network_nm") + record.ip_addrs = request.POST.get("ip_addrs") + record.svr_nm = request.POST.get("svr_nm") + record.contents = request.POST.get("contents") + record.remark = request.POST.get("remark") + record.save() + + # 2025-04-14 Log 등록 + logger.info(f"Edit_Record_IP_ADDRS: {record.ip_addrs}") + + if var_search: + return redirect(f"/ip_mgmt?var_search={var_search}") + return redirect("/ip_mgmt") + + + return render(request, "butler/ip_mgmt.html", {"record": record}) + + + +# --- privacy +def privacy_view(request): + # 'docs/privacy.md' 파일을 읽기 + file_path = os.path.join("docs", "docs_md_files/privacy.md") + with open(file_path, "r", encoding="utf-8") as file: + text = file.read() + + file_path = Path("docs/docs_md_files/privacy.md") + + with file_path.open("r", encoding="utf-8") as file: + text = file.read() + # Markdown을 HTML로 변환 + # html_content = markdown.markdown(text) + # Markdown을 HTML로 변환, tables 확장 활성화 + html_content = markdown.markdown( + text, + extensions=[ + "tables", # 테이블 지원 확장 + ], + ) + + # 변환된 HTML을 템플릿에 전달 + return render(request, "butler/privacy.html", {"content": html_content}) + + +def test_view(request): + return render( + request, + "butler/test.html", + ) diff --git a/version b/version index 205ab8a..65f22a3 100644 --- a/version +++ b/version @@ -1 +1 @@ -dev_0.0.41 \ No newline at end of file +dev_0.0.42 \ No newline at end of file