NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

__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