Class: LogStash::PipelineAction::Create

Inherits:
Base
  • Object
show all
Includes:
Util::Loggable
Defined in:
lib/logstash/pipeline_action/create.rb

Instance Method Summary collapse

Methods inherited from Base

#<=>, #inspect

Constructor Details

#initialize(pipeline_config, metric) ⇒ Create

We currently pass around the metric object again this is needed to correctly create a pipeline, in a future PR we could pass a factory to create the pipeline so we pass the logic to create the pipeline instead.



15
16
17
18
# File 'lib/logstash/pipeline_action/create.rb', line 15

def initialize(pipeline_config, metric)
  @pipeline_config = pipeline_config
  @metric = metric
end

Instance Method Details

#execute(agent, pipelines_registry) ⇒ Object

The execute assume that the thread safety access of the pipeline is managed by the caller.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/logstash/pipeline_action/create.rb', line 34

def execute(agent, pipelines_registry)
  new_pipeline =
    if @pipeline_config.settings.get_value("pipeline.java_execution")
      LogStash::JavaPipeline.new(@pipeline_config, @metric, agent)
    else
      agent.exclusive do
        # The Ruby pipeline initialization is not thread safe because of the module level
        # shared state in LogsStash::Config::AST. When using multiple pipelines this gets
        # executed simultaneously in different threads and we need to synchronize this initialization.
        LogStash::Pipeline.new(@pipeline_config, @metric, agent)
      end
    end

  success = pipelines_registry.create_pipeline(pipeline_id, new_pipeline) do
    new_pipeline.start # block until the pipeline is correctly started or crashed
  end

  LogStash::ConvergeResult::ActionResult.create(self, success)
end

#execution_priorityObject

Make sure we execution system pipeline like the monitoring before any user defined pipelines, system pipeline register hooks into the system that will be triggered by the user defined pipeline.



27
28
29
30
# File 'lib/logstash/pipeline_action/create.rb', line 27

def execution_priority
  default_priority = super
  @pipeline_config.system? ? default_priority * -1 : default_priority
end

#pipeline_idObject



20
21
22
# File 'lib/logstash/pipeline_action/create.rb', line 20

def pipeline_id
  @pipeline_config.pipeline_id
end

#to_sObject



54
55
56
# File 'lib/logstash/pipeline_action/create.rb', line 54

def to_s
  "PipelineAction::Create<#{pipeline_id}>"
end