UNPKG

clever-tools

Version:

Command Line Interface for Clever Cloud.

109 lines (89 loc) 3.67 kB
import { createDrain, deleteDrain, getDrains, updateDrainState } from '@clevercloud/client/esm/api/v2/log.js'; import { Logger } from '../logger.js'; import * as Application from '../models/application.js'; import { createDrainBody } from '../models/drain.js'; import { sendToApi } from '../models/send-to-api.js'; // TODO: This could be useful in other commands async function getAppOrAddonId({ alias, appIdOrName, addonId }) { return addonId != null ? addonId : await Application.resolveId(appIdOrName, alias).then(({ appId }) => appId); } export async function list(params) { const { alias, app: appIdOrName, addon: addonId, format } = params.options; const appIdOrAddonId = await getAppOrAddonId({ alias, appIdOrName, addonId }); const drains = await getDrains({ appId: appIdOrAddonId }).then(sendToApi); switch (format) { case 'json': { const formattedDrains = drains.map((drain) => ({ id: drain.id, target: drain.target, state: drain.state, })); Logger.printJson(formattedDrains); break; } case 'human': default: { if (drains.length === 0) { Logger.println(`There are no drains for ${appIdOrAddonId}`); } drains.forEach((drain) => { const { id, state, target } = drain; const { url, drainType, indexPrefix, structuredDataParameters } = target; let drainView = `${id} -> ${state} for ${url} as ${drainType}`; if (indexPrefix != null) { drainView += `, custom index: '${indexPrefix}-YYYY-MM-DD'`; } if (structuredDataParameters != null) { drainView += `, sd-params: '${structuredDataParameters}'`; } Logger.println(drainView); }); } } } export async function create(params) { const [drainTargetType, drainTargetURL] = params.args; const { alias, app: appIdOrName, addon: addonId, username, password, 'api-key': apiKey, 'index-prefix': indexPrefix, 'sd-params': structuredDataParameters, } = params.options; const drainTargetCredentials = { username, password }; const drainTargetConfig = { apiKey, indexPrefix, structuredDataParameters }; const appIdOrAddonId = await getAppOrAddonId({ alias, appIdOrName, addonId }); const body = createDrainBody( appIdOrAddonId, drainTargetURL, drainTargetType, drainTargetCredentials, drainTargetConfig, ); await createDrain({ appId: appIdOrAddonId }, body).then(sendToApi); Logger.println('Your drain has been successfully saved'); } export async function rm(params) { const [drainId] = params.args; const { alias, app: appIdOrName, addon: addonId } = params.options; const appIdOrAddonId = await getAppOrAddonId({ alias, appIdOrName, addonId }); await deleteDrain({ appId: appIdOrAddonId, drainId }).then(sendToApi); Logger.println('Your drain has been successfully removed'); } export async function enable(params) { const [drainId] = params.args; const { alias, app: appIdOrName, addon: addonId } = params.options; const appIdOrAddonId = await getAppOrAddonId({ alias, appIdOrName, addonId }); await updateDrainState({ appId: appIdOrAddonId, drainId }, { state: 'ENABLED' }).then(sendToApi); Logger.println('Your drain has been enabled'); } export async function disable(params) { const [drainId] = params.args; const { alias, app: appIdOrName, addon: addonId } = params.options; const appIdOrAddonId = await getAppOrAddonId({ alias, appIdOrName, addonId }); await updateDrainState({ appId: appIdOrAddonId, drainId }, { state: 'DISABLED' }).then(sendToApi); Logger.println('Your drain has been disabled'); }