3
\$\begingroup\$

We are using a message broker called rabbitmq. The code checks the status of number of messages in q queue and sent messages. This is achieved by a curl request to a given API.The script has a sleep of 5 seconds. I want to beutify and optimize this code for memory. I am getting offences too many lines. Since there is an infinite loop Want to make sure code does not leak memory.

 require 'net/http'
 require 'uri'
 require 'json'
 require 'slack-notifier'
 require 'sevak_publisher'

  CONFIG = YAML.load_file(File.join(__dir__, 'rabbitmq_config.yml'))
  def monitor_rabbitmq
      rabbitmqctl_url = CONFIG['rabbitmqctl']['url']
      rabbitmqctl_user = CONFIG['rabbitmqctl']['username']
      rabbitmqctl_password = CONFIG['rabbitmqctl']['password']
      uri = URI.parse("#{rabbitmqctl_url}/api/queues")
      request = Net::HTTP::Get.new(uri)
      request.basic_auth(rabbitmqctl_user, rabbitmqctl_password)
      req_options = { use_ssl: uri.scheme == 'https' }
      response = Net::HTTP.start(uri.hostname, uri.port, req_options)  do |http|
           http.request(request)
     end
    queue_details = JSON.parse(response.body)
    queue_details.each do |queue|
          output = { name: queue['name'],
           messages: {
             total: queue['messages'],
             ready: queue['messages_ready'],
             Unacknowlged: queue['messages_unacknowledged']
           },
           node: queue['node'],
           state: queue['state'],
           consumers: queue['consumers'] }
         puts output
         if output[:messages][:ready] > 1
              sent_alert_slack("RabbitMQ QUEUE High! \n #{output[:messages][:ready]} :\n #{output}")
              sent_sms(message)
         end
      end
   end
   def sent_alert_slack(message)
      notifier = Slack::Notifier.new CONFIG['slack_settings']    ['notification_api'],
                             channel: '#rabbitmq-monitoring',
                             username: 'notifier'
      notifier.ping message
    end

    def sent_sms(message)
        SevakPublisher.configure do |f|
          f.host = CONFIG['bunny']['host']
          f.port = CONFIG['bunny']['port']
          f.username = CONFIG['bunny']['username']
          f.password = CONFIG['bunny']['password']
          f.queues = ['sms_default']
        end
        publisher = SevakPublisher::Publisher.new
        CONFIG['sms_alert_receivers'].each do |msisdn|
           publisher.publish('sms_default', msisdn: msisdn, message:     message)
        end
    end
   loop do
      begin
      puts "\n", Time.now
      monitor_rabbitmq
   rescue => e
     puts "Error: #{e.message}"
     end
    sleep(300)
    end
\$\endgroup\$
2
  • \$\begingroup\$ "I am getting offences too many lines." From who? \$\endgroup\$ Commented Feb 27, 2017 at 19:42
  • \$\begingroup\$ Rubocop validation \$\endgroup\$ Commented Feb 28, 2017 at 2:50

0

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.