mirror of
https://github.com/skooner-k8s/skooner.git
synced 2026-05-06 15:56:34 +00:00
119 lines
4.6 KiB
JavaScript
119 lines
4.6 KiB
JavaScript
import _ from 'lodash';
|
|
import React from 'react';
|
|
import api from '../services/api';
|
|
import Base from '../components/base';
|
|
import ContainersPanel from '../components/containersPanel';
|
|
import PodCpuChart from '../components/podCpuChart';
|
|
import ReplicasChart from '../components/replicasChart';
|
|
import PodRamChart from '../components/podRamChart';
|
|
import DeleteButton from '../components/deleteButton';
|
|
import EventsPanel from '../components/eventsPanel';
|
|
import ItemHeader from '../components/itemHeader';
|
|
import Loading from '../components/loading';
|
|
import MetadataFields from '../components/metadataFields';
|
|
import Field from '../components/field';
|
|
import PodsPanel from '../components/podsPanel';
|
|
import SaveButton from '../components/saveButton';
|
|
import ScaleButton from '../components/scaleButton';
|
|
import {defaultSortInfo} from '../components/sorter';
|
|
import getMetrics from '../utils/metricsHelpers';
|
|
import {filterByOwner} from '../utils/filterHelper';
|
|
import ChartsContainer from '../components/chartsContainer';
|
|
import HpaPanel from '../components/hpaPanel';
|
|
|
|
const service = api.replicaSet;
|
|
|
|
export default class ReplicaSet extends Base {
|
|
state = {
|
|
podsSort: defaultSortInfo(x => this.setState({podsSort: x})),
|
|
eventsSort: defaultSortInfo(x => this.setState({eventsSort: x})),
|
|
};
|
|
|
|
componentDidMount() {
|
|
const {namespace, name} = this.props;
|
|
|
|
this.registerApi({
|
|
item: service.get(namespace, name, item => this.setState({item})),
|
|
pods: api.pod.list(namespace, pods => this.setState({pods})),
|
|
events: api.event.list(namespace, events => this.setState({events})),
|
|
metrics: api.metrics.pods(namespace, metrics => this.setState({metrics})),
|
|
hpa: api.hpa.get(namespace, name, x => this.setState({hpa: x})),
|
|
});
|
|
}
|
|
|
|
render() {
|
|
const {namespace, name} = this.props;
|
|
const {item, pods, metrics, events, podsSort, eventsSort, hpa} = this.state;
|
|
|
|
const filteredPods = filterByOwner(pods, item);
|
|
const filteredEvents = filterByOwner(events, item);
|
|
const filteredMetrics = getMetrics(filteredPods, metrics);
|
|
|
|
return (
|
|
<div id='content'>
|
|
<ItemHeader title={['Replica Set', namespace, name]} ready={!!item}>
|
|
<>
|
|
<ScaleButton
|
|
namespace={namespace}
|
|
name={name}
|
|
scaleApi={service.scale}
|
|
/>
|
|
|
|
<SaveButton
|
|
item={item}
|
|
onSave={x => service.put(x)}
|
|
/>
|
|
|
|
<DeleteButton
|
|
onDelete={() => service.delete(namespace, name)}
|
|
/>
|
|
</>
|
|
</ItemHeader>
|
|
|
|
<ChartsContainer>
|
|
<ReplicasChart item={item} />
|
|
<PodCpuChart items={filteredPods} metrics={filteredMetrics} />
|
|
<PodRamChart items={filteredPods} metrics={filteredMetrics} />
|
|
</ChartsContainer>
|
|
|
|
<div className='contentPanel'>
|
|
{!item ? <Loading /> : (
|
|
<div>
|
|
<MetadataFields item={item} />
|
|
|
|
<Field name='Owned By'>
|
|
{_.map(item.metadata.ownerReferences, x => (
|
|
<div key={x.uid}>
|
|
<a href={`#!${x.kind !== 'ReplicaSet' ? 'workload/' : ''}${x.kind.toLowerCase()}/${namespace}/${x.name}`}>
|
|
{`${x.kind.toLowerCase()}/${namespace}/${x.name}`}
|
|
</a>
|
|
</div>
|
|
))}
|
|
</Field>
|
|
</div>
|
|
)}
|
|
</div>
|
|
|
|
<ContainersPanel spec={item && item.spec.template.spec} />
|
|
|
|
<HpaPanel spec={hpa && hpa.spec}/>
|
|
|
|
<div className='contentPanel_header'>Pods</div>
|
|
<PodsPanel
|
|
items={filteredPods}
|
|
sort={podsSort}
|
|
metrics={filteredMetrics}
|
|
skipNamespace={true}
|
|
/>
|
|
|
|
<div className='contentPanel_header'>Events</div>
|
|
<EventsPanel
|
|
shortList={true}
|
|
sort={eventsSort}
|
|
items={filteredEvents}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
}
|