import { random } from 'lodash'; import { filter } from 'fuzzy'; import { exec } from '../proc/shell'; export interface NamespaceInstance { name: string; status: string; } interface NamespaceMap { [name: string]: NamespaceInstance; } export class Namespace { public namespaceInstances: NamespaceMap = {}; protected static namespaceList: string[] = []; async getNamespaces(): Promise { try { const results = await exec('kubectl get ns', true); return this.parseNs(results.stdout); } catch (e) { console.log('Error retrieving namespaces', e); // logger.error("Error retrieving namespaces", e); return undefined; } } nsList = (namespaceInstances: NamespaceInstance[]): void => { namespaceInstances.map((item) => Namespace.namespaceList.push(item.name)); }; parseNs(results: string): NamespaceInstance[] { const namespaceInstances = Array.of(); const splitResults = results .split('\n') .slice(1) .filter((s) => s.length !== 0 && s.length !== undefined); // eslint-disable-next-line no-restricted-syntax for (const line of splitResults) { const fields = line.split(' ').filter((s) => s.length !== 0); const nsInstance = { name: fields[0], status: fields[1], }; this.namespaceInstances[nsInstance.name] = nsInstance; namespaceInstances.push(nsInstance); } return namespaceInstances; } static searchNS(answers: any, input: string) { input = input || ''; return new Promise((resolve) => { setTimeout(() => { const fuzzyResult = filter(input, Namespace.namespaceList); resolve(fuzzyResult.map((el) => el.original)); }, random(30, 500)); }); } }