| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import os
- from enum import Enum
- import requests
- from docker import ContextAPI
- from docker.transport import UnixHTTPAdapter
- from compose.const import IS_WINDOWS_PLATFORM
- if IS_WINDOWS_PLATFORM:
- from docker.transport import NpipeHTTPAdapter
- class 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).strip() 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,
- }
|