Class: DockerSwarm::Middleware::LogStreamDemuxer
- Inherits:
-
Excon::Middleware::Base
- Object
- Excon::Middleware::Base
- DockerSwarm::Middleware::LogStreamDemuxer
- Defined in:
- lib/docker_swarm/middleware/log_stream_demuxer.rb
Overview
Demultiplexa el stream de logs del Engine para que Concerns::Loggable#logs
devuelva texto limpio en Container, Service y Task.
Sin TTY el Engine enmarca cada fragmento con 8 bytes de cabecera: 1 de tipo de
stream, 3 de relleno en cero y 4 de tamaño en big-endian. Ese framing tiene que
morir en un middleware y no en Loggable: Connection#request devuelve
response.body y descarta los headers, así que aguas abajo ya no queda
Content-Type con el que decidir. Ver ADR-025 cláusula 3.
Constant Summary collapse
- MULTIPLEXED_CONTENT_TYPE =
Content-Type que afirma el framing. Existe desde la API v1.42.
"application/vnd.docker.multiplexed-stream"- RAW_CONTENT_TYPE =
Content-Type ambiguo: con TTY no hay framing, pero antes de v1.42 era el único que existía y también viajaba en streams multiplexados.
"application/vnd.docker.raw-stream"- HEADER_SIZE =
Tamaño de la cabecera de frame, en bytes.
8- STREAM_TYPES =
Valores válidos del byte 0: stdin, stdout, stderr.
[ 0, 1, 2 ].freeze
Instance Method Summary collapse
Instance Method Details
#response_call(env) ⇒ Object
27 28 29 30 31 |
# File 'lib/docker_swarm/middleware/log_stream_demuxer.rb', line 27 def response_call(env) demux!(env) if env[:response] @stack.response_call(env) end |