Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.75 KB | None | 0 0
  1. # -*- coding: utf-8 -*- # pylint: disable=superfluous-parens,F823 import boto3 import requests import os import logging import sys sys.path.append("./dist") from redis import from_url, exceptions from rq import Queue, Worker, push_connection cloudwatch = boto3.client('cloudwatch') logger = logging.getLogger() logger.setLevel(logging.INFO) REDIS_HOSTS = { 'prod': { 'host': os.environ['PROD_HOST'], 'token': os.environ['PROD_TOKEN'], 'port': os.environ['PROD_PORT'], }, 'staging': { 'host': os.environ['STAGING_HOST'], 'token': os.environ['STAGING_TOKEN'], 'port': os.environ['STAGING_PORT'], }, } def put_metric(name, environment, count, metric_name, namespace='app/health/worker'): cloudwatch.put_metric_data( MetricData=[ { 'MetricName': metric_name, 'Dimensions': [ { 'Name': 'QueueName', 'Value': name }, { 'Name': 'Environment', 'Value': environment }, ], 'Unit': 'None', 'Value': count }, ], Namespace=namespace ) def check_workers(environment): redis_url = f"rediss://:{REDIS_HOSTS[environment]['token']}@{REDIS_HOSTS[environment]['host']}:{REDIS_HOSTS[environment]['port']}/0" redis_conn = from_url(redis_url) push_connection(redis_conn) active_queues = {} total_queues = {} try: for queue in Queue.all(): put_metric(environment=environment, name=queue.name, count=queue.count, metric_name='ApproximateNumberOfMessagesVisible') active_queues[queue.name] = 0 total_queues[queue.name] = queue.count for worker in Worker.all(): state=str(worker.get_state()) if (state == "busy"): job = worker.get_current_job() active_queues[job.origin] += 1 total_queues[job.origin] += 1 for queue in active_queues.keys(): put_metric(environment=environment, name=queue, count=active_queues[queue], metric_name='ApproximateNumberOfMessagesNotVisible') for queue in total_queues.keys(): put_metric(environment=environment, name=queue, count=total_queues[queue], metric_name='ApproximateNumberOfMessagesTotal') except exceptions.ConnectionError: logger.error(f"[{environment}] Could not make a connection to '{REDIS_HOSTS[environment]['host']}'") if __name__ == '__main__': for environment in REDIS_HOSTS: logger.info(f'Checking workers for {environment}') check_workers(environment=environment)# -*- coding: utf-8 -*-
  2. # pylint: disable=superfluous-parens,F823
  3. import boto3
  4. import requests
  5. import os
  6. import logging
  7. import sys
  8. sys.path.append("./dist")
  9. from redis import from_url, exceptions
  10. from rq import Queue, Worker, push_connection
  11.  
  12.  
  13. cloudwatch = boto3.client('cloudwatch')
  14. logger = logging.getLogger()
  15. logger.setLevel(logging.INFO)
  16.  
  17. REDIS_HOSTS = {
  18. 'prod': {
  19. 'host': os.environ['PROD_HOST'],
  20. 'token': os.environ['PROD_TOKEN'],
  21. 'port': os.environ['PROD_PORT'],
  22. },
  23. 'staging': {
  24. 'host': os.environ['STAGING_HOST'],
  25. 'token': os.environ['STAGING_TOKEN'],
  26. 'port': os.environ['STAGING_PORT'],
  27. },
  28. }
  29.  
  30.  
  31. def put_metric(name, environment, count, metric_name, namespace='app/health/worker'):
  32. cloudwatch.put_metric_data(
  33. MetricData=[
  34. {
  35. 'MetricName': metric_name,
  36. 'Dimensions': [
  37. {
  38. 'Name': 'QueueName',
  39. 'Value': name
  40. },
  41. {
  42. 'Name': 'Environment',
  43. 'Value': environment
  44. },
  45. ],
  46. 'Unit': 'None',
  47. 'Value': count
  48. },
  49. ],
  50. Namespace=namespace
  51. )
  52.  
  53.  
  54. def check_workers(environment):
  55. redis_url = f"rediss://:{REDIS_HOSTS[environment]['token']}@{REDIS_HOSTS[environment]['host']}:{REDIS_HOSTS[environment]['port']}/0"
  56. redis_conn = from_url(redis_url)
  57. push_connection(redis_conn)
  58.  
  59. active_queues = {}
  60. total_queues = {}
  61. try:
  62. for queue in Queue.all():
  63. put_metric(environment=environment, name=queue.name, count=queue.count, metric_name='ApproximateNumberOfMessagesVisible')
  64. active_queues[queue.name] = 0
  65. total_queues[queue.name] = queue.count
  66. for worker in Worker.all():
  67. state=str(worker.get_state())
  68. if (state == "busy"):
  69. job = worker.get_current_job()
  70. active_queues[job.origin] += 1
  71. total_queues[job.origin] += 1
  72. for queue in active_queues.keys():
  73. put_metric(environment=environment, name=queue, count=active_queues[queue], metric_name='ApproximateNumberOfMessagesNotVisible')
  74. for queue in total_queues.keys():
  75. put_metric(environment=environment, name=queue, count=total_queues[queue], metric_name='ApproximateNumberOfMessagesTotal')
  76. except exceptions.ConnectionError:
  77. logger.error(f"[{environment}] Could not make a connection to '{REDIS_HOSTS[environment]['host']}'")
  78.  
  79.  
  80. if __name__ == '__main__':
  81. for environment in REDIS_HOSTS:
  82. logger.info(f'Checking workers for {environment}')
  83. check_workers(environment=environment)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement