Esempio n. 1
0
        public IList <Project> RunningProjects()
        {
            var containers = _dockerService.RunDockerContainerLsAll();
            var projects   = new Dictionary <Guid, Project>();

            foreach (var container in containers)
            {
                var labels = container.Labels.Split(',')
                             .Select(part => part.Split('='))
                             .Where(part => part.Length == 2)
                             .ToDictionary(sp => sp[0], sp => sp[1]);

                if (!labels.ContainsKey(DimmyDockerComposeLabels.Project))
                {
                    continue;
                }

                if (!labels.ContainsKey(DimmyDockerComposeLabels.ProjectId))
                {
                    throw new ServiceDoesNotHaveDimmyProjectIdLabel();
                }

                var canParseProjectId = Guid.TryParse((ReadOnlySpan <char>)labels[DimmyDockerComposeLabels.ProjectId], out var projectId);

                if (!canParseProjectId)
                {
                    throw new ContainerDoesNotHaveValidDimmyProjectId();
                }

                var projectName        = labels[DimmyDockerComposeLabels.ProjectName];
                var projectWorkingPath = labels[DimmyDockerComposeLabels.ProjectWorkingPath];

                if (!projects.ContainsKey(projectId))
                {
                    projects.Add(projectId, new Project
                    {
                        Name        = projectName,
                        Id          = projectId,
                        WorkingPath = projectWorkingPath
                    });
                }

                projects[projectId].Services.Add(new Service
                {
                    Name        = labels[DimmyDockerComposeLabels.ProjectRole],
                    ContainerId = container.ID
                });
            }

            return(projects.Values.ToList());
        }