| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | import osfrom enum import Enumimport requestsfrom docker import ContextAPIfrom docker.transport import UnixHTTPAdapterfrom compose.const import IS_WINDOWS_PLATFORMif IS_WINDOWS_PLATFORM:    from docker.transport import NpipeHTTPAdapterclass Status(Enum):    SUCCESS = "success"    FAILURE = "failure"    CANCELED = "canceled"class MetricsSource:    CLI = "docker-compose"if IS_WINDOWS_PLATFORM:    METRICS_SOCKET_FILE = 'npipe://\\\\.\\pipe\\docker_cli'else:    METRICS_SOCKET_FILE = 'http+unix:///var/run/docker-cli.sock'class MetricsCommand(requests.Session):    """    Representation of a command in the metrics.    """    def __init__(self, command,                 context_type=None, status=Status.SUCCESS,                 source=MetricsSource.CLI, uri=None):        super().__init__()        self.command = "compose " + command if command else "compose --help"        self.context = context_type or ContextAPI.get_current_context().context_type or 'moby'        self.source = source        self.status = status.value        self.uri = uri or os.environ.get("METRICS_SOCKET_FILE", METRICS_SOCKET_FILE)        if IS_WINDOWS_PLATFORM:            self.mount("http+unix://", NpipeHTTPAdapter(self.uri))        else:            self.mount("http+unix://", UnixHTTPAdapter(self.uri))    def send_metrics(self):        try:            return self.post("http+unix://localhost/usage",                             json=self.to_map(),                             timeout=.05,                             headers={'Content-Type': 'application/json'})        except Exception as e:            return e    def to_map(self):        return {            'command': self.command,            'context': self.context,            'source': self.source,            'status': self.status,        }
 |