UNPKG

@controlplane/cli

Version:

Control Plane Corporation CLI

1,195 lines 33.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stopReplica = exports.helmList = exports.helmDeployment = exports.workloadCron = exports.volumeNewSize = exports.volumeSnapshot = exports.volume = exports.auditctx = exports.replicas = exports.image = exports.flattenedAccessReport = exports.agent = exports.task = exports.flattenedPermissions = exports.quota = exports.spicedbcluster = exports.mk8s = exports.memcachecluster = exports.volumeset = exports.dbcluster = exports.workload = exports.deployment = exports.gvc = exports.ipset = exports.identity = exports.policy = exports.group = exports.user = exports.location = exports.event = exports.serviceaccount = exports.secret = exports.cloudaccount = exports.domain = exports.account = exports.org = exports.wellKnown = exports.humanizeDuration = exports.formatTimestamp = exports.formatKVs = exports.truncate = exports.named = void 0; const _ = require("lodash"); const humanize_duration_1 = require("humanize-duration"); const links_1 = require("../util/links"); const objects_1 = require("../util/objects"); const DESCRIPTION_MAX_LENGTH = 40; const defaultUnits = ['y', 'mo', 'w', 'd', 'h', 'm']; const conversionRates = { ms: 1, s: 1000, m: 1000 * 60, h: 1000 * 60 * 60, d: 1000 * 60 * 60 * 24, w: 1000 * 60 * 60 * 24 * 7, mo: 1000 * 60 * 60 * 24 * 30, y: 1000 * 60 * 60 * 24 * 365, }; function named(name) { return { name: name, }; } exports.named = named; function truncate(prop, max, options) { return (obj) => { if (!obj || !obj[prop]) { return ''; } return _.truncate(obj[prop], { length: max, omission: '...', }); }; } exports.truncate = truncate; function formatKVs(prop) { return (obj) => { if (!obj || !obj[prop]) { return ''; } let result = ''; for (let k of Object.keys(obj[prop]).sort()) { // handle structured values too let value = JSON.stringify(obj[prop][k]); // trim line to lenght const line = _.truncate(`${k}=${value}`, { length: 80, omission: '...', }); result += line + '\n'; } return result.slice(0, -1); }; } exports.formatKVs = formatKVs; function formatIpSetLocations(obj) { var _a; let locations = []; for (const location of ((_a = obj.spec) === null || _a === void 0 ? void 0 : _a.locations) || []) { locations.push(`${(0, links_1.getLastPartOfLink)(location.name)},${location.retentionPolicy}`); } return locations.join('\n'); } function formatGVCLocations(obj) { var _a, _b, _c, _d; let locations = []; if ((_b = (_a = obj.spec) === null || _a === void 0 ? void 0 : _a.staticPlacement) === null || _b === void 0 ? void 0 : _b.locationLinks) { for (let loc of obj.spec.staticPlacement.locationLinks) { locations.push(loc.split('/').pop()); } } if ((_d = (_c = obj.spec) === null || _c === void 0 ? void 0 : _c.staticPlacement) === null || _d === void 0 ? void 0 : _d.locationQuery) { locations.push('+'); } return locations.join('\n'); } function formatDBClusterLocations(obj) { var _a, _b; let locations = []; // TODO change this when we have more than just postgres type if ((_b = (_a = obj.spec) === null || _a === void 0 ? void 0 : _a.postgres) === null || _b === void 0 ? void 0 : _b.locations) { for (let loc of obj.spec.postgres.locations) { locations.push(loc.writable ? loc.name + ' (writable)' : loc.name); } } return locations.join('\n'); } function formatSpecLocations(obj) { var _a, _b; let locations = []; if ((_a = obj.spec) === null || _a === void 0 ? void 0 : _a.locations) { for (let loc of (_b = obj.spec) === null || _b === void 0 ? void 0 : _b.locations) { locations.push(loc.split('/location/')[1]); } } return locations.join('\n'); } function getValueAt(jsonPath) { return (obj) => { if (!obj) { return ''; } return _.get(obj, jsonPath); }; } function link(rel) { return (obj) => { if (!obj || !obj.links) { return ''; } return (0, links_1.linksOf)(obj)[rel]; }; } const formatMatches = (obj) => { if (obj.target == 'all') { return 'all'; } let res = ''; if (obj.targetQuery) { res += 'query,'; } if (obj.targetLinks) { res += 'links,'; } return res.slice(0, -1); }; const formatProviders = (obj) => { let res = ''; if (obj.aws) { res += 'aws,'; } if (obj.gcp) { res += 'gcp,'; } if (obj.azure) { res += 'azure,'; } return res.slice(0, -1); }; const formatSaKeys = (obj) => { if (!obj || !obj.keys) { return ''; } let result = ''; for (let k of obj.keys) { const line = `${k.name}`; result += line + '\n'; } return result.slice(0, -1); }; const formatProviderInfo = (obj) => { if (!obj || !obj.data) { return ''; } if (obj.provider == 'gcp') { return obj.data.projectId; } if (obj.provider == 'aws') { // arn:aws:iam::738753148043:role/cpln-coke" return obj.data.roleArn; } return ''; }; function formatTimestamp(prop, options, now) { return (obj) => { if (!obj || !obj[prop]) { return ''; } let date = new Date(obj[prop]); if (isNaN(date.getTime())) { return obj[prop]; } if (!now) { now = new Date(); } switch (options.ts) { case 'age': return humanizeDuration(now.getTime() - date.getTime()) + ' ago'; case 'iso': return date.toISOString(); case 'local': return date.toLocaleString(); default: return date.toISOString(); } }; } exports.formatTimestamp = formatTimestamp; function humanizeDuration(ms, options) { // Merge provided options with default options const finalOptions = { round: false, units: defaultUnits, largest: 1, ...(options || {}), }; // Floor the duration to the smallest unit const flooredDuration = floorDuration(ms, finalOptions.units || defaultUnits); // Note: If the duration is approximately 2 months, it will return "1 month" as an output return (0, humanize_duration_1.humanizer)(finalOptions)(flooredDuration, finalOptions); } exports.humanizeDuration = humanizeDuration; function floorDuration(milliseconds, units) { // Get the smallest unit from the unit array const smallestUnit = units[units.length - 1]; // Get the conversion rate for the smallest unit const conversionRate = conversionRates[smallestUnit]; // Floor the duration to the nearest conversion rate return Math.floor(milliseconds / conversionRate) * conversionRate; } exports.wellKnown = { NAME: { name: 'NAME', }, LINK: { name: 'LINK', }, ORIGIN: { name: 'ORIGIN', }, STATUS: { name: 'STATUS', }, DESCRIPTION: { name: 'DESCRIPTION', }, AGE: { name: 'AGE', }, PROVIDER: { name: 'PROVIDER', }, ID: { name: 'ID', }, VERSION: { name: 'VERSION', }, CREATED: { name: 'CREATED', }, LAST_MODIFIED: { name: 'MODIFIED', }, ENDPOINT: { name: 'ENDPOINT', }, MODIFIED: { name: 'MODIFIED', }, ALIAS: { name: 'ALIAS', }, DOMAIN: { name: 'DOMAIN', }, TAGS: { name: 'TAGS', wrapWord: true, }, }; function org(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.LINK, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), link('self'), formatKVs('tags'), ]; }, }; } exports.org = org; function account(options) { return { columns: [ // exports.wellKnown.ID, named('FULL NAME'), named('ACCOUNT NAME'), ], makeRow(obj) { return [ // obj.id, obj.fullName, obj.accountName, ]; }, }; } exports.account = account; function domain(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatKVs('tags'), ]; }, }; } exports.domain = domain; function cloudaccount(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.PROVIDER, named('INFO'), exports.wellKnown.CREATED, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), obj.provider, formatProviderInfo, formatTimestamp('created', options), formatKVs('tags'), ]; }, }; } exports.cloudaccount = cloudaccount; function secret(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, named('TYPE'), exports.wellKnown.CREATED, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), obj.type, formatTimestamp('created', options), formatKVs('tags'), ]; }, }; } exports.secret = secret; function serviceaccount(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, exports.wellKnown.ORIGIN, named('KEYS'), exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), obj.origin, formatSaKeys, formatKVs('tags'), ]; }, }; } exports.serviceaccount = serviceaccount; function event(options) { return { columns: [ // exports.wellKnown.ID, exports.wellKnown.STATUS, exports.wellKnown.CREATED, { name: 'CONTEXT', }, ], makeRow(obj) { return [ // obj.id, obj.status, formatTimestamp('created', options), formatKVs('context'), ]; }, }; } exports.event = event; function location(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.PROVIDER, named('ENABLED'), named('REGION'), exports.wellKnown.ORIGIN, exports.wellKnown.TAGS, ], makeRow(obj) { var _a; return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), obj.provider, !!((_a = obj.spec) === null || _a === void 0 ? void 0 : _a.enabled), obj.region, obj.origin, formatKVs('tags'), ]; }, }; } exports.location = location; function user(options) { return { columns: [ // exports.wellKnown.ID, named('FULL NAME'), named('EMAIL'), exports.wellKnown.CREATED, named('IDP'), exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.id, obj.name, obj.email, formatTimestamp('created', options), obj.idp, formatKVs('tags'), ]; }, }; } exports.user = user; function group(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, named('FILTER'), exports.wellKnown.ORIGIN, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), (obj) => { let res = []; if (obj.memberLinks) { res.push('links'); } if (obj.memberQuery) { res.push('query'); } return res.join('+'); }, obj.origin, formatKVs('tags'), ]; }, }; } exports.group = group; function policy(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, named('TARGET KIND'), named('MATCHES'), exports.wellKnown.ORIGIN, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), obj.targetKind, formatMatches, obj.origin, formatKVs('tags'), ]; }, }; } exports.policy = policy; function identity(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, named('GVC'), named('LOCAL NAME'), exports.wellKnown.CREATED, named('PROVIDERS'), exports.wellKnown.TAGS, ], makeRow(obj) { var _a; return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), (obj) => { const link = (0, links_1.linksOf)(obj).gvc; let components = link.split('/'); return components[4]; }, (_a = obj.status) === null || _a === void 0 ? void 0 : _a.objectName, formatTimestamp('created', options), formatProviders, formatKVs('tags'), ]; }, }; } exports.identity = identity; function ipset(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, named('LINK'), named('LOCATIONS'), exports.wellKnown.TAGS, ], makeRow(obj) { var _a; return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), ((_a = obj.spec) === null || _a === void 0 ? void 0 : _a.link) || '', formatIpSetLocations(obj), formatKVs('tags'), ]; }, }; } exports.ipset = ipset; function gvc(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, exports.wellKnown.ALIAS, exports.wellKnown.DOMAIN, named('LOCATIONS'), exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), obj.alias, obj.spec.domain, formatGVCLocations(obj), formatKVs('tags'), ]; }, }; } exports.gvc = gvc; function deployment(options) { return { columns: [ // named('NAME/LOCATION'), exports.wellKnown.LAST_MODIFIED, exports.wellKnown.STATUS, ], makeRow(obj) { return [ // obj.name, formatTimestamp('lastModified', options), formatKVs('status'), ]; }, }; } exports.deployment = deployment; function workload(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, named('GVC'), named('READY'), exports.wellKnown.CREATED, exports.wellKnown.ENDPOINT, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), (obj) => { const link = (0, links_1.linksOf)(obj).gvc; let components = link.split('/'); return components[4]; }, (obj) => obj.status.ready, formatTimestamp('created', options), getValueAt('status.endpoint'), formatKVs('tags'), ]; }, }; } exports.workload = workload; function dbcluster(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, named('GVC'), exports.wellKnown.CREATED, exports.wellKnown.ALIAS, named('DEFAULT SIZE'), named('LOCATIONS'), exports.wellKnown.TAGS, ], makeRow(obj) { var _a, _b, _c; return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), (obj) => { const link = (0, links_1.linksOf)(obj).gvc; let components = link.split('/'); return components[4]; }, formatTimestamp('created', options), getValueAt('alias'), // TODO change this when we have more than just postgres type (_c = (_b = (_a = obj.spec) === null || _a === void 0 ? void 0 : _a.postgres) === null || _b === void 0 ? void 0 : _b.defaults) === null || _c === void 0 ? void 0 : _c.size, formatDBClusterLocations(obj), formatKVs('tags'), ]; }, }; } exports.dbcluster = dbcluster; function volumeset(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, named('GVC'), exports.wellKnown.CREATED, named('PERFORMANCE CLASS'), named('FILE SYSTEM TYPE'), exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), (obj) => { const link = (0, links_1.linksOf)(obj).gvc; let components = link.split('/'); return components[4]; }, formatTimestamp('created', options), getValueAt('spec.performanceClass'), getValueAt('spec.fileSystemType'), formatKVs('tags'), ]; }, }; } exports.volumeset = volumeset; function memcachecluster(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, named('NODE COUNT'), named('NODE SIZE'), named('LOCATIONS'), exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), (obj) => { return obj.spec.nodeCount; }, (obj) => { return obj.spec.nodeSizeGiB + ' GiB'; }, formatSpecLocations(obj), formatKVs('tags'), ]; }, }; } exports.memcachecluster = memcachecluster; function mk8s(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.ALIAS, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, named('VERSION'), named('LOCATION'), named('PROVIDER'), named('ADDONS'), exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, obj.alias, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), (obj) => { return obj.spec.version; }, (obj) => { return obj.status.homeLocation; }, (obj) => { return Object.keys(obj.spec.provider)[0]; }, (obj) => { return Object.keys(obj.spec.addOns || []) .sort() .join('\n'); }, formatKVs('tags'), ]; }, }; } exports.mk8s = mk8s; function spicedbcluster(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, named('VERSION'), named('LOCATIONS'), exports.wellKnown.ENDPOINT, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), (obj) => { return obj.spec.version; }, formatSpecLocations(obj), getValueAt('status.externalEndpoint'), formatKVs('tags'), ]; }, }; } exports.spicedbcluster = spicedbcluster; function quota(options) { return { columns: [ // exports.wellKnown.ID, exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.ORIGIN, named('CURRENT'), named('MAX'), named('UNIT'), named('DIMENSIONS'), ], makeRow(obj) { return [ // obj.id, obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), obj.origin, obj.current, obj.max, obj.unit, formatKVs('dimensions'), ]; }, }; } exports.quota = quota; function flattenedPermissions(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, named('IMPLIES'), ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), (obj) => { const implied = obj.implied[obj.name]; if (implied) { return (0, objects_1.toArray)(implied).join(', '); } return ''; }, ]; }, }; } exports.flattenedPermissions = flattenedPermissions; function task(options) { return { columns: [ // exports.wellKnown.ID, exports.wellKnown.DESCRIPTION, named('TYPE'), named('TARGET'), exports.wellKnown.CREATED, named('STATUS'), ], makeRow(obj) { return [ // obj.id, truncate('description', DESCRIPTION_MAX_LENGTH, options), obj.type, obj.targetEmail, formatTimestamp('created', options), obj.status, ]; }, }; } exports.task = task; function agent(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.CREATED, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), formatTimestamp('created', options), formatKVs('tags'), ]; }, }; } exports.agent = agent; function flattenedAccessReport(options) { return { columns: [ // named('PERMISSION'), named('PRINCIPAL'), named('GRANTED'), ], makeRow(obj) { return [ // obj.permission, obj.principalLink, obj.grantedPermissions.join(', '), ]; }, }; } exports.flattenedAccessReport = flattenedAccessReport; function image(options) { return { columns: [ // exports.wellKnown.NAME, named('PULL'), named('DIGEST'), exports.wellKnown.CREATED, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, (obj) => { var _a; let res = (_a = options._hints) === null || _a === void 0 ? void 0 : _a.registry; if (res) { res = res + '/' + obj.name; } else { res = obj.name; } return res; }, truncate('digest', 16, options), formatTimestamp('created', options), formatKVs('tags'), ]; }, }; } exports.image = image; function replicas(options) { return { columns: [ // named('REPLICA'), ], makeRow(obj) { return [ // obj, ]; }, }; } exports.replicas = replicas; function auditctx(options) { return { columns: [ // exports.wellKnown.NAME, exports.wellKnown.DESCRIPTION, exports.wellKnown.ORIGIN, exports.wellKnown.TAGS, ], makeRow(obj) { return [ // obj.name, truncate('description', DESCRIPTION_MAX_LENGTH, options), obj.origin, formatKVs('tags'), ]; }, }; } exports.auditctx = auditctx; function volume(options) { return { columns: [ // named('LOCATION'), named('VOLUME INDEX'), named('LIFECYCLE'), ], makeRow(obj) { var _a, _b; return [ // obj.location, obj.volumeIndex, ((_a = obj.stage) === null || _a === void 0 ? void 0 : _a.charAt(0).toUpperCase()) + ((_b = obj.stage) === null || _b === void 0 ? void 0 : _b.slice(1)), ]; }, }; } exports.volume = volume; function volumeSnapshot(options) { return { columns: [ // named('LOCATION'), named('VOLUME INDEX'), exports.wellKnown.NAME, exports.wellKnown.TAGS, named('STAGE'), named('SNAPSHOT CREATED'), ], makeRow(obj) { var _a, _b; return [ // obj.location, obj.volumeIndex, obj.name, formatKVs('tags'), ((_a = obj.stage) === null || _a === void 0 ? void 0 : _a.charAt(0).toUpperCase()) + ((_b = obj.stage) === null || _b === void 0 ? void 0 : _b.slice(1)), obj.created ? formatTimestamp('created', options) : '', ]; }, }; } exports.volumeSnapshot = volumeSnapshot; function volumeNewSize(options) { return { columns: [ // exports.wellKnown.NAME, named('NEW SIZE'), named('LOCATION'), named('VOLUME INDEX'), named('STAGE'), ], makeRow(obj) { var _a, _b; return [ // obj.name, obj.newSize, obj.location, obj.volumeIndex, ((_a = obj.stage) === null || _a === void 0 ? void 0 : _a.charAt(0).toUpperCase()) + ((_b = obj.stage) === null || _b === void 0 ? void 0 : _b.slice(1)), ]; }, }; } exports.volumeNewSize = volumeNewSize; function workloadCron(options) { return { columns: [ // named('WORKLOAD'), named('LOCATION'), named('NAME OR COMMAND ID'), named('STATUS'), named('START TIME'), named('COMPLETION TIME'), ], makeRow(obj) { var _a, _b; return [ // obj.workloadName, obj.location, obj.id, ((_a = obj.status) === null || _a === void 0 ? void 0 : _a.charAt(0).toUpperCase()) + ((_b = obj.status) === null || _b === void 0 ? void 0 : _b.slice(1)), obj.startTime.toLocaleString(), obj.completionTime ? obj.completionTime.toLocaleString() : '', ]; }, }; } exports.workloadCron = workloadCron; function helmDeployment(options) { return { columns: [ // named('REVISION'), named('UPDATED'), named('STATUS'), named('CHART'), named('APP VERSION'), named('DESCRIPTION'), ], makeRow(obj) { return [ // obj.revision, formatTimestamp('updated', options), obj.status, obj.chart, obj.appVersion, truncate('description', DESCRIPTION_MAX_LENGTH, options), ]; }, }; } exports.helmDeployment = helmDeployment; function helmList(options) { return { columns: [ // exports.wellKnown.NAME, named('GVC'), named('REVISION'), named('UPDATED'), named('STATUS'), named('CHART'), named('APP VERSION'), ], makeRow(obj) { return [ // obj.release, obj.gvc, obj.revision, formatTimestamp('updated', options), obj.status, obj.chart, obj.appVersion, ]; }, }; } exports.helmList = helmList; function stopReplica(options) { return { columns: [ // named('WORKLOAD'), named('LOCATION'), named('REPLICA'), named('STATUS'), named('START TIME'), named('COMPLETION TIME'), ], makeRow(obj) { var _a, _b; return [ // obj.workloadName, obj.location, obj.replica, ((_a = obj.status) === null || _a === void 0 ? void 0 : _a.charAt(0).toUpperCase()) + ((_b = obj.status) === null || _b === void 0 ? void 0 : _b.slice(1)), obj.startTime.toLocaleString(), obj.completionTime ? obj.completionTime.toLocaleString() : '', ]; }, }; } exports.stopReplica = stopReplica; //# sourceMappingURL=models.js.map