/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ import Watchable from './watchable'; import addToPath from 'nomad-ui/utils/add-to-path'; import classic from 'ember-classic-decorator'; @classic export default class AllocationAdapter extends Watchable { stop = adapterAction('/stop'); restart(allocation, taskName) { const prefix = `${this.host || '/'}${this.urlPrefix()}`; const url = `${prefix}/client/allocation/${allocation.id}/restart`; return this.ajax(url, 'PUT', { data: taskName && { TaskName: taskName }, }); } restartAll(allocation) { const prefix = `${this.host || '/'}${this.urlPrefix()}`; const url = `${prefix}/client/allocation/${allocation.id}/restart`; return this.ajax(url, 'PUT', { data: { AllTasks: true } }); } ls(model, path) { return this.token .authorizedRequest( `/v1/client/fs/ls/${model.id}?path=${encodeURIComponent(path)}` ) .then(handleFSResponse); } stat(model, path) { return this.token .authorizedRequest( `/v1/client/fs/stat/${model.id}?path=${encodeURIComponent(path)}` ) .then(handleFSResponse); } async check(model) { const res = await this.token.authorizedRequest( `/v1/client/allocation/${model.id}/checks` ); const data = await res.json(); // Append allocation ID to each check Object.values(data).forEach((check) => { check.Alloc = model.id; check.Timestamp = check.Timestamp * 1000; // Convert to milliseconds }); return data; } } async function handleFSResponse(response) { if (response.ok) { return response.json(); } else { const body = await response.text(); throw { code: response.status, toString: () => body, }; } } function adapterAction(path, verb = 'POST') { return function (allocation) { const url = addToPath( this.urlForFindRecord(allocation.id, 'allocation'), path ); return this.ajax(url, verb); }; }