Class: DockerSwarm::Middleware::LogStreamDemuxer

Inherits:
Excon::Middleware::Base
  • Object
show all
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