some more info to debug cluster
This commit is contained in:
12
app.py
12
app.py
@@ -20,7 +20,8 @@ def index():
|
|||||||
|
|
||||||
|
|
||||||
def get_clusters():
|
def get_clusters():
|
||||||
response = session.get('http://localhost:8001/api/v1/nodes', timeout=5)
|
api_server_url = 'http://localhost:8001/'
|
||||||
|
response = session.get('{}/api/v1/nodes'.format(api_server_url), timeout=5)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
nodes = []
|
nodes = []
|
||||||
nodes_by_name = {}
|
nodes_by_name = {}
|
||||||
@@ -33,6 +34,15 @@ def get_clusters():
|
|||||||
for pod in response.json()['items']:
|
for pod in response.json()['items']:
|
||||||
if 'nodeName' in pod['spec']:
|
if 'nodeName' in pod['spec']:
|
||||||
nodes_by_name[pod['spec']['nodeName']]['pods'].append(pod)
|
nodes_by_name[pod['spec']['nodeName']]['pods'].append(pod)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = session.get('{}/api/v1/namespaces/kube-system/services/heapster/proxy/apis/metrics/v1alpha1/nodes'.format(api_server_url), timeout=5)
|
||||||
|
response.raise_for_status()
|
||||||
|
for metrics in response.json()['items']:
|
||||||
|
nodes_by_name[metrics['metadata']['name']]['usage'] = metrics['usage']
|
||||||
|
except:
|
||||||
|
logging.exception('Failed to get metrics')
|
||||||
|
|
||||||
return {'kubernetes_clusters': [{'nodes': nodes}]}
|
return {'kubernetes_clusters': [{'nodes': nodes}]}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -72,18 +72,25 @@ class Node extends PIXI.Graphics {
|
|||||||
getResourceUsage() {
|
getResourceUsage() {
|
||||||
const resources = {}
|
const resources = {}
|
||||||
for (let key of Object.keys(this.node.status.capacity)) {
|
for (let key of Object.keys(this.node.status.capacity)) {
|
||||||
resources[key] = {'capacity': parseResource(this.node.status.capacity[key]), 'used': 0}
|
resources[key] = {'capacity': parseResource(this.node.status.capacity[key]),
|
||||||
|
'requested': 0,
|
||||||
|
'used': 0}
|
||||||
|
}
|
||||||
|
if (this.node.usage) {
|
||||||
|
for (let key of Object.keys(this.node.usage)) {
|
||||||
|
resources[key]['used'] = parseResource(this.node.usage[key])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (let pod of this.node.pods) {
|
for (let pod of this.node.pods) {
|
||||||
for (let container of pod.spec.containers) {
|
for (let container of pod.spec.containers) {
|
||||||
if (container.resources && container.resources.requests) {
|
if (container.resources && container.resources.requests) {
|
||||||
for (let key of Object.keys(container.resources.requests)) {
|
for (let key of Object.keys(container.resources.requests)) {
|
||||||
resources[key].used += parseResource(container.resources.requests[key])
|
resources[key].requested += parseResource(container.resources.requests[key])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resources['pods'].used = this.node.pods.length
|
resources['pods'].requested = this.node.pods.length
|
||||||
return resources
|
return resources
|
||||||
}
|
}
|
||||||
draw () {
|
draw () {
|
||||||
@@ -123,17 +130,22 @@ class Node extends PIXI.Graphics {
|
|||||||
nodeBox.tooltip.visible = false
|
nodeBox.tooltip.visible = false
|
||||||
})
|
})
|
||||||
const resources = this.getResourceUsage()
|
const resources = this.getResourceUsage()
|
||||||
for (var i=0; i<resources.cpu.capacity; i++) {
|
const cpuHeight = 80 / resources.cpu.capacity
|
||||||
nodeBox.drawRect(5, 105 - i * 5, 5, 5)
|
nodeBox.lineStyle(2, 0xaaffaa, 1)
|
||||||
}
|
|
||||||
nodeBox.beginFill(0xaaffaa, 1)
|
nodeBox.beginFill(0xaaffaa, 1)
|
||||||
nodeBox.drawRect(5, 110 - resources.cpu.used * 5, 5, resources.cpu.used * 5)
|
nodeBox.drawRect(3, 110 - resources.cpu.requested * cpuHeight, 3, resources.cpu.requested * cpuHeight)
|
||||||
|
nodeBox.drawRect(5, 110 - resources.cpu.used * cpuHeight, 5, resources.cpu.used * cpuHeight)
|
||||||
nodeBox.endFill()
|
nodeBox.endFill()
|
||||||
|
nodeBox.lineStyle(2, 0xaaaaaa, 1);
|
||||||
|
for (var i=0; i<resources.cpu.capacity; i++) {
|
||||||
|
nodeBox.drawRect(5, 110 - (i+1) * cpuHeight, 5, cpuHeight)
|
||||||
|
}
|
||||||
|
|
||||||
const scale = 1000*1000*200
|
const scale = resources.memory.capacity / 80
|
||||||
nodeBox.drawRect(14, 110 - resources.memory.capacity/scale, 5, resources.memory.capacity/scale)
|
nodeBox.drawRect(14, 110 - resources.memory.capacity/scale, 5, resources.memory.capacity/scale)
|
||||||
nodeBox.lineStyle(2, 0xaaffaa, 1)
|
nodeBox.lineStyle(2, 0xaaffaa, 1)
|
||||||
nodeBox.beginFill(0xaaffaa, 1)
|
nodeBox.beginFill(0xaaffaa, 1)
|
||||||
|
nodeBox.drawRect(13, 110 - resources.memory.requested/scale, 3, resources.memory.requested/scale)
|
||||||
nodeBox.drawRect(15, 110 - resources.memory.used/scale, 3, resources.memory.used/scale)
|
nodeBox.drawRect(15, 110 - resources.memory.used/scale, 3, resources.memory.used/scale)
|
||||||
nodeBox.endFill()
|
nodeBox.endFill()
|
||||||
var text = new PIXI.Text('', {fontSize: 10, fill: 0xffffff})
|
var text = new PIXI.Text('', {fontSize: 10, fill: 0xffffff})
|
||||||
@@ -205,6 +217,7 @@ class Pod extends PIXI.Graphics {
|
|||||||
s += '\n' + key + ': ' + this.pod.metadata.labels[key]
|
s += '\n' + key + ': ' + this.pod.metadata.labels[key]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s += '\nStatus: ' + this.pod.status.phase
|
||||||
s += '\nReady: ' + ready + '/' + containerStatuses.length
|
s += '\nReady: ' + ready + '/' + containerStatuses.length
|
||||||
for (let containerStatus of containerStatuses) {
|
for (let containerStatus of containerStatuses) {
|
||||||
var key = Object.keys(containerStatus.state)[0]
|
var key = Object.keys(containerStatus.state)[0]
|
||||||
@@ -218,6 +231,7 @@ class Pod extends PIXI.Graphics {
|
|||||||
this.tooltip.x = this.toGlobal(new PIXI.Point(10, 10)).x
|
this.tooltip.x = this.toGlobal(new PIXI.Point(10, 10)).x
|
||||||
this.tooltip.y = this.toGlobal(new PIXI.Point(10, 10)).y
|
this.tooltip.y = this.toGlobal(new PIXI.Point(10, 10)).y
|
||||||
this.tooltip.visible = true
|
this.tooltip.visible = true
|
||||||
|
console.log(this.pod)
|
||||||
})
|
})
|
||||||
podBox.on('mouseout', function() {
|
podBox.on('mouseout', function() {
|
||||||
podBox.filters = []
|
podBox.filters = []
|
||||||
|
|||||||
Reference in New Issue
Block a user