You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
portainer/app/docker/services/containerService.js

119 lines
4.5 KiB

import angular from 'angular';
import {
killContainer,
pauseContainer,
removeContainer,
renameContainer,
restartContainer,
resumeContainer,
startContainer,
stopContainer,
recreateContainer,
getContainerLogs,
} from '@/react/docker/containers/containers.service';
import { getContainers } from '@/react/docker/containers/queries/useContainers';
import { getContainer } from '@/react/docker/containers/queries/useContainer';
import { resizeTTY } from '@/react/docker/containers/queries/useContainerResizeTTYMutation';
import { updateContainer } from '@/react/docker/containers/queries/useUpdateContainer';
import { createExec } from '@/react/docker/containers/queries/useCreateExecMutation';
import { containerStats } from '@/react/docker/containers/queries/useContainerStats';
import { containerTop } from '@/react/docker/containers/queries/useContainerTop';
import { ContainerDetailsViewModel } from '../models/containerDetails';
import { ContainerStatsViewModel } from '../models/containerStats';
import { formatLogs } from '../helpers/logHelper';
angular.module('portainer.docker').factory('ContainerService', ContainerServiceFactory);
/* @ngInject */
function ContainerServiceFactory(AngularToReact) {
const { useAxios } = AngularToReact;
return {
killContainer: useAxios(killContainer), // container edit
pauseContainer: useAxios(pauseContainer), // container edit
renameContainer: useAxios(renameContainer), // container edit
restartContainer: useAxios(restartContainer), // container edit
resumeContainer: useAxios(resumeContainer), // container edit
startContainer: useAxios(startContainer), // container edit
stopContainer: useAxios(stopContainer), // container edit
recreateContainer: useAxios(recreateContainer), // container edit
remove: useAxios(removeContainer), // container edit
container: useAxios(getContainerAngularJS), // container console + container edit + container stats
containers: useAxios(getContainers), // dashboard + services list + service edit + voluem edit + stackservice + stack create + stack edit
resizeTTY: useAxios(resizeTTYAngularJS), // container console
updateRestartPolicy: useAxios(updateRestartPolicyAngularJS), // container edit
createExec: useAxios(createExec), // container console
containerStats: useAxios(containerStatsAngularJS), // container stats
containerTop: useAxios(containerTop), // container stats
inspect: useAxios(getContainer), // container inspect
logs: useAxios(containerLogsAngularJS), // container logs
};
/**
* @param {EnvironmentId} environmentId
* @param {ContainerId} id
* @param {*} param2
*/
async function getContainerAngularJS(environmentId, id, { nodeName } = {}) {
const data = await getContainer(environmentId, id, { nodeName });
return new ContainerDetailsViewModel(data);
}
/**
* @param {EnvironmentId} environmentId
* @param {string} containerId
* @param {number} width
* @param {number} height
* @param timeout DEPRECATED: Previously used in pure AJS implementation
*/
async function resizeTTYAngularJS(environmentId, containerId, width, height) {
return resizeTTY(environmentId, containerId, { width, height });
}
/**
* @param {EnvironmentId} environmentId
* @param {ContainerId} id
* @param {RestartPolicy['Name']} restartPolicy
* @param {RestartPolicy['MaximumRetryCount']} maximumRetryCounts
*/
async function updateRestartPolicyAngularJS(environmentId, id, restartPolicy, maximumRetryCounts) {
return updateContainer(environmentId, id, {
RestartPolicy: {
Name: restartPolicy,
MaximumRetryCount: maximumRetryCounts,
},
});
}
/**
* @param {EnvironmentId} environmentId
* @param {ContainerId} id
*/
async function containerStatsAngularJS(environmentId, id) {
const data = await containerStats(environmentId, id);
return new ContainerStatsViewModel(data);
}
/**
* @param {EnvironmentId} environmentId
* @param {Containerid} id
* @param {boolean?} stdout
* @param {boolean?} stderr
* @param {boolean?} timestamps
* @param {number?} since
* @param {number?} tail
* @param {boolean?} stripHeaders
*/
async function containerLogsAngularJS(environmentId, id, stdout = false, stderr = false, timestamps = false, since = 0, tail = 'all', stripHeaders) {
const data = await getContainerLogs(environmentId, id, {
since,
stderr,
stdout,
tail,
timestamps,
});
return formatLogs(data, { stripHeaders, withTimestamps: !!timestamps });
}
}