Class: NewRelic::Security::Agent::Control::ScanScheduler
- Inherits:
-
Object
- Object
- NewRelic::Security::Agent::Control::ScanScheduler
- Defined in:
- lib/newrelic_security/agent/control/scan_scheduler.rb
Instance Method Summary collapse
- #cron_expression_task(schedule, duration) ⇒ Object
- #init_via_scan_scheduler ⇒ Object
- #shutdown_at_duration_reached(duration) ⇒ Object
- #start_agent_with_delay(delay) ⇒ Object
Instance Method Details
#cron_expression_task(schedule, duration) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/newrelic_security/agent/control/scan_scheduler.rb', line 59 def cron_expression_task(schedule, duration) @cron_parser = NewRelic::Security::ParseCron::CronParser.new(schedule) loop do next_run = @cron_parser.next(Time.now) NewRelic::Security::Agent.logger.info "Next init via cron exp: #{schedule}, is scheduled at : #{next_run}" delay = next_run - Time.now if NewRelic::Security::Agent.agent.iast_client&.iast_data_transfer_request_processor_thread&.alive? sleep delay > 2 ? delay - 2 : delay else start_agent_with_delay(delay) end return if duration <= 0 end end |
#init_via_scan_scheduler ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/newrelic_security/agent/control/scan_scheduler.rb', line 7 def init_via_scan_scheduler if NewRelic::Security::Agent.config[:'security.scan_schedule.delay'].positive? NewRelic::Security::Agent.logger.info "IAST delay is set to: #{NewRelic::Security::Agent.config[:'security.scan_schedule.delay']}, current time: #{Time.now}" start_agent_with_delay(NewRelic::Security::Agent.config[:'security.scan_schedule.delay']*60) elsif !NewRelic::Security::Agent.config[:'security.scan_schedule.schedule'].to_s.empty? cron_expression_task(NewRelic::Security::Agent.config[:'security.scan_schedule.schedule'], NewRelic::Security::Agent.config[:'security.scan_schedule.duration']*60) else NewRelic::Security::Agent.agent.init NewRelic::Security::Agent.agent.start_iast_client if NewRelic::Security::Agent::Utils.is_IAST? shutdown_at_duration_reached(NewRelic::Security::Agent.config[:'security.scan_schedule.duration']*60) end rescue StandardError => exception NewRelic::Security::Agent.logger.error "Exception in IAST scan scheduler: #{exception.inspect} #{exception.backtrace}" ::NewRelic::Agent.notice_error(exception) end |
#shutdown_at_duration_reached(duration) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/newrelic_security/agent/control/scan_scheduler.rb', line 36 def shutdown_at_duration_reached(duration) shutdown_at = Time.now.to_i + duration shut_down_time = (Time.now + duration).strftime("%a %d %b %Y %H:%M:%S") return if duration <= 0 NewRelic::Security::Agent.logger.info "IAST Duration is set to: #{duration/60} minutes, timestamp: #{shut_down_time} time, current time: #{Time.now}" @shutdown_monitor_thread = Thread.new do Thread.current.name = "newrelic_security_shutdown_monitor_thread" loop do sleep 1 next if Time.now.to_i < shutdown_at if NewRelic::Security::Agent.config[:'security.scan_schedule.always_sample_traces'] NewRelic::Security::Agent.logger.info "Shutdown IAST Data transfer request processor only as 'security.scan_schedule.always_sample_traces' is #{NewRelic::Security::Agent.config[:'security.scan_schedule.always_sample_traces']} now at current time: #{Time.now}" NewRelic::Security::Agent.agent.iast_client&.iast_data_transfer_request_processor_thread&.kill else NewRelic::Security::Agent.logger.info "Shutdown IAST agent now at current time: #{Time.now}" ::NewRelic::Agent.notice_error(StandardError.new("WS Connection closed by local")) NewRelic::Security::Agent.agent.shutdown_security_agent end break end end end |
#start_agent_with_delay(delay) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/newrelic_security/agent/control/scan_scheduler.rb', line 23 def start_agent_with_delay(delay) NewRelic::Security::Agent.logger.info "Security Agent delay scan time is set to: #{(delay/60).ceil} minutes when always_sample_traces is #{NewRelic::Security::Agent.config[:'security.scan_schedule.always_sample_traces']}, current time: #{Time.now}" if NewRelic::Security::Agent.config[:'security.scan_schedule.always_sample_traces'] NewRelic::Security::Agent.agent.init unless NewRelic::Security::Agent.config[:enabled] sleep delay if NewRelic::Security::Agent.config[:'security.scan_schedule.always_sample_traces'] else sleep delay NewRelic::Security::Agent.agent.init end NewRelic::Security::Agent.agent.start_iast_client if NewRelic::Security::Agent::Utils.is_IAST? shutdown_at_duration_reached(NewRelic::Security::Agent.config[:'security.scan_schedule.duration']*60) end |