add filter for pods with non-ready containers
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user