samcli/local/docker/container_analyzer.py (24 lines of code) (raw):
"""
Class for handling the analysis and inspection of Docker containers
"""
import logging
from dataclasses import dataclass
from samcli.local.docker.container import Container
from samcli.local.docker.manager import ContainerManager
LOG = logging.getLogger(__name__)
DEFAULT_OUT_OF_MEMORY = False
@dataclass
class ContainerState:
out_of_memory: bool
class ContainerAnalyzer:
def __init__(self, container_manager: ContainerManager, container: Container):
self.container_manager = container_manager
self.container = container
def inspect(self) -> ContainerState:
"""
Inspect the state of a container by calling the "inspect()" API that Docker provides.
Extract relevant information into a ContainerState object.
Returns
-------
ContainerState:
Returns a ContainerState object with relevant container data
"""
if not self.container.id:
LOG.debug("Container ID not defined, unable to fetch container state")
return ContainerState(DEFAULT_OUT_OF_MEMORY)
state = self.container_manager.inspect(self.container.id)
if isinstance(state, bool):
LOG.debug("Unable to fetch container state")
return ContainerState(DEFAULT_OUT_OF_MEMORY)
container_state = ContainerState(state.get("State", {}).get("OOMKilled", DEFAULT_OUT_OF_MEMORY))
LOG.debug("[Container state] OOMKilled %s", container_state.out_of_memory)
return container_state