add filter for pods with non-ready containers

This commit is contained in:
jochen weber
2020-07-24 18:51:08 +02:00
parent 468f3a2b00
commit f901a7fe0b
2 changed files with 54 additions and 2 deletions

View File

@@ -1,6 +1,6 @@
import Tooltip from './tooltip.js' import Tooltip from './tooltip.js'
import Cluster from './cluster.js' import Cluster from './cluster.js'
import {Pod, ALL_PODS, ALL_SORTS} from './pod.js' import {Pod, ALL_PODS, ALL_SORTS, ALL_STATUS_FILTERS} from './pod.js'
import SelectBox from './selectbox' import SelectBox from './selectbox'
import {Theme, ALL_THEMES} from './themes.js' import {Theme, ALL_THEMES} from './themes.js'
import {DESATURATION_FILTER} from './filters.js' import {DESATURATION_FILTER} from './filters.js'
@@ -29,6 +29,10 @@ export default class App {
const indexSorterFn = ALL_SORTS.findIndex(obj => obj.text === (localStorage.getItem('sorterFn') || ALL_SORTS[0].text)) const indexSorterFn = ALL_SORTS.findIndex(obj => obj.text === (localStorage.getItem('sorterFn') || ALL_SORTS[0].text))
this.sorterFn = ALL_SORTS[indexSorterFn].value this.sorterFn = ALL_SORTS[indexSorterFn].value
// filterFn
const indexStatusFilterFn = ALL_STATUS_FILTERS.findIndex(obj => obj.text === (localStorage.getItem('statusFilterFn') || ALL_STATUS_FILTERS[0].text))
this.statusFilterFn = ALL_STATUS_FILTERS[indexStatusFilterFn].value
this.theme = Theme.get(localStorage.getItem('theme')) this.theme = Theme.get(localStorage.getItem('theme'))
this.eventSource = null this.eventSource = null
this.connectTime = null this.connectTime = null
@@ -102,6 +106,7 @@ export default class App {
} }
} }
filter() { filter() {
const searchString = this.filterString const searchString = this.filterString
if (this.searchText) { if (this.searchText) {
@@ -124,6 +129,7 @@ export default class App {
} }
} }
} }
filterableElements.forEach(value => { filterableElements.forEach(value => {
if (!matchesQuery(value.pod)) { if (!matchesQuery(value.pod)) {
value.filters = [elementDisplayFilter] value.filters = [elementDisplayFilter]
@@ -132,6 +138,12 @@ export default class App {
value.filters = [] value.filters = []
} }
}) })
filterableElements.forEach(value => {
if (!this.statusFilterFn(value.pod)) {
value.filters = [elementDisplayFilter]
}
})
} }
initialize() { initialize() {
@@ -356,6 +368,14 @@ export default class App {
themeSelector.y = 3 themeSelector.y = 3
menuBar.addChild(themeSelector.draw()) menuBar.addChild(themeSelector.draw())
const statusFilterBox = new SelectBox(ALL_STATUS_FILTERS, this.statusFilterFn, function (text, value) {
app.changeStatusFilter(text, value)
})
statusFilterBox.x = 585
statusFilterBox.y = 3
menuBar.addChild(statusFilterBox.draw())
this.searchText = searchText this.searchText = searchText
} }
@@ -560,6 +580,12 @@ export default class App {
this.update() this.update()
} }
changeStatusFilter(text, newStatusFilterFunction) {
this.statusFilterFn = newStatusFilterFunction
localStorage.setItem('statusFilterFn', text)
this.update()
}
switchTheme(text, newTheme) { switchTheme(text, newTheme) {
this.theme = Theme.get(newTheme) this.theme = Theme.get(newTheme)
this.draw() this.draw()

View File

@@ -5,6 +5,31 @@ import {BRIGHTNESS_FILTER} from './filters.js'
const ALL_PODS = {} const ALL_PODS = {}
const showAll = (pod) => {
return true
}
const showNotReady = (pod) => {
if (pod.phase == 'Succeeded') {
return false
}
for (let index = 0; index < pod.containers.length; index++) {
if (!pod.containers[index].ready) {
return true
}
}
return false
}
const ALL_STATUS_FILTERS = [
{
text: 'SHOW: All', value: showAll
},
{
text: 'SHOW: NotReady', value: showNotReady
},
]
const sortByName = (a, b) => { const sortByName = (a, b) => {
// https://github.com/hjacobs/kube-ops-view/issues/103 // https://github.com/hjacobs/kube-ops-view/issues/103
// *.name might be undefined // *.name might be undefined
@@ -38,6 +63,7 @@ const sortByStatus = (a, b) => {
return (a.phase).localeCompare(b.phase) return (a.phase).localeCompare(b.phase)
} }
const ALL_SORTS = [ const ALL_SORTS = [
{ {
text: 'SORT: NAME', value: sortByName text: 'SORT: NAME', value: sortByName
@@ -56,7 +82,7 @@ const ALL_SORTS = [
} }
] ]
export {ALL_PODS, ALL_SORTS} export {ALL_PODS, ALL_SORTS, ALL_STATUS_FILTERS}
export class Pod extends PIXI.Graphics { export class Pod extends PIXI.Graphics {