__init__.py (3385B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\monolithhoneycomb_events\__init__.py 2 from __future__ import absolute_import 3 from . import reserved 4 from . import event_sample_rates as rates 5 import monolithconfig 6 import monolithmetrics 7 import logging 8 import random 9 import sys 10 from monolithhoneycomb import new_client, SAFE_SAMPLE_RATE, CONFIG_GROUP 11 from globalConfig import MONOLITH_HONEYCOMB_EVENTS_ENABLED_CONFIG 12 _enabled = False 13 _server_honeycomb_client = None 14 logger = logging.getLogger(__name__) 15 GLOBAL_CONFIG = 'gc' 16 SESSION_CHANGE_IX_VALUE_NEW = 1 17 CLIENT_NAME = 'monolithhoneycomb_events' 18 19 def init(service_manager): 20 if service_manager is None: 21 logger.error('service_manager is required to initialize Honey Events') 22 return 23 if monolithconfig.on_server() or monolithconfig.on_proxy(): 24 monolithconfig.add_watch_group_callback(_start_module, CONFIG_GROUP) 25 if monolithconfig.on_client(): 26 service_manager.RegisterForNotifyEvent(sys.modules[__name__], 'OnSessionChanged') 27 monolithconfig.add_global_config_callback(global_config_updated) 28 29 30 def send(event_name, field_map = None): 31 global _enabled 32 if not _enabled: 33 return 34 if field_map is None: 35 field_map = {} 36 _send_honeycomb_event(event_name, field_map) 37 38 39 def _send_honeycomb_event(event_name, field_map): 40 global _server_honeycomb_client 41 if _server_honeycomb_client is None or not _enabled: 42 return 43 sample_rate = rates.get(event_name) 44 if _should_send(sample_rate): 45 try: 46 event = _create_event_with_fields(event_name, field_map) 47 event.sample_rate = sample_rate 48 event.send_presampled() 49 monolithmetrics.increment(reserved.EVENT_SENT_COUNT, tags=['{}:{}'.format(reserved.EVENT_FIELD_NAME, event_name)]) 50 except Exception: 51 logger.error('error relaying monolith honeycomb event') 52 53 else: 54 monolithmetrics.increment(reserved.EVENT_DISCARDED_COUNT, tags=['{}:{}'.format(reserved.EVENT_FIELD_NAME, event_name)]) 55 56 57 def global_config_updated(): 58 global _enabled 59 try: 60 _enabled = monolithconfig.enabled(MONOLITH_HONEYCOMB_EVENTS_ENABLED_CONFIG, GLOBAL_CONFIG) 61 if _enabled and _server_honeycomb_client is None: 62 _start_module() 63 except Exception as _: 64 pass 65 66 67 def _handle_client_session(isRemote, sess, change): 68 if 'address' in change and change['address'] is not None: 69 _start_module() 70 71 72 def _start_module(*args, **kwargs): 73 if _server_honeycomb_client is None: 74 _create_client() 75 global_config_updated() 76 77 78 def _create_event_with_fields(event_name, field_map = None): 79 event = _server_honeycomb_client.new_event() 80 _add_fields(event, event_name, field_map) 81 return event 82 83 84 def _add_fields(event, event_name, field_dict_map = None): 85 event.add_field(reserved.EVENT_FIELD_NAME, event_name) 86 if field_dict_map is None: 87 return 88 event.add(field_dict_map) 89 90 91 def _create_client(): 92 global _server_honeycomb_client 93 _server_honeycomb_client = new_client(CLIENT_NAME, SAFE_SAMPLE_RATE) 94 95 96 def _reset(): 97 global _server_honeycomb_client 98 global _enabled 99 _enabled = False 100 _server_honeycomb_client = None 101 102 103 def _should_send(sample_rate): 104 return random.randint(1, sample_rate) == 1 105 106 107 OnSessionChanged = _handle_client_session