Class: ScoutAgent::Assignment::Queue
- Inherits:
-
ScoutAgent::Assignment
- Object
- ScoutAgent::Assignment
- ScoutAgent::Assignment::Queue
- Defined in:
- lib/scout_agent/assignment/queue.rb
Constant Summary collapse
- ERRORS =
[ [ :missing_db, "Queue database could not be loaded." ], [ :missing_id, "You must pass a mission ID or delivery type." ], [ :invalid_id, "You must pass a mission ID or " + "'report', 'hint', 'alert', or 'error'." ], [ :missing_fields, "You must provide fields to queue." ], [ :invalid_fields, "You must pass valid JSON for the fields." ], [ :invalid_report_fields, "Field data must be a Hash to pass to the server." ], [ :missing_plugin_id_field, "A plugin_id field is required by the server." ], [ :invalid_plugin_id_field, "The plugin_id field must be a positive integer." ], [ :failed_to_queue_message, "Your message could not be queued at this time." ] ]
Instance Attribute Summary
Attributes inherited from ScoutAgent::Assignment
#group, #other_args, #switches, #user
Instance Method Summary collapse
Methods inherited from ScoutAgent::Assignment
#initialize, #prepare_and_execute
Methods included from Tracked
#clear_status, #force_status_database_reload, #status, #status_database, #status_log
Constructor Details
This class inherits a constructor from ScoutAgent::Assignment
Instance Method Details
#execute ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/scout_agent/assignment/queue.rb', line 30 def execute log = ScoutAgent.prepare_wire_tap(:queue, :skip_stdout) status_database(log) status("Queuing message", :queue) at_my_exit do clear_status(:queue) end unless db = Database.load(:queue, log) abort_with_error(:missing_db) end log.info("Validating message for queuing.") unless id = Array(other_args).shift abort_with_error(:missing_id) end unless id =~ /\A(?:report|hint|alert|error|\d*[1-9])\z/ abort_with_error(:invalid_id) end fields = ARGF.read unless ARGV.empty? and not $stdin.ready? if fields.nil? or fields.empty? abort_with_error(:missing_fields) end bytes = fields.size begin fields = JSON.parse(fields.to_s) rescue JSON::ParserError abort_with_error(:invalid_fields) end if %w[report hint alert error].include? id unless fields.is_a? Hash abort_with_error(:invalid_report_fields) end unless fields.include? "plugin_id" abort_with_error(:missing_plugin_id_field) end unless fields["plugin_id"].to_s =~ /\A\d*[1-9]\z/ abort_with_error(:invalid_plugin_id_field) end log.info("Message is a valid #{id} (#{bytes} bytes).") else log.info("Message is valid (#{bytes} bytes).") end log.info("Queuing message.") unless db.enqueue(id, fields) abort_with_error(:failed_to_queue_message) end db.maintain log.info("Messages queued successfully.") end |