portainer/portainer

View on GitHub
app/edge/services/edge-job.js

Summary

Maintainability
A
2 hrs
Test Coverage
import angular from 'angular';
import _ from 'lodash-es';

import { ScheduleCreateRequest, ScheduleUpdateRequest } from '@/portainer/models/schedule';

function EdgeJobService(EdgeJobs, EdgeJobResults, FileUploadService) {
  var service = {};

  service.edgeJob = edgeJob;
  async function edgeJob(edgeJobId) {
    try {
      return await EdgeJobs.get({ id: edgeJobId }).$promise;
    } catch (err) {
      throw { msg: 'Unable to retrieve edgeJob', err: err };
    }
  }

  service.edgeJobs = edgeJobs;
  async function edgeJobs() {
    try {
      return await EdgeJobs.query().$promise;
    } catch (err) {
      throw { msg: 'Unable to retrieve edgeJobs', err: err };
    }
  }

  service.jobResults = jobResults;
  async function jobResults(edgeJobId) {
    try {
      const results = await EdgeJobResults.query({ id: edgeJobId }).$promise;

      return _.sortBy(results, ['Id']);
    } catch (err) {
      throw { msg: 'Unable to retrieve results associated to the edgeJob', err: err };
    }
  }

  service.logFile = logFile;
  function logFile(id, taskId) {
    return EdgeJobResults.logFile({ id, taskId }).$promise;
  }

  service.collectLogs = collectLogs;
  function collectLogs(id, taskId) {
    return EdgeJobResults.collectLogs({ id, taskId }).$promise;
  }

  service.clearLogs = clearLogs;
  function clearLogs(id, taskId) {
    return EdgeJobResults.clearLogs({ id, taskId }).$promise;
  }

  service.createEdgeJobFromFileContent = function (model) {
    var payload = new ScheduleCreateRequest(model);
    return EdgeJobs.create({}, { method: 'string', ...payload }).$promise;
  };

  service.createEdgeJobFromFileUpload = function (model) {
    var payload = new ScheduleCreateRequest(model);
    return FileUploadService.createSchedule(payload);
  };

  service.updateEdgeJob = function (model) {
    var payload = new ScheduleUpdateRequest(model);
    return EdgeJobs.update(payload).$promise;
  };

  service.remove = function (edgeJobId) {
    return EdgeJobs.remove({ id: edgeJobId }).$promise;
  };

  service.getScriptFile = function (edgeJobId) {
    return EdgeJobs.file({ id: edgeJobId }).$promise;
  };

  return service;
}

angular.module('portainer.edge').factory('EdgeJobService', EdgeJobService);