mns-common 1.3.9.2__tar.gz → 1.3.9.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mns-common might be problematic. Click here for more details.
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/PKG-INFO +1 -1
- mns_common-1.3.9.3/mns_common/component/exception/ExceptionMonitor.py +86 -0
- mns_common-1.3.9.3/mns_common/db/v2/__init__.py +7 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common.egg-info/PKG-INFO +1 -1
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common.egg-info/SOURCES.txt +2 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/setup.py +1 -1
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/README.md +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/akshare/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/akshare/k_line_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/akshare/stock_bid_ask_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/akshare/stock_dt_pool.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/akshare/stock_zb_pool.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/akshare/stock_zt_pool_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/akshare/yjyg_sync_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/concept/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/concept/em_concept_index_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/gd/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/gd/east_money_stock_gdfx_free_top_10_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_debt_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_etf_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_a_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_a_v2_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_hk_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_us_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/hk/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/hk/ths_hk_company_info_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/k_line/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/k_line/stock_k_line_data_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/k_line/stock_minute_data_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/common/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/common/kpl_common_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/common/kpl_common_field_constant.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/concept/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/concept/kpl_concept_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/constant/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/constant/kpl_constant.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/industry/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/industry/kpl_industry_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/selection/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/selection/kpl_selection_plate_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/symbol/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/msg/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/msg/push_msg_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/proxies/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/proxies/liu_guan_proxy_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/qmt/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/qmt/qmt_minunte_tick_data.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/big_deal/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/big_deal/ths_big_deal_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/company/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/company/ths_company_announce_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/company/ths_company_info_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/app/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/app/ths_concept_detail_app.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/app/ths_concept_index_app.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_common_js_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_company_info_web.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_concept_detail_web.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_concept_index_web.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/self_choose/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/self_choose/ths_self_choose_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/wen_cai/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/wen_cai/ths_wen_cai_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/zt/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/zt/ths_stock_zt_pool_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/us/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/us/ths_us_company_info_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/xueqiu/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/xueqiu/xue_qiu_k_line_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/cache/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/cache/cache_service.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/classify/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/classify/symbol_classify_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/classify/symbol_classify_param.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/common_service_fun_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/company/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/company/company_common_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/company/company_common_service_new_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/concept/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/concept/kpl_concept_common_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/concept/ths_concept_common_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/cookie/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/cookie/cookie_info_service.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/data/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/data/data_init_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/deal/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/deal/deal_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/deal/terminal_enum.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/em/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/em/em_real_time_quotes_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/em/em_stock_info_api.py +0 -0
- {mns_common-1.3.9.2/mns_common/component/hk → mns_common-1.3.9.3/mns_common/component/exception}/__init__.py +0 -0
- {mns_common-1.3.9.2/mns_common/component/price → mns_common-1.3.9.3/mns_common/component/hk}/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/hk/company_hk_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/industry/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/industry/ths_industry_index_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/clean/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/clean/k_line_param.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/clean/sh_small_normal_zt_k_line_check_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/common/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/common/k_line_common_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/patterns/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/patterns/k_line_patterns_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/patterns/pattern_Enum.py +0 -0
- {mns_common-1.3.9.2/mns_common/component/proxies → mns_common-1.3.9.3/mns_common/component/price}/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/price/trade_price_service_api.py +0 -0
- {mns_common-1.3.9.2/mns_common/component/qmt → mns_common-1.3.9.3/mns_common/component/proxies}/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/proxies/proxy_common_api.py +0 -0
- {mns_common-1.3.9.2/mns_common/component/redis_msg → mns_common-1.3.9.3/mns_common/component/qmt}/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/qmt/qmt_buy_service.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/real_time/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/real_time/real_time_common_service_api.py +0 -0
- {mns_common-1.3.9.2/mns_common/component/task → mns_common-1.3.9.3/mns_common/component/redis_msg}/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/redis_msg/redis_msg_publish_service.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/self_choose/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/self_choose/black_list_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/self_choose/self_choose_service_api.py +0 -0
- {mns_common-1.3.9.2/mns_common/component/tfp → mns_common-1.3.9.3/mns_common/component/task}/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/task/real_time_data_sync_check.py +0 -0
- {mns_common-1.3.9.2/mns_common/db/v2 → mns_common-1.3.9.3/mns_common/component/tfp}/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/tfp/stock_tfp_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/trade_date/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/trade_date/trade_date_common_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/zt/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/zt/zt_common_service_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/black_list_classify_enum.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/db_name_constant.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/east_money_stock_api.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/extra_income_db_name.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/price_enum.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/redis_msg_constant.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/constant/self_choose_constant.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/db/MongodbUtil.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/db/MongodbUtilLocal.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/db/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/db/v2/MongodbUtilV2.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/__init__.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/async_fun.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/cmd_util.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/data_frame_util.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/date_handle_util.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/db_util.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/file_util.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/utils/ip_util.py +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common.egg-info/dependency_links.txt +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common.egg-info/top_level.txt +0 -0
- {mns_common-1.3.9.2 → mns_common-1.3.9.3}/setup.cfg +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import threading
|
|
2
|
+
from functools import wraps
|
|
3
|
+
from typing import Optional, Callable
|
|
4
|
+
|
|
5
|
+
class ExceptionMonitor:
|
|
6
|
+
"""支持动态配置的异常监控器"""
|
|
7
|
+
def __init__(
|
|
8
|
+
self,
|
|
9
|
+
threshold: int = 1000,
|
|
10
|
+
alert_handler: Optional[Callable[[int, int], None]] = None,
|
|
11
|
+
auto_reset: bool = True
|
|
12
|
+
):
|
|
13
|
+
"""
|
|
14
|
+
:param threshold: 报警阈值,默认1000次
|
|
15
|
+
:param alert_handler: 自定义报警函数,格式 func(current_count, threshold)
|
|
16
|
+
:param auto_reset: 触发报警后是否自动重置计数器
|
|
17
|
+
"""
|
|
18
|
+
self.counter = 0
|
|
19
|
+
self._threshold = threshold
|
|
20
|
+
self.alert_handler = alert_handler
|
|
21
|
+
self.auto_reset = auto_reset
|
|
22
|
+
self.lock = threading.Lock()
|
|
23
|
+
|
|
24
|
+
@property
|
|
25
|
+
def threshold(self) -> int:
|
|
26
|
+
"""当前报警阈值"""
|
|
27
|
+
return self._threshold
|
|
28
|
+
|
|
29
|
+
@threshold.setter
|
|
30
|
+
def threshold(self, value: int):
|
|
31
|
+
"""动态设置报警阈值"""
|
|
32
|
+
with self.lock:
|
|
33
|
+
self._threshold = value
|
|
34
|
+
|
|
35
|
+
def increment(self):
|
|
36
|
+
"""线程安全的计数器递增"""
|
|
37
|
+
with self.lock:
|
|
38
|
+
self.counter += 1
|
|
39
|
+
if self.counter >= self.threshold:
|
|
40
|
+
self.trigger_alert()
|
|
41
|
+
if self.auto_reset:
|
|
42
|
+
self.reset_counter()
|
|
43
|
+
|
|
44
|
+
def reset_counter(self):
|
|
45
|
+
"""手动重置计数器"""
|
|
46
|
+
with self.lock:
|
|
47
|
+
self.counter = 0
|
|
48
|
+
|
|
49
|
+
def trigger_alert(self):
|
|
50
|
+
"""触发报警(支持自定义处理逻辑)"""
|
|
51
|
+
if self.alert_handler:
|
|
52
|
+
self.alert_handler(self.counter, self.threshold)
|
|
53
|
+
else:
|
|
54
|
+
print(f"[ALERT] Exception count {self.counter} exceeded threshold {self.threshold}")
|
|
55
|
+
|
|
56
|
+
def exception_counter(
|
|
57
|
+
threshold: int = 1000,
|
|
58
|
+
alert_handler: Optional[Callable[[int, int], None]] = None,
|
|
59
|
+
auto_reset: bool = True
|
|
60
|
+
):
|
|
61
|
+
"""
|
|
62
|
+
异常计数装饰器工厂
|
|
63
|
+
:param threshold: 报警阈值
|
|
64
|
+
:param alert_handler: 自定义报警处理函数
|
|
65
|
+
:param auto_reset: 是否自动重置计数器
|
|
66
|
+
"""
|
|
67
|
+
def decorator(func):
|
|
68
|
+
# 为每个被装饰函数创建独立监控实例
|
|
69
|
+
monitor = ExceptionMonitor(
|
|
70
|
+
threshold=threshold,
|
|
71
|
+
alert_handler=alert_handler,
|
|
72
|
+
auto_reset=auto_reset
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
@wraps(func)
|
|
76
|
+
def wrapper(*args, **kwargs):
|
|
77
|
+
try:
|
|
78
|
+
return func(*args, **kwargs)
|
|
79
|
+
except Exception as e:
|
|
80
|
+
monitor.increment()
|
|
81
|
+
raise # 保持原始异常栈
|
|
82
|
+
|
|
83
|
+
# 暴露监控器以便外部访问
|
|
84
|
+
wrapper.monitor = monitor
|
|
85
|
+
return wrapper
|
|
86
|
+
return decorator
|
|
@@ -101,6 +101,8 @@ mns_common/component/deal/terminal_enum.py
|
|
|
101
101
|
mns_common/component/em/__init__.py
|
|
102
102
|
mns_common/component/em/em_real_time_quotes_api.py
|
|
103
103
|
mns_common/component/em/em_stock_info_api.py
|
|
104
|
+
mns_common/component/exception/ExceptionMonitor.py
|
|
105
|
+
mns_common/component/exception/__init__.py
|
|
104
106
|
mns_common/component/hk/__init__.py
|
|
105
107
|
mns_common/component/hk/company_hk_service_api.py
|
|
106
108
|
mns_common/component/industry/__init__.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_debt_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_a_api.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_a_v2_api.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_hk_api.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/em/real_time/east_money_stock_us_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/common/kpl_common_field_constant.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/selection/kpl_selection_plate_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/company/ths_company_announce_api.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/company/ths_company_info_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/app/ths_concept_detail_app.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/app/ths_concept_index_app.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_common_js_api.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_company_info_web.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_concept_detail_web.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/concept/web/ths_concept_index_web.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/api/ths/self_choose/ths_self_choose_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/classify/symbol_classify_api.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/classify/symbol_classify_param.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/company/company_common_service_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/cookie/cookie_info_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/em/em_real_time_quotes_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/industry/ths_industry_index_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/k_line/patterns/pattern_Enum.py
RENAMED
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/price/trade_price_service_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/self_choose/black_list_service_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mns_common-1.3.9.2 → mns_common-1.3.9.3}/mns_common/component/task/real_time_data_sync_check.py
RENAMED
|
File without changes
|
{mns_common-1.3.9.2/mns_common/db/v2 → mns_common-1.3.9.3/mns_common/component/tfp}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|