Show k8s event on instance page
This commit is contained in:
parent
c853153533
commit
fc93a77d9d
2 changed files with 90 additions and 0 deletions
|
|
@ -1202,5 +1202,50 @@ class ServiceInstance(ServalaModelMixin, models.Model):
|
||||||
except (AttributeError, KeyError, IndexError):
|
except (AttributeError, KeyError, IndexError):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def kubernetes_events(self) -> dict:
|
||||||
|
"""
|
||||||
|
Returns a list of event dictionaries sorted by last timestamp (newest first).
|
||||||
|
"""
|
||||||
|
if not self.kubernetes_object:
|
||||||
|
return []
|
||||||
|
|
||||||
|
try:
|
||||||
|
v1 = kubernetes.client.CoreV1Api(
|
||||||
|
self.context.control_plane.get_kubernetes_client()
|
||||||
|
)
|
||||||
|
events = v1.list_namespaced_event(
|
||||||
|
namespace=self.organization.namespace,
|
||||||
|
field_selector=f"involvedObject.name={self.name},involvedObject.kind={self.context.kind}",
|
||||||
|
)
|
||||||
|
event_list = []
|
||||||
|
for event in events.items:
|
||||||
|
event_dict = {
|
||||||
|
"type": event.type, # Normal or Warning
|
||||||
|
"reason": event.reason,
|
||||||
|
"message": event.message,
|
||||||
|
"count": event.count or 1,
|
||||||
|
"first_timestamp": (
|
||||||
|
event.first_timestamp.isoformat()
|
||||||
|
if event.first_timestamp
|
||||||
|
else None
|
||||||
|
),
|
||||||
|
"last_timestamp": (
|
||||||
|
event.last_timestamp.isoformat()
|
||||||
|
if event.last_timestamp
|
||||||
|
else None
|
||||||
|
),
|
||||||
|
"source": event.source.component if event.source else None,
|
||||||
|
}
|
||||||
|
event_list.append(event_dict)
|
||||||
|
|
||||||
|
event_list.sort(key=lambda x: x.get("last_timestamp") or "", reverse=True)
|
||||||
|
|
||||||
|
return event_list
|
||||||
|
except ApiException:
|
||||||
|
return []
|
||||||
|
except Exception:
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
auditlog.register(ServiceInstance, exclude_fields=["updated_at"], serialize_data=True)
|
auditlog.register(ServiceInstance, exclude_fields=["updated_at"], serialize_data=True)
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,51 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if instance.kubernetes_events %}
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h4>{% translate "Events" %}</h4>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered table-sm">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 80px;">{% translate "Type" %}</th>
|
||||||
|
<th style="width: 150px;">{% translate "Reason" %}</th>
|
||||||
|
<th>{% translate "Message" %}</th>
|
||||||
|
<th style="width: 60px;">{% translate "Count" %}</th>
|
||||||
|
<th style="width: 180px;">{% translate "Last Seen" %}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for event in instance.kubernetes_events %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{% if event.type == "Warning" %}
|
||||||
|
<span class="badge text-bg-warning">{{ event.type }}</span>
|
||||||
|
{% elif event.type == "Normal" %}
|
||||||
|
<span class="badge text-bg-success">{{ event.type }}</span>
|
||||||
|
{% else %}
|
||||||
|
<span class="badge text-bg-secondary">{{ event.type }}</span>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{{ event.reason|default:"-" }}</td>
|
||||||
|
<td>
|
||||||
|
<span class="text-break">{{ event.message|default:"-"|truncatewords:50 }}</span>
|
||||||
|
</td>
|
||||||
|
<td class="text-center">{{ event.count }}</td>
|
||||||
|
<td>{{ event.last_timestamp|localtime_tag }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% if instance.spec and spec_fieldsets %}
|
{% if instance.spec and spec_fieldsets %}
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue