#46 scope ALL_NODES to cluster

This commit is contained in:
Henning Jacobs
2016-12-22 12:07:15 +01:00
parent cdb437578f
commit b0bcacfdf0
6 changed files with 35 additions and 17 deletions

20
app.py
View File

@@ -99,18 +99,32 @@ def index():
return flask.render_template('index.html', app_js=app_js)
def hash_int(x: int):
x = ((x >> 16) ^ x) * 0x45d9f3b
x = ((x >> 16) ^ x) * 0x45d9f3b
x = (x >> 16) ^ x
return x
def generate_mock_cluster_data(index: int):
'''Generate deterministic (no randomness!) mock data'''
nodes = []
pod_phases = ['Pending', 'Running', 'Running']
for i in range(10):
labels = {}
if i < 2:
labels['master'] = 'true'
pods = []
for j in range(32):
for j in range(hash_int((index + 1) * (i + 1)) % 32):
phase = pod_phases[hash_int((index + 1) * (i + 1) * (j + 1)) % len(pod_phases)]
containers = []
for k in range(1):
containers.append({'name': 'myapp', 'image': 'foo/bar/{}'.format(j), 'resources': {}})
pods.append({'name': 'my-pod-{}'.format(j), 'namespace': 'default', 'labels': {}, 'status': {}, 'containers': containers})
containers.append({'name': 'myapp', 'image': 'foo/bar/{}'.format(j), 'resources': {'requests': {'cpu': '100m', 'memory': '100Mi'}}})
status = {'phase': phase}
if phase == 'Running':
if j % 10 == 0:
status['containerStatuses'] = [{'ready': False, 'state': {'waiting': {'reason': 'CrashLoopBackOff'}}}]
pods.append({'name': 'my-pod-{}'.format(j), 'namespace': 'kube-system' if j < 3 else 'default', 'labels': labels, 'status': status, 'containers': containers})
nodes.append({'name': 'node-{}'.format(i), 'labels': labels, 'status': {'capacity': {'cpu': '4', 'memory': '32Gi', 'pods': '110'}}, 'pods': pods})
unassigned_pods = []
return {

View File

@@ -95,7 +95,7 @@ export default class App {
}
animatePodCreation(originalPod, globalX, globalY) {
const pod = new Pod(originalPod.pod, this.tooltip, false)
const pod = new Pod(originalPod.pod, this.tooltip, null)
pod.draw()
const targetPosition = new PIXI.Point(globalX, globalY)
const angle = Math.random()*Math.PI*2

View File

@@ -12,7 +12,7 @@ export default class Cluster extends PIXI.Graphics {
draw () {
var rows = [10, 10]
for (var node of this.cluster.nodes) {
var nodeBox = new Node(node, this.tooltip)
var nodeBox = new Node(node, this, this.tooltip)
nodeBox.draw()
if (nodeBox.isMaster()) {
nodeBox.x = rows[0]
@@ -29,7 +29,7 @@ export default class Cluster extends PIXI.Graphics {
for (const pod of this.cluster.unassigned_pods) {
var podBox = Pod.getOrCreate(pod, this.tooltip)
var podBox = Pod.getOrCreate(pod, this, this.tooltip)
podBox.x = rows[0]
podBox.y = 20
podBox.draw()

View File

@@ -4,9 +4,10 @@ import {parseResource} from './utils.js'
const PIXI = require('pixi.js')
export default class Node extends PIXI.Graphics {
constructor(node, tooltip) {
constructor(node, cluster, tooltip) {
super()
this.node = node
this.cluster = cluster
this.tooltip = tooltip
}
@@ -82,7 +83,7 @@ export default class Node extends PIXI.Graphics {
var py = 20
for (const pod of this.node.pods) {
if (pod.namespace != 'kube-system') {
const podBox = Pod.getOrCreate(pod, this.tooltip) //new Pod(pod, this.tooltip)
const podBox = Pod.getOrCreate(pod, this.cluster, this.tooltip) //new Pod(pod, this.tooltip)
podBox.x = px
podBox.y = py
nodeBox.addChild(podBox.draw())
@@ -98,7 +99,7 @@ export default class Node extends PIXI.Graphics {
py = 100
for (const pod of this.node.pods) {
if (pod.namespace == 'kube-system') {
const podBox = Pod.getOrCreate(pod, this.tooltip) //new Pod(pod, this.tooltip)
const podBox = Pod.getOrCreate(pod, this.cluster, this.tooltip) //new Pod(pod, this.tooltip)
podBox.x = px
podBox.y = py
nodeBox.addChild(podBox.draw())

View File

@@ -5,15 +5,15 @@ export const ALL_PODS = {}
export class Pod extends PIXI.Graphics {
constructor(pod, tooltip, register=true) {
constructor(pod, tooltip, cluster) {
super()
this.pod = pod
this.tooltip = tooltip
this.tick = null
this._progress = 1
if (register) {
ALL_PODS[pod.namespace + '/' + pod.name] = this
if (cluster) {
ALL_PODS[cluster.cluster.api_server_url + '/' + pod.namespace + '/' + pod.name] = this
}
}
@@ -51,8 +51,8 @@ export class Pod extends PIXI.Graphics {
}
}
static getOrCreate(pod, tooltip) {
const existingPod = ALL_PODS[pod.namespace + '/' + pod.name]
static getOrCreate(pod, cluster, tooltip) {
const existingPod = ALL_PODS[cluster.cluster.api_server_url + '/' + pod.namespace + '/' + pod.name]
if (existingPod) {
existingPod.pod = pod
existingPod.clear()

3
tox.ini Normal file
View File

@@ -0,0 +1,3 @@
[flake8]
max-line-length=120
ignore=E402