Skip to content
This repository was archived by the owner on Oct 3, 2020. It is now read-only.

Commit 244fd90

Browse files
authored
Merge pull request #115 from hjacobs/jobs
#114 hide completed jobs after one hour
2 parents a7d416d + d4f35a0 commit 244fd90

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

app/src/node.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,13 @@ export default class Node extends PIXI.Graphics {
3333
let numberOfPods = 0
3434
for (const pod of Object.values(this.node.pods)) {
3535
numberOfPods++
36-
for (const container of pod.containers) {
37-
if (container.resources && container.resources.requests) {
38-
for (const key of Object.keys(container.resources.requests)) {
39-
resources[key].requested += parseResource(container.resources.requests[key])
36+
// do not account for completed jobs
37+
if (pod.phase != 'Succeeded') {
38+
for (const container of pod.containers) {
39+
if (container.resources && container.resources.requests) {
40+
for (const key of Object.keys(container.resources.requests)) {
41+
resources[key].requested += parseResource(container.resources.requests[key])
42+
}
4043
}
4144
}
4245
}

kube_ops_view/kubernetes.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import datetime
22
import logging
3+
import time
34
from urllib.parse import urljoin
45

56
import requests
@@ -55,6 +56,10 @@ def request(cluster, path, **kwargs):
5556
return session.get(urljoin(cluster.api_server_url, path), auth=cluster.auth, verify=cluster.ssl_ca_cert, **kwargs)
5657

5758

59+
def parse_time(s: str):
60+
return datetime.datetime.strptime(s, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=datetime.timezone.utc).timestamp()
61+
62+
5863
def query_kubernetes_cluster(cluster):
5964
cluster_id = cluster.id
6065
api_server_url = cluster.api_server_url
@@ -68,14 +73,24 @@ def query_kubernetes_cluster(cluster):
6873
nodes[obj['name']] = obj
6974
response = request(cluster, '/api/v1/pods')
7075
response.raise_for_status()
76+
now = time.time()
7177
for pod in response.json()['items']:
7278
obj = map_pod(pod)
7379
if 'deletionTimestamp' in pod['metadata']:
74-
obj['deleted'] = datetime.datetime.strptime(pod['metadata']['deletionTimestamp'],
75-
'%Y-%m-%dT%H:%M:%SZ').replace(
76-
tzinfo=datetime.timezone.utc).timestamp()
80+
obj['deleted'] = parse_time(pod['metadata']['deletionTimestamp'])
7781
for cont in pod['spec']['containers']:
7882
obj['containers'].append(map_container(cont, pod))
83+
if obj['phase'] == 'Succeeded':
84+
last_termination_time = 0
85+
for container in obj['containers']:
86+
termination_time = container.get('state', {}).get('terminated', {}).get('finishedAt', '')
87+
termination_time = parse_time(termination_time)
88+
if termination_time > last_termination_time:
89+
last_termination_time = termination_time
90+
if last_termination_time < now - 3600:
91+
# the job/pod finished more than an hour ago
92+
# => filter out
93+
continue
7994
pods_by_namespace_name[(obj['namespace'], obj['name'])] = obj
8095
pod_key = '{}/{}'.format(obj['namespace'], obj['name'])
8196
if 'nodeName' in pod['spec'] and pod['spec']['nodeName'] in nodes:

0 commit comments

Comments
 (0)