parent
							
								
									611755e53e
								
							
						
					
					
						commit
						9d7a873c97
					
				
							
								
								
									
										81
									
								
								deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/consume_events_stream_command.ex
								
								
								
									vendored
								
								
									Normal file
								
							
							
						
						
									
										81
									
								
								deps/rabbitmq_cli/lib/rabbitmq/cli/diagnostics/commands/consume_events_stream_command.ex
								
								
								
									vendored
								
								
									Normal file
								
							| 
						 | 
					@ -0,0 +1,81 @@
 | 
				
			||||||
 | 
					## The contents of this file are subject to the Mozilla Public License
 | 
				
			||||||
 | 
					## Version 1.1 (the "License"); you may not use this file except in
 | 
				
			||||||
 | 
					## compliance with the License. You may obtain a copy of the License
 | 
				
			||||||
 | 
					## at https://www.mozilla.org/MPL/
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## Software distributed under the License is distributed on an "AS IS"
 | 
				
			||||||
 | 
					## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 | 
				
			||||||
 | 
					## the License for the specific language governing rights and
 | 
				
			||||||
 | 
					## limitations under the License.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## The Original Code is RabbitMQ.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## The Initial Developer of the Original Code is GoPivotal, Inc.
 | 
				
			||||||
 | 
					## Copyright (c) 2019 Pivotal Software, Inc.  All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defmodule RabbitMQ.CLI.Diagnostics.Commands.ConsumeEventsStreamCommand do
 | 
				
			||||||
 | 
					  @moduledoc """
 | 
				
			||||||
 | 
					  Displays standard log file location on the target node
 | 
				
			||||||
 | 
					  """
 | 
				
			||||||
 | 
					  @behaviour RabbitMQ.CLI.CommandBehaviour
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  alias RabbitMQ.CLI.Core.LogFiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def switches(), do: [duration: :integer, pattern: :string, timeout: :integer]
 | 
				
			||||||
 | 
					  def aliases(), do: [d: :duration, t: :timeout]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def merge_defaults(args, opts) do
 | 
				
			||||||
 | 
					    {args, Map.merge(%{duration: :infinity, pattern: ".*"}, opts)}
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  use RabbitMQ.CLI.Core.AcceptsNoPositionalArguments
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def printer(), do: RabbitMQ.CLI.Printers.StdIOJson
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def run([], %{node: node_name, timeout: timeout, duration: duration, pattern: pattern}) do
 | 
				
			||||||
 | 
					    pid = self()
 | 
				
			||||||
 | 
					    ref = make_ref()
 | 
				
			||||||
 | 
					    subscribed = :rabbit_misc.rpc_call(
 | 
				
			||||||
 | 
					      node_name,
 | 
				
			||||||
 | 
					      :rabbit_event_consumer, :register,
 | 
				
			||||||
 | 
					      [pid, ref, duration, pattern],
 | 
				
			||||||
 | 
					      timeout)
 | 
				
			||||||
 | 
					    case subscribed do
 | 
				
			||||||
 | 
					      {:ok, ^ref} ->
 | 
				
			||||||
 | 
					        Stream.unfold(:confinue,
 | 
				
			||||||
 | 
					          fn(:finished) -> nil
 | 
				
			||||||
 | 
					            (:confinue) ->
 | 
				
			||||||
 | 
					              receive do
 | 
				
			||||||
 | 
					              {^ref, data, :finished} ->
 | 
				
			||||||
 | 
					                {data, :finished};
 | 
				
			||||||
 | 
					              {^ref, data, :confinue} ->
 | 
				
			||||||
 | 
					                {data, :confinue}
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					          end)
 | 
				
			||||||
 | 
					      error -> error
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  use RabbitMQ.CLI.DefaultOutput
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def help_section(), do: :observability_and_health_checks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def description(), do: "Streams events from a running node for a period of time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def usage, do: "consume_events_stream [--duration|-d <seconds>] [--pattern <pattern>]"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def usage_additional() do
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      ["<duration_in_seconds>", "duration in seconds to stream log. Defaults to infinity"],
 | 
				
			||||||
 | 
					      ["<pattern>", "regular expression to pick events"]
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def banner([], %{node: node_name, duration: :infinity}) do
 | 
				
			||||||
 | 
					    "Streaming logs from node #{node_name} ..."
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  def banner([], %{node: node_name, duration: duration}) do
 | 
				
			||||||
 | 
					    "Streaming logs from node #{node_name} for #{duration} seconds ..."
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,33 @@
 | 
				
			||||||
 | 
					## The contents of this file are subject to the Mozilla Public License
 | 
				
			||||||
 | 
					## Version 1.1 (the "License"); you may not use this file except in
 | 
				
			||||||
 | 
					## compliance with the License. You may obtain a copy of the License
 | 
				
			||||||
 | 
					## at https://www.mozilla.org/MPL/
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## Software distributed under the License is distributed on an "AS IS"
 | 
				
			||||||
 | 
					## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 | 
				
			||||||
 | 
					## the License for the specific language governing rights and
 | 
				
			||||||
 | 
					## limitations under the License.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## The Original Code is RabbitMQ.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## The Initial Developer of the Original Code is GoPivotal, Inc.
 | 
				
			||||||
 | 
					## Copyright (c) 2007-2019 Pivotal Software, Inc.  All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defmodule RabbitMQ.CLI.Printers.StdIOJson do
 | 
				
			||||||
 | 
					  @behaviour RabbitMQ.CLI.PrinterBehaviour
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def init(_), do: {:ok, :ok}
 | 
				
			||||||
 | 
					  def finish(_), do: :ok
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def print_output(nil, _), do: :ok
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def print_output(output, _) do
 | 
				
			||||||
 | 
					    {:ok, json} = JSON.encode(output)
 | 
				
			||||||
 | 
					    IO.puts(json)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def print_ok(_) do
 | 
				
			||||||
 | 
					    :ok
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
		Reference in New Issue