Compare commits

..

No commits in common. "main" and "dev" have entirely different histories.
main ... dev

22 changed files with 164 additions and 462 deletions

View File

@ -1,39 +1,19 @@
{% extends "components/base.html" %}
{% block title %}Blog Posts{% endblock %}
{% block title %}Post{% endblock %}
{% block main_area %}
<h1 class="pt-3 mb-4 fw-bold">📝 Latest Posts</h1>
{% if request.user.is_authenticated %}
<div class="mb-4">
<a href="{% url 'blog:create_post' %}" class="btn btn-success">
<i class="bi bi-pencil-square"></i> Write a New Post
</a>
</div>
{% endif %}
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4">
{% for post in posts %}
<div class="col">
<div class="card h-100 shadow-sm">
<div class="card-body d-flex flex-column">
<h5 class="card-title fw-bold">{{ post.title }}</h5>
<p class="card-text text-muted">{{ post.summary }}</p>
<p class="card-text text-muted">{{ post.contents|truncatechars:50 }}</p>
<div class="mt-auto">
<a href="{{ post.get_absolute_url }}" class="btn btn-outline-primary w-100">
Read More →
</a>
</div>
</div>
<div class="card-footer text-end small text-muted">
{{ post.author }} · {{ post.created_at|date:"Y-m-d" }}
</div>
</div>
</div>
{% empty %}
<p class="text-muted">No posts available yet.</p>
{% endfor %}
</div>
{% endblock %}
<h1 class="pt-3">Blog Posts</h1>
{% if request.user.is_authenticated %}
<a href="{% url 'blog:create_post' %}" class="btn btn-primary mb-3">Create New Post</a>
{% endif %}
<ul class="list-group">
{% for post in posts %}
<li class="list-group-item">
<h5>{{ post.title }}</h5>
<p>{{ post.summary }}</p>
<a href="{{ post.get_absolute_url }}" class="btn btn-secondary">Read More</a>
</li>
{% endfor %}
</ul>
{% endblock %}

View File

@ -7,7 +7,7 @@ class IPManagementRecord(models.Model):
network_nm = models.CharField(max_length=100) # NETWORK_NM
ip_addrs = models.CharField(max_length=50) # IP_ADDRS
svr_nm = models.CharField(max_length=100) # SVR_NM
contents = models.TextField(blank=True, null=True) # desc -> contents
contents = models.TextField(blank=True, null=True) # DESC
remark = models.TextField(blank=True, null=True) # REMARK
created_at = models.DateTimeField(auto_now_add=True) # 생성 시간 자동 기록
updated_at = models.DateTimeField(auto_now=True) # 수정 시간 자동 기록

View File

@ -1,200 +0,0 @@
{% extends "components/base.html" %}
{% block title %}IP Management{% endblock %}
{% block main_area %}
<h2 class="fw-bold pt-3 pb-2">IP 관리 대장</h2>
{% if not request.user.is_authenticated %}
<p class="text-danger">비로그인 익명사용자로 접근 중입니다.
<br>로그인시 로그인 사용자가 등록한 데이터만 조회됩니다.
</p>
{% endif %}
<!-- 검색 폼 -->
<div class="row">
<div class="col-4">
</div>
<div class="col-4">
</div>
<div class="col-4">
<form method="get" class="mb-3">
<div class="input-group">
<input type="text" name="var_search" class="form-control" placeholder="Search by Author or Network Name..."
value="{{ var_search }}">
<button type="submit" class="btn btn-outline-primary">Search</button>
</div>
</form>
</div>
</div>
<!-- IP 레코드 목록 -->
<form id="recordForm" method="post" action="">
{% csrf_token %}
<table class="table table-striped table-hover table-bordered">
<thead class="table-dark">
<tr>
<th scope="col">Select</th>
<th scope="col">Network Name</th>
<th scope="col">Location</th>
<th scope="col">Server Name</th>
<th scope="col">IP Address</th>
<th scope="col">Remark</th>
<th scope="col">Author</th>
<th scope="col">Updated At</th>
</tr>
</thead>
<tbody>
{% for record in records %}
<tr data-record-id="{{ record.id }}">
<td class="text-center">
<input type="checkbox" name="selected_records" value="{{ record.id }}"
class="form-check-input record-checkbox">
</td>
<td>{{ record.network_nm }}</td>
<td>{{ record.contents }}</td>
<td>{{ record.svr_nm }}</td>
<td>{{ record.ip_addrs }}</td>
<td>{{ record.remark }}</td>
<td>{{ record.author }}</td>
<td>{{ record.updated_at|date:"Y-m-d H:i" }}</td>
</tr>
<!-- 수정 모달 -->
<div class="modal fade" id="editDataModal-{{ record.id }}" tabindex="-1"
aria-labelledby="editDataModalLabel-{{ record.id }}" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-warning text-dark">
<h5 class="modal-title" id="editDataModalLabel-{{ record.id }}">Edit IP Record</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- 데이터 수정 폼 -->
<form id="editDataForm-{{ record.id }}" method="post" action="{% url 'butler:ip_mgmt_edit' record.id %}">
{% csrf_token %}
<div class="mb-3">
<label for="networkNm-{{ record.id }}" class="form-label">Network Name</label>
<input type="text" class="form-control" id="networkNm-{{ record.id }}" name="network_nm"
value="{{ record.network_nm }}" required="required">
</div>
<div class="mb-3">
<label for="ipAddrs-{{ record.id }}" class="form-label">IP Address</label>
<input type="text" class="form-control" id="ipAddrs-{{ record.id }}" name="ip_addrs"
value="{{ record.ip_addrs }}" required="required">
</div>
<div class="mb-3">
<label for="svrNm-{{ record.id }}" class="form-label">Server Name</label>
<input type="text" class="form-control" id="svrNm-{{ record.id }}" name="svr_nm"
value="{{ record.svr_nm }}" required="required">
</div>
<div class="mb-3">
<label for="contents-{{ record.id }}" class="form-label">Location</label>
<textarea class="form-control" id="contents-{{ record.id }}" name="contents">{{ record.contents }}</textarea>
</div>
<div class="mb-3">
<label for="remark-{{ record.id }}" class="form-label">Remark</label>
<textarea class="form-control" id="remark-{{ record.id }}"
name="remark">{{ record.remark }}</textarea>
</div>
<button type="submit" class="btn btn-primary">Save Changes</button>
</form>
</div>
</div>
</div>
</div>
{% empty %}
<tr>
<td colspan="9" class="text-center">No records found.</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if request.user.is_authenticated %}
<!-- 버튼 컨테이너 -->
<div class="d-flex justify-content-between align-items-center mb-3">
<!-- 데이터 등록 버튼 -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addDataModal">
<i class="bi bi-plus-lg"></i>
Add New IP Record
</button>
<!-- 전체 삭제 버튼 -->
<button type="submit" formaction="{% url 'butler:ip_mgmt_delete' %}" class="btn btn-danger">
<i class="bi bi-trash"></i>
Delete Selected
</button>
<!-- 수정 버튼 -->
<button type="button" id="editSelectedButton" class="btn btn-warning" disabled="disabled">
<i class="bi bi-pencil-square"></i>
Edit Selected
</button>
</div>
{% endif %}
</form>
<!-- 데이터 등록 모달 -->
<div class="modal fade" id="addDataModal" tabindex="-1" aria-labelledby="addDataModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-success text-white">
<h5 class="modal-title" id="addDataModalLabel">Add New IP Record</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- 데이터 등록 폼 -->
<form id="addDataForm" method="post" action="{% url 'butler:ip_mgmt_add' %}">
{% csrf_token %}
<div class="mb-3">
<label for="networkNm" class="form-label">Network Name</label>
<input type="text" class="form-control" id="networkNm" name="network_nm" required="required">
</div>
<div class="mb-3">
<label for="ipAddrs" class="form-label">IP Address</label>
<input type="text" class="form-control" id="ipAddrs" name="ip_addrs" required="required">
</div>
<div class="mb-3">
<label for="svrNm" class="form-label">Server Name</label>
<input type="text" class="form-control" id="svrNm" name="svr_nm" required="required">
</div>
<div class="mb-3">
<label for="contents" class="form-label">Location</label>
<textarea class="form-control" id="contents" name="contents"></textarea>
</div>
<div class="mb-3">
<label for="remark" class="form-label">Remark</label>
<textarea class="form-control" id="remark" name="remark"></textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
const editButton = document.getElementById('editSelectedButton');
const checkboxes = document.querySelectorAll('.record-checkbox');
// Event listener to enable/disable the edit button
document.addEventListener('change', function () {
const selected = [...checkboxes].filter(checkbox => checkbox.checked);
if (selected.length === 1) {
editButton.disabled = false;
editButton.dataset.recordId = selected[0].value;
} else {
editButton.disabled = true;
delete editButton.dataset.recordId;
}
});
// Event listener to open the edit modal
editButton.addEventListener('click', function () {
const recordId = editButton.dataset.recordId;
if (recordId) {
const modal = new bootstrap.Modal(document.getElementById(`editDataModal-${recordId}`));
modal.show();
}
});
});
</script>
{% endblock %}

View File

@ -11,8 +11,10 @@
{% endif %}
<!-- 검색 폼 -->
<div class="row">
<div class="col-4"></div>
<div class="col-4"></div>
<div class="col-4">
</div>
<div class="col-4">
</div>
<div class="col-4">
<form method="get" class="mb-3">
<div class="input-group">
@ -23,7 +25,6 @@
</form>
</div>
</div>
<!-- IP 레코드 목록 -->
<form id="recordForm" method="post" action="">
{% csrf_token %}
@ -32,9 +33,9 @@
<tr>
<th scope="col">Select</th>
<th scope="col">Network Name</th>
<th scope="col">Server Name</th>
<th scope="col">Location</th>
<th scope="col">IP Address</th>
<th scope="col">Server Name</th>
<th scope="col">Description</th>
<th scope="col">Remark</th>
<th scope="col">Author</th>
<th scope="col">Updated At</th>
@ -48,13 +49,57 @@
class="form-check-input record-checkbox">
</td>
<td>{{ record.network_nm }}</td>
<td>{{ record.contents }}</td>
<td>{{ record.svr_nm }}</td>
<td>{{ record.ip_addrs }}</td>
<td>{{ record.svr_nm }}</td>
<td>{{ record.desc }}</td>
<td>{{ record.remark }}</td>
<td>{{ record.author }}</td>
<td>{{ record.updated_at|date:"Y-m-d H:i" }}</td>
</tr>
<!-- 수정 모달 -->
<div class="modal fade" id="editDataModal-{{ record.id }}" tabindex="-1"
aria-labelledby="editDataModalLabel-{{ record.id }}" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-warning text-dark">
<h5 class="modal-title" id="editDataModalLabel-{{ record.id }}">Edit IP Record</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- 데이터 수정 폼 -->
<form id="editDataForm-{{ record.id }}" method="post" action="{% url 'butler:ip_mgmt_edit' record.id %}">
{% csrf_token %}
<div class="mb-3">
<label for="networkNm-{{ record.id }}" class="form-label">Network Name</label>
<input type="text" class="form-control" id="networkNm-{{ record.id }}" name="network_nm"
value="{{ record.network_nm }}" required="required">
</div>
<div class="mb-3">
<label for="ipAddrs-{{ record.id }}" class="form-label">IP Address</label>
<input type="text" class="form-control" id="ipAddrs-{{ record.id }}" name="ip_addrs"
value="{{ record.ip_addrs }}" required="required">
</div>
<div class="mb-3">
<label for="svrNm-{{ record.id }}" class="form-label">Server Name</label>
<input type="text" class="form-control" id="svrNm-{{ record.id }}" name="svr_nm"
value="{{ record.svr_nm }}" required="required">
</div>
<div class="mb-3">
<label for="desc-{{ record.id }}" class="form-label">Description</label>
<textarea class="form-control" id="desc-{{ record.id }}" name="desc">{{ record.desc }}</textarea>
</div>
<div class="mb-3">
<label for="remark-{{ record.id }}" class="form-label">Remark</label>
<textarea class="form-control" id="remark-{{ record.id }}"
name="remark">{{ record.remark }}</textarea>
</div>
<button type="submit" class="btn btn-primary">Save Changes</button>
</form>
</div>
</div>
</div>
</div>
{% empty %}
<tr>
<td colspan="9" class="text-center">No records found.</td>
@ -63,67 +108,30 @@
</tbody>
</table>
{% if request.user.is_authenticated %}
<!-- 버튼 컨테이너 -->
<div class="d-flex justify-content-between align-items-center mb-3">
<!-- 데이터 등록 버튼 -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addDataModal">
<i class="bi bi-plus-lg"></i> Add New IP Record
<i class="bi bi-plus-lg"></i>
Add New IP Record
</button>
<!-- 전체 삭제 버튼 -->
<button type="submit" formaction="{% url 'butler:ip_mgmt_delete' %}" class="btn btn-danger">
<i class="bi bi-trash"></i> Delete Selected
<i class="bi bi-trash"></i>
Delete Selected
</button>
<!-- 수정 버튼 -->
<button type="button" id="editSelectedButton" class="btn btn-warning" disabled="disabled">
<i class="bi bi-pencil-square"></i> Edit Selected
<i class="bi bi-pencil-square"></i>
Edit Selected
</button>
</div>
{% endif %}
</form>
<!-- 수정 모달들 (form 중첩 제거) -->
{% for record in records %}
<div class="modal fade" id="editDataModal-{{ record.id }}" tabindex="-1"
aria-labelledby="editDataModalLabel-{{ record.id }}" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-warning text-dark">
<h5 class="modal-title" id="editDataModalLabel-{{ record.id }}">Edit IP Record</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="editDataForm-{{ record.id }}" method="post"
action="{% url 'butler:ip_mgmt_edit' record.id %}{% if var_search %}?var_search={{ var_search }}{% endif %}">
{% csrf_token %}
{% if var_search %}<input type="hidden" name="var_search" value="{{ var_search }}">{% endif %}
<div class="mb-3">
<label for="networkNm-{{ record.id }}" class="form-label">Network Name</label>
<input type="text" class="form-control" id="networkNm-{{ record.id }}" name="network_nm"
value="{{ record.network_nm }}" required>
</div>
<div class="mb-3">
<label for="ipAddrs-{{ record.id }}" class="form-label">IP Address</label>
<input type="text" class="form-control" id="ipAddrs-{{ record.id }}" name="ip_addrs"
value="{{ record.ip_addrs }}" required>
</div>
<div class="mb-3">
<label for="svrNm-{{ record.id }}" class="form-label">Server Name</label>
<input type="text" class="form-control" id="svrNm-{{ record.id }}" name="svr_nm"
value="{{ record.svr_nm }}" required>
</div>
<div class="mb-3">
<label for="contents-{{ record.id }}" class="form-label">Location</label>
<textarea class="form-control" id="contents-{{ record.id }}" name="contents">{{ record.contents }}</textarea>
</div>
<div class="mb-3">
<label for="remark-{{ record.id }}" class="form-label">Remark</label>
<textarea class="form-control" id="remark-{{ record.id }}" name="remark">{{ record.remark }}</textarea>
</div>
<button type="submit" class="btn btn-primary">Save Changes</button>
</form>
</div>
</div>
</div>
</div>
{% endfor %}
<!-- 등록 모달 -->
<!-- 데이터 등록 모달 -->
<div class="modal fade" id="addDataModal" tabindex="-1" aria-labelledby="addDataModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
@ -132,23 +140,24 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<!-- 데이터 등록 폼 -->
<form id="addDataForm" method="post" action="{% url 'butler:ip_mgmt_add' %}">
{% csrf_token %}
<div class="mb-3">
<label for="networkNm" class="form-label">Network Name</label>
<input type="text" class="form-control" id="networkNm" name="network_nm" required>
<input type="text" class="form-control" id="networkNm" name="network_nm" required="required">
</div>
<div class="mb-3">
<label for="ipAddrs" class="form-label">IP Address</label>
<input type="text" class="form-control" id="ipAddrs" name="ip_addrs" required>
<input type="text" class="form-control" id="ipAddrs" name="ip_addrs" required="required">
</div>
<div class="mb-3">
<label for="svrNm" class="form-label">Server Name</label>
<input type="text" class="form-control" id="svrNm" name="svr_nm" required>
<input type="text" class="form-control" id="svrNm" name="svr_nm" required="required">
</div>
<div class="mb-3">
<label for="contents" class="form-label">Location</label>
<textarea class="form-control" id="contents" name="contents"></textarea>
<label for="desc" class="form-label">Description</label>
<textarea class="form-control" id="desc" name="desc"></textarea>
</div>
<div class="mb-3">
<label for="remark" class="form-label">Remark</label>
@ -166,6 +175,7 @@
const editButton = document.getElementById('editSelectedButton');
const checkboxes = document.querySelectorAll('.record-checkbox');
// Event listener to enable/disable the edit button
document.addEventListener('change', function () {
const selected = [...checkboxes].filter(checkbox => checkbox.checked);
if (selected.length === 1) {
@ -177,6 +187,7 @@
}
});
// Event listener to open the edit modal
editButton.addEventListener('click', function () {
const recordId = editButton.dataset.recordId;
if (recordId) {
@ -186,4 +197,4 @@
});
});
</script>
{% endblock %}
{% endblock %}

View File

@ -8,7 +8,7 @@
<!-- Grafana IFrame -->
<div class="ratio ratio-16x9">
<iframe
src="https://grafana.icurfer.com/public-dashboards/40d2a2615010433d81f5cf40caa03541"
src="https://grafana.nativedeck.com/d/PwMJtdvnz/1-k8s-for-prometheus-dashboard-20211010-en?orgId=2&from=1731468637504&to=1731470437504&kiosk"
width="100%"
height="800"
frameborder="0"

View File

@ -16,5 +16,5 @@ urlpatterns = [
path('ip-mgmt/delete/', views.delete_ip_records, name='ip_mgmt_delete'), # 삭제 URL 추가
path('ip-mgmt/edit/<int:pk>/', views.edit_ip_record, name='ip_mgmt_edit'), # 수정 URL 추가
path('privacy/', views.privacy_view, name='privacy'),
# path('test/', views.test_view, name='test'),
path('test/', views.test_view, name='test'),
]

View File

@ -62,7 +62,7 @@ def add_ip_record(request):
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")
desc = request.POST.get("desc")
remark = request.POST.get("remark")
# 작성자 (author)는 로그인된 사용자로 설정
author = request.user
@ -71,7 +71,7 @@ def add_ip_record(request):
network_nm=network_nm,
ip_addrs=ip_addrs,
svr_nm=svr_nm,
contents=contents,
desc=desc,
remark=remark,
author=author,
)
@ -90,26 +90,19 @@ def delete_ip_records(request):
def edit_ip_record(request, pk):
print(f"수정동작")
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":
# 디버깅 메시지 추가
# print(f"체크: {request.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.desc = request.POST.get("desc")
record.remark = request.POST.get("remark")
record.save()
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' 파일을 읽기

View File

@ -16,17 +16,7 @@ from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# 우선순위: .env.dev > .env.prd > .env
if os.path.exists(os.path.join(BASE_DIR, '.env.dev')):
print("Read Environment File > Used : .env.dev")
load_dotenv(os.path.join(BASE_DIR, '.env.dev'))
elif os.path.exists(os.path.join(BASE_DIR, '.env.prd')):
print("Read Environment File > Used : .env.prd")
load_dotenv(os.path.join(BASE_DIR, '.env.prd'))
else:
print("None Environment File > Used : local_env")
# load_dotenv(os.path.join(BASE_DIR, '.env.dev'))
load_dotenv(os.path.join(BASE_DIR, '.env.dev'))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
@ -62,7 +52,6 @@ INSTALLED_APPS = [
'mm_msg',
'ansible_manager',
'obs_minio',
'telemetry_dashboard',
]
MIDDLEWARE = [

View File

@ -31,7 +31,6 @@ urlpatterns = [
path('mm_msg/', include('mm_msg.urls')),
path('ansible_manager/', include('ansible_manager.urls')),
path('obs_minio/', include('obs_minio.urls')),
path('tm_dsbd/', include('telemetry_dashboard.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -20,7 +20,7 @@
<a class="d-inline-flex align-items-center rounded" href="/ip_mgmt">IP관리대장</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/game/" target="_blank">game(kimchirun)</a>
<a class="d-inline-flex align-items-center rounded" href="/game/">game(kimchirun)</a>
</li>
{% if request.user.is_authenticated and request.user.is_staff %}
<li>
@ -28,8 +28,6 @@
</li>
{% endif %}
</ul>
<hr>
{% include "components/_sidebar_tm_dashboard.html" %}
</li>
<hr>
<li class="my-2">
@ -39,88 +37,81 @@
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/test">출력결과 검토</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/preparations">주의 사항</a>
</li>
<hr>
<span>관리대장</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhnc_mgmt/igw">인터넷 게이트웨이</a>
</li>
<hr>
<span>Network</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/infoVpcListRequest">VPC 조회 및 삭제</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/createVpcRequest">VPC 생성</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/infoClusterListRequest">NKS Cluseter 조회 및 삭제</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/createClusterOnlyRequest">NKS Cluseter 생성</a>
</li>
<hr>
<span>k8s Components deploy</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/nksApply">Ingress Deploy</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/nksApply">FluentBit Deploy</a>
</li>
<li>
<a class="text-secondary d-inline-flex align-items-center rounded disabled" href="#">Logging Deploy(미구현)</a>
</li>
<li>
<a class="text-secondary d-inline-flex align-items-center rounded disabled" href="#">Monitoring Deploy(미구현)</a>
</li>
{% else %}
<p>로그인이 필요합니다.</p>
<a class="d-inline-flex align-items-center rounded" href="/notice/2/" target="_blank">사용가이드</a>
{% endif %}
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/preparations">주의 사항</a>
</li>
<hr>
<span>관리대장</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhnc_mgmt/igw">인터넷 게이트웨이</a>
</li>
<hr>
<span>Network</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/infoVpcListRequest">VPC 조회 및 삭제</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/createVpcRequest">VPC 생성</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/infoClusterListRequest">NKS Cluseter 조회 및 삭제</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/createClusterOnlyRequest">NKS Cluseter 생성</a>
</li>
<hr>
<span>k8s Components deploy</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/nksApply">Ingress Deploy</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="/nhncloud/nksApply">FluentBit Deploy</a>
</li>
<li>
<a class="text-secondary d-inline-flex align-items-center rounded disabled" href="#">Logging Deploy(미구현)</a>
</li>
<li>
<a class="text-secondary d-inline-flex align-items-center rounded disabled" href="#">Monitoring Deploy(미구현)</a>
</li>
</ul>
</li>
<hr>
<li class="my-2">
<button class="btn d-inline-flex align-items-center collapsed" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">DevOpsTools ▽</button>
<ul class="list-unstyled ps-3 collapse" id="components-collapse">
<span>Dev</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_gitea}}" target="_blank">Repository - Gitea</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_harbor}}" target="_blank">Registry - Harbor</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_argocd}}" target="_blank">Deploy - ArgoCD</a>
</li>
<hr>
<span>Ops</span>
{% if request.user.is_authenticated and request.user.is_staff %}
<span>Dev</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_gitea}}" target="_blank">Repository - Gitea</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_harbor}}" target="_blank">Registry - Harbor</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_argocd}}" target="_blank">Deploy - ArgoCD</a>
</li>
<hr>
<span>Ops</span>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_web_ide}}" target="_blank">Web VScode - CodeServer</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_rancher}}" target="_blank">Cluster Management - Rancher</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_grafana}}" target="_blank">Monitoring - Grafana</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_prometheus}}" target="_blank">Metrics - Prometheus</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_opensearch}}" target="_blank">Container Log - OpenSearch</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_kiali}}" target="_blank">Main Cluster Traffic - Kiali</a>
</li>
{% else %}
<p>로그인이 필요합니다.</p>
<a class="d-inline-flex align-items-center rounded" href="/notice/2/" target="_blank">사용가이드</a>
{% endif %}
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_rancher}}" target="_blank">Cluster Management - Rancher</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_grafana}}" target="_blank">Monitoring - Grafana</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_prometheus}}" target="_blank">Metrics - Prometheus</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_opensearch}}" target="_blank">Container Log - OpenSearch</a>
</li>
<li>
<a class="d-inline-flex align-items-center rounded" href="{{request.user.url_kiali}}" target="_blank">Main Cluster Traffic - Kiali</a>
</li>
</ul>
</li>
<hr>

View File

@ -1,5 +1,5 @@
<li class="my-2">
<button class="btn d-inline-flex align-items-center collapsed" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#ansible-collapse" aria-controls="ansible-collapse">On-premise Ansible</button>
<button class="btn d-inline-flex align-items-center collapsed" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#ansible-collapse" aria-controls="ansible-collapse">On-premise Ansible</button>
<ul class="list-unstyled ps-3 collapse" id="ansible-collapse">
<li>

View File

@ -1,8 +0,0 @@
<li class="my-2">
<button class="btn d-inline-flex align-items-center collapsed" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#tm_dsbd-collapse" aria-controls="tm_dsbd-collapse">Telemetry Dashboard ▽</button>
<ul class="list-unstyled ps-3 collapse" id="tm_dsbd-collapse">
<li>
<a class="d-inline-flex align-items-center rounded" href="/tm_dsbd/grafana">grafana</a>
</li>
</ul>
</li>

View File

@ -1,3 +0,0 @@
from django.contrib import admin
# Register your models here.

View File

@ -1,6 +0,0 @@
from django.apps import AppConfig
class TelemetryDashboardConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'telemetry_dashboard'

View File

@ -1,3 +0,0 @@
from django.db import models
# Create your models here.

View File

@ -1,19 +0,0 @@
{% extends "components/base.html" %}
{% block title %}Landing Page{% endblock %}
{% block main_area %}
<article class="pt-3">
<h2 class="fw-bold pb-2">Grafana</h2>
<!-- Grafana IFrame -->
<div class="ratio ratio-16x9">
<iframe
src="https://grafana.icurfer.com/public-dashboards/40d2a2615010433d81f5cf40caa03541"
width="100%"
height="800"
frameborder="0"
allowfullscreen
></iframe>
</div>
</article>
{% endblock %}

View File

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@ -1,8 +0,0 @@
from django.urls import path
from . import views
app_name = 'tm_dsbd'
urlpatterns = [
path('grafana/', views.grafana_view, name='grafana'),
]

View File

@ -1,11 +0,0 @@
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 django.db.models import Q
def grafana_view(request):
return render(
request,
"telemetry_dashboard/grafana.html",
)

View File

@ -1 +1 @@
dev_0.0.32
dev_0.0.26