cloudfoundry/stratos

View on GitHub
src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pods-list-config.service.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { of } from 'rxjs';

import {
  TableCellSidePanelComponent,
  TableCellSidePanelConfig,
} from '../../../../../core/src/shared/components/list/list-table/table-cell-side-panel/table-cell-side-panel.component';
import { ITableColumn } from '../../../../../core/src/shared/components/list/list-table/table.types';
import { ISimpleListConfig, ListViewTypes } from '../../../../../core/src/shared/components/list/list.component.types';
import {
  KubernetesResourceViewerComponent,
  KubernetesResourceViewerConfig,
} from '../../kubernetes-resource-viewer/kubernetes-resource-viewer.component';
import { KubernetesPod } from '../../store/kube.types';
import { defaultHelmKubeListPageSize } from '../kube-helm-list-types';
import { createKubeAgeColumn } from '../kube-list.helper';
import { entityCatalog } from './../../../../../store/src/entity-catalog/entity-catalog';
import { KUBERNETES_ENDPOINT_TYPE, kubernetesPodsEntityType } from './../../kubernetes-entity-factory';
import { KubernetesPodContainersComponent } from './kubernetes-pod-containers/kubernetes-pod-containers.component';
import { KubernetesPodStatusComponent } from './kubernetes-pod-status/kubernetes-pod-status.component';

export abstract class BaseKubernetesPodsListConfigService implements ISimpleListConfig<KubernetesPod> {

  static namespaceColumnId = 'namespace';
  static nodeColumnId = 'node';
  public showNamespaceLink = true;

  constructor(
    hideColumns: string[] = [
      BaseKubernetesPodsListConfigService.namespaceColumnId,
      BaseKubernetesPodsListConfigService.nodeColumnId
    ]
  ) {
    if (hideColumns && hideColumns.filter.length) {
      this.columns = this.columns.filter(column => hideColumns.indexOf(column.columnId) < 0);
    }
  }

  columns: Array<ITableColumn<KubernetesPod>> = [
    // Name
    {
      columnId: 'name', headerCell: () => 'Name',
      cellComponent: TableCellSidePanelComponent,
      sort: {
        type: 'sort',
        orderKey: 'name',
        field: 'metadata.name'
      },
      cellFlex: '3',
      cellConfig: (pod): TableCellSidePanelConfig<KubernetesResourceViewerConfig> => ({
        text: pod.metadata.name,
        sidePanelComponent: KubernetesResourceViewerComponent,
        sidePanelConfig: {
          title: pod.metadata.name,
          resourceKind: 'pod',
          resource$: of(pod),
          definition: entityCatalog.getEntity(KUBERNETES_ENDPOINT_TYPE, kubernetesPodsEntityType)
        }
      })
    },
    // TODO: See #150 - keep out RC bring back after demo
    // {
    //   columnId: 'tags', headerCell: () => 'Tags',
    //   cellComponent: KubernetesPodTagsComponent,
    //   cellFlex: '5',
    // },
    // Namespace
    {
      columnId: BaseKubernetesPodsListConfigService.namespaceColumnId, headerCell: () => 'Namespace',
      cellDefinition: {
        valuePath: 'metadata.namespace',
        getLink: row => this.showNamespaceLink ? `/kubernetes/${row.metadata.kubeId}/namespaces/${row.metadata.namespace}` : null
      },
      sort: {
        type: 'sort',
        orderKey: BaseKubernetesPodsListConfigService.namespaceColumnId,
        field: 'metadata.namespace'
      },
      cellFlex: '2',
    },
    // Node
    {
      columnId: BaseKubernetesPodsListConfigService.nodeColumnId, headerCell: () => 'Node',
      cellDefinition: {
        valuePath: 'spec.nodeName',
        getLink: pod => `/kubernetes/${pod.metadata.kubeId}/nodes/${pod.spec.nodeName}/summary`
      },
      sort: {
        type: 'sort',
        orderKey: BaseKubernetesPodsListConfigService.nodeColumnId,
        field: 'spec.nodeName'
      },
      cellFlex: '2',
    },
    {
      columnId: 'expandedStatus',
      headerCell: () => 'Status',
      cellComponent: KubernetesPodStatusComponent,
      sort: {
        type: 'sort',
        orderKey: 'expandedStatus',
        field: 'expandedStatus.status'
      },
      cellFlex: '2'
    },
    {
      columnId: 'restarts',
      headerCell: () => 'Restarts',
      cellDefinition: {
        getValue: pod => pod.expandedStatus.restarts.toString()
      },
      sort: {
        type: 'sort',
        orderKey: 'restarts',
        field: 'expandedStatus.restarts'
      },
      cellFlex: '1'
    },
    createKubeAgeColumn()
  ];

  pageSizeOptions = defaultHelmKubeListPageSize;
  viewType = ListViewTypes.TABLE_ONLY;
  enableTextFilter = true;
  text = {
    filter: 'Filter by Name',
    noEntries: 'There are no pods'
  };
  expandComponent = KubernetesPodContainersComponent;

  getGlobalActions = () => null;
  getMultiActions = () => [];
  getSingleActions = () => [];
  getColumns = () => this.columns;
  getMultiFiltersConfigs = () => [];
}

export class KubernetesPodsListConfig extends BaseKubernetesPodsListConfigService {
  constructor() {
    super([]);
  }
}