import { ServiceViewModel } from '../models/service'; angular.module('portainer.docker').factory('ServiceService', [ '$q', 'Service', 'ServiceHelper', 'TaskService', 'ResourceControlService', 'LogHelper', function ServiceServiceFactory($q, Service, ServiceHelper, TaskService, ResourceControlService, LogHelper) { 'use strict'; var service = {}; service.services = function (filters) { var deferred = $q.defer(); Service.query({ filters: filters ? filters : {} }) .$promise.then(function success(data) { var services = data.map(function (item) { return new ServiceViewModel(item); }); deferred.resolve(services); }) .catch(function error(err) { deferred.reject({ msg: 'Unable to retrieve services', err: err }); }); return deferred.promise; }; service.service = function (id) { var deferred = $q.defer(); Service.get({ id: id }) .$promise.then(function success(data) { var service = new ServiceViewModel(data); deferred.resolve(service); }) .catch(function error(err) { deferred.reject({ msg: 'Unable to retrieve service details', err: err }); }); return deferred.promise; }; service.remove = function (service) { var deferred = $q.defer(); Service.remove({ id: service.Id }) .$promise.then(function success(data) { if (data.message) { deferred.reject({ msg: data.message, err: data.message }); } else { deferred.resolve(); } }) .catch(function error(err) { deferred.reject({ msg: 'Unable to remove service', err: err }); }); return deferred.promise; }; service.update = function (serv, config, rollback) { return service.service(serv.Id).then((data) => { const params = { id: serv.Id, version: data.Version, }; if (rollback) { params.rollback = rollback; } return Service.update(params, config).$promise; }); }; service.logs = function (id, stdout, stderr, timestamps, since, tail) { var deferred = $q.defer(); var parameters = { id: id, stdout: stdout || 0, stderr: stderr || 0, timestamps: timestamps || 0, since: since || 0, tail: tail || 'all', }; Service.logs(parameters) .$promise.then(function success(data) { var logs = LogHelper.formatLogs(data.logs, { stripHeaders: true, withTimestamps: !!timestamps }); deferred.resolve(logs); }) .catch(function error(err) { deferred.reject(err); }); return deferred.promise; }; return service; }, ]);