Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- 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 -*-
- # 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement