mirror of https://github.com/portainer/portainer
88 lines
2.0 KiB
TypeScript
88 lines
2.0 KiB
TypeScript
|
import _ from 'lodash';
|
||
|
|
||
|
import { ResourceControlViewModel } from '@/portainer/access-control/models/ResourceControlViewModel';
|
||
|
|
||
|
import { DockerContainer, ContainerStatus } from './types';
|
||
|
import { DockerContainerResponse } from './types/response';
|
||
|
|
||
|
export function parseViewModel(
|
||
|
response: DockerContainerResponse
|
||
|
): DockerContainer {
|
||
|
const resourceControl =
|
||
|
response.Portainer?.ResourceControl &&
|
||
|
new ResourceControlViewModel(response?.Portainer?.ResourceControl);
|
||
|
const nodeName = response.Portainer?.Agent?.NodeName || '';
|
||
|
|
||
|
const ip =
|
||
|
Object.values(response?.NetworkSettings?.Networks || {})[0]?.IPAddress ||
|
||
|
'';
|
||
|
|
||
|
const labels = response.Labels || {};
|
||
|
const stackName =
|
||
|
labels['com.docker.compose.project'] ||
|
||
|
labels['com.docker.stack.namespace'];
|
||
|
|
||
|
const status = createStatus(response.Status);
|
||
|
|
||
|
const ports = _.compact(
|
||
|
response.Ports?.map(
|
||
|
(p) =>
|
||
|
p.PublicPort && {
|
||
|
host: p.IP,
|
||
|
private: p.PrivatePort,
|
||
|
public: p.PublicPort,
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
return {
|
||
|
...response,
|
||
|
ResourceControl: resourceControl,
|
||
|
NodeName: nodeName,
|
||
|
IP: ip,
|
||
|
StackName: stackName,
|
||
|
Status: status,
|
||
|
Ports: ports,
|
||
|
StatusText: response.Status,
|
||
|
Gpus: '',
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function createStatus(statusText = ''): ContainerStatus {
|
||
|
const status = statusText.toLowerCase();
|
||
|
|
||
|
if (status.includes(ContainerStatus.Paused)) {
|
||
|
return ContainerStatus.Paused;
|
||
|
}
|
||
|
|
||
|
if (status.includes(ContainerStatus.Dead)) {
|
||
|
return ContainerStatus.Dead;
|
||
|
}
|
||
|
|
||
|
if (status.includes(ContainerStatus.Created)) {
|
||
|
return ContainerStatus.Created;
|
||
|
}
|
||
|
|
||
|
if (status.includes(ContainerStatus.Stopped)) {
|
||
|
return ContainerStatus.Stopped;
|
||
|
}
|
||
|
|
||
|
if (status.includes(ContainerStatus.Exited)) {
|
||
|
return ContainerStatus.Exited;
|
||
|
}
|
||
|
|
||
|
if (status.includes('(healthy)')) {
|
||
|
return ContainerStatus.Healthy;
|
||
|
}
|
||
|
|
||
|
if (status.includes('(unhealthy)')) {
|
||
|
return ContainerStatus.Unhealthy;
|
||
|
}
|
||
|
|
||
|
if (status.includes('(health: starting)')) {
|
||
|
return ContainerStatus.Starting;
|
||
|
}
|
||
|
|
||
|
return ContainerStatus.Running;
|
||
|
}
|