def test_produce_registry_events_from_blockchain(self, mock_get_current_block_no, mock_last_block_number, mock_get_contract_instance): registry_event_producer = RegistryEventProducer(infura_endpoint, Repository(NETWORKS)) org_created_event_object = Mock() event_repository = EventRepository(Repository(NETWORKS)) org_created_event_object.createFilter = Mock( return_value=Mock(get_all_entries=Mock(return_value=[AttributeDict({'args': AttributeDict({ 'orgId': b'snet\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}), 'event': 'OrganizationCreated', 'logIndex': 1, 'transactionIndex': 15, 'transactionHash': HexBytes( '0x7934a42442792f6d5a171df218b66161021c885085187719c991ec58d7459821'), 'address': '0x663422c6999Ff94933DBCb388623952CF2407F6f', 'blockHash': HexBytes('0x1da77d63b7d57e0a667ffb9f6d23be92f3ffb5f4b27b39b86c5d75bb167d6779'), 'blockNumber': 6243627})]))) mock_get_contract_instance.return_value = Mock( events=Mock(organizationCreated=org_created_event_object, abi=[{"type": "event", "name": "organizationCreated"}])) mock_last_block_number.return_value = 50 mock_get_current_block_no.return_value = 50 blockchain_events = registry_event_producer.produce_event(3) assert blockchain_events == [AttributeDict({'args': AttributeDict({ 'orgId': b'snet\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'}), 'event': 'OrganizationCreated', 'logIndex': 1, 'transactionIndex': 15, 'transactionHash': HexBytes( '0x7934a42442792f6d5a171df218b66161021c885085187719c991ec58d7459821'), 'address': '0x663422c6999Ff94933DBCb388623952CF2407F6f', 'blockHash': HexBytes( '0x1da77d63b7d57e0a667ffb9f6d23be92f3ffb5f4b27b39b86c5d75bb167d6779'), 'blockNumber': 6243627})]
def test_produce_mpe_events_from_blockchain(self, mock_get_current_block_no, mock_last_block_number, mock_get_contract_instance): mpe_event_producer = MPEEventProducer(infura_endpoint, Repository(NETWORKS)) event_repository = EventRepository(Repository(NETWORKS)) deposit_fund_Event_object = Mock() deposit_fund_Event_object.createFilter = Mock( return_value=Mock(get_all_entries=Mock(return_value=[AttributeDict( {'args': AttributeDict({'sender': '0xabd2cCb3828b4428bBde6C2031A865b0fb272a5A', 'amount': 30000000}), 'event': 'DepositFunds', 'logIndex': 1, 'transactionIndex': 18, 'transactionHash': HexBytes('0x562cc2fa59d9c7a4aa56106a19ad9c8078a95ae68416619fc191d86c50c91f12'), 'address': '0x8FB1dC8df86b388C7e00689d1eCb533A160B4D0C', 'blockHash': HexBytes('0xe06042a4d471351c0ee9e50056bd4fb6a0e158b2489ba70775d3c06bd29da19b'), 'blockNumber': 6286405})]))) mock_last_block_number.return_value = 50 mock_get_current_block_no.return_value = 50 # Testing contract events mock_get_contract_instance.return_value = Mock( events=Mock(DepositFunds=deposit_fund_Event_object, abi=[{"type": "event", "name": "DepositFunds"}])) blockchain_events = mpe_event_producer.produce_event(3) assert blockchain_events == [AttributeDict( {'args': AttributeDict({'sender': '0xabd2cCb3828b4428bBde6C2031A865b0fb272a5A', 'amount': 30000000}), 'event': 'DepositFunds', 'logIndex': 1, 'transactionIndex': 18, 'transactionHash': HexBytes('0x562cc2fa59d9c7a4aa56106a19ad9c8078a95ae68416619fc191d86c50c91f12'), 'address': '0x8FB1dC8df86b388C7e00689d1eCb533A160B4D0C', 'blockHash': HexBytes('0xe06042a4d471351c0ee9e50056bd4fb6a0e158b2489ba70775d3c06bd29da19b'), 'blockNumber': 6286405})] # Testing Airdrop events airdrop_event_producer = AirdropEventProducer(infura_endpoint, Repository(NETWORKS)) blockchain_events = airdrop_event_producer.produce_event(3) assert blockchain_events == [AttributeDict( {'args': AttributeDict({'sender': '0xabd2cCb3828b4428bBde6C2031A865b0fb272a5A', 'amount': 30000000}), 'event': 'DepositFunds', 'logIndex': 1, 'transactionIndex': 18, 'transactionHash': HexBytes('0x562cc2fa59d9c7a4aa56106a19ad9c8078a95ae68416619fc191d86c50c91f12'), 'address': '0x8FB1dC8df86b388C7e00689d1eCb533A160B4D0C', 'blockHash': HexBytes('0xe06042a4d471351c0ee9e50056bd4fb6a0e158b2489ba70775d3c06bd29da19b'), 'blockNumber': 6286405})] # Testing Occam Airdrop events occam_airdrop_event_producer = OccamAirdropEventProducer(infura_endpoint, Repository(NETWORKS)) blockchain_events = occam_airdrop_event_producer.produce_event(3) assert blockchain_events == [AttributeDict( {'args': AttributeDict({'sender': '0xabd2cCb3828b4428bBde6C2031A865b0fb272a5A', 'amount': 30000000}), 'event': 'DepositFunds', 'logIndex': 1, 'transactionIndex': 18, 'transactionHash': HexBytes('0x562cc2fa59d9c7a4aa56106a19ad9c8078a95ae68416619fc191d86c50c91f12'), 'address': '0x8FB1dC8df86b388C7e00689d1eCb533A160B4D0C', 'blockHash': HexBytes('0xe06042a4d471351c0ee9e50056bd4fb6a0e158b2489ba70775d3c06bd29da19b'), 'blockNumber': 6286405})]
class EventListener(object): _connection = Repository(NETWORKS=NETWORKS) _event_repository = EventRepository(_connection) def __init__(self, repository=None): self.event_consumer_map = EventListener.initiate_event_subscription() def subscribe(self, event_names, event_consumer): for event in event_names: if event.get_name() in self.event_consumer_map: self.event_consumer_map[event] = event_consumer else: self.event_consumer_map[event] = [event_consumer] self.persist_event_subscription(event_names, event_consumer) @classmethod def initiate_event_subscription(cls): return EVENT_SUBSCRIPTIONS def _tranform_event_to_push(self, event): event['row_created'] = str(event['row_created']) event['row_updated'] = str(event['row_updated']) event['processed'] = 0 push_event = {"data": event, "name": event["event"]} return push_event def _get_listener_handler(self, listener): if listener["type"] == "webhook": return WebHookHandler(listener["url"]) elif listener["type"] == "lambda_arn": return LambdaArnHandler(listener["url"]) def _publish_events(self, events): error_map = {} success_list = [] for event in events: listeners = [] if event['event'] in self.event_consumer_map: listeners = self.event_consumer_map[event['event']] for listener in listeners: push_event = self._tranform_event_to_push(event) logger.debug(f"pushing events {push_event} to listener {listener['url']}") try: listener_handler = self._get_listener_handler(listener) listener_handler.push_event(push_event) except Exception as e: logger.exception( f"Error while processing event with error {str(e)} for event {event} listener {listener['url']}") error_map[event["row_id"]] = {"error_code": 500, "error_message": f"for listener {listener['url']} got error {str(e)}"} success_list.append(event["row_id"]) return error_map, success_list
import sys sys.path.append('/opt') from common.exception_handler import exception_handler from common.logger import get_logger from common.utils import handle_exception_with_slack_notification from event_pubsub.config import NETWORKS, NETWORK_ID, SLACK_HOOK from event_pubsub.producers.blockchain_event_producer import MPEEventProducer, RFAIEventProducer, RegistryEventProducer, \ TokenStakeEventProducer, AirdropEventProducer, OccamAirdropEventProducer, ConverterAGIXEventProducer, \ ConverterNTXEventProducer from event_pubsub.repository import Repository registry_event_producer = RegistryEventProducer(NETWORKS["http_provider"], Repository(NETWORKS)) mpe_event_producer = MPEEventProducer(NETWORKS["http_provider"], Repository(NETWORKS)) rfai_event_producer = RFAIEventProducer(NETWORKS["http_provider"], Repository(NETWORKS)) token_stake_event_producer = TokenStakeEventProducer(NETWORKS["http_provider"], Repository(NETWORKS)) airdrop_event_producer = AirdropEventProducer(NETWORKS["http_provider"], Repository(NETWORKS)) occam_airdrop_event_producer = OccamAirdropEventProducer( NETWORKS["http_provider"], Repository(NETWORKS)) converter_agix_event_producer = ConverterAGIXEventProducer( NETWORKS["http_provider"], Repository(NETWORKS)) converter_ntx_event_producer = ConverterNTXEventProducer( NETWORKS["http_provider"], Repository(NETWORKS)) logger = get_logger(__name__)
from common.logger import get_logger from common.utils import handle_exception_with_slack_notification from common.exception_handler import exception_handler from event_pubsub.config import NETWORKS, NETWORK_ID, SLACK_HOOK, WS_PROVIDER from event_pubsub.producers.blockchain_event_producer import MPEEventProducer, RFAIEventProducer, RegistryEventProducer, \ TokenStakeEventProducer from event_pubsub.repository import Repository registry_event_producer = RegistryEventProducer(WS_PROVIDER, Repository(NETWORKS)) mpe_event_producer = MPEEventProducer(WS_PROVIDER, Repository(NETWORKS)) rfai_event_producer = RFAIEventProducer(WS_PROVIDER, Repository(NETWORKS)) token_stake_event_producer = TokenStakeEventProducer(WS_PROVIDER, Repository(NETWORKS)) logger = get_logger(__name__) @handle_exception_with_slack_notification(SLACK_HOOK=SLACK_HOOK, NETWORK_ID=NETWORK_ID, logger=logger) def registry_event_producer_handler(event, context): try: registry_event_producer.produce_event(NETWORK_ID) except Exception as e: raise e def mpe_event_producer_handler(event, context): try: