def setup_usage_logfile(session_id=None): """Sets up the usage logging default config and environment values.""" if not session_id: session_id = get_session_uuid() # default file path and name for usage logging filelogging_filename = FILE_LOG_FILENAME_TEMPLATE \ .format(PYREVIT_FILE_PREFIX, session_id, FILE_LOG_EXT) # default server url for usage logging usagelog_serverurl = '' # initialize env variables related to usage logging _init_usagelogging_envvars() # setup config section if does not exist if not user_config.has_section('usagelogging'): user_config.add_section('usagelogging') # GLOBAL SWITCH ------------------------------------------------------------ # setup default value for usage logging global switch ul_config = user_config.usagelogging usageloggingactive = ul_config.get_option('active', default_value=False) set_pyrevit_env_var(USAGELOG_STATE_ISC_KEYNAME, usageloggingactive) # FILE usage logging ------------------------------------------------------- # read or setup default values for file usage logging logfilepath = ul_config.get_option('logfilepath', default_value=PYREVIT_VERSION_APP_DIR) # check file usage logging config and setup destination if not logfilepath or is_blank(logfilepath): # if no config is provided, disable output _disable_file_usage_logging() else: # if config exists, create new usage log file under the same address if op.isdir(logfilepath): # if directory is valid logfile_fullpath = op.join(logfilepath, filelogging_filename) _setup_default_logfile(logfile_fullpath) else: # if not, show error and disable usage logging if usageloggingactive: logger.error('Provided usage log address does not exits or is ' 'not a directory. Usage logging disabled.') _disable_usage_logging() # SERVER usage logging ----------------------------------------------------- # read or setup default values for server usage logging logserverurl = ul_config.get_option('logserverurl', default_value=usagelog_serverurl) # check server usage logging config and setup destination if not logserverurl or is_blank(logserverurl): # if no config is provided, disable output _disable_server_usage_logging() else: # if config exists, setup server logging set_pyrevit_env_var(USAGELOG_SERVERURL_ISC_KEYNAME, logserverurl)
def get_status(): """Get server status""" return { "host": HOST_APP.pretty_name, "username": HOST_APP.username, "session_id": sessioninfo.get_session_uuid(), }
def start_reload(): logger = script.get_logger() results = script.get_results() # re-load pyrevit session. logger.info('Reloading....') sessionmgr.reload_pyrevit() results.newsession = sessioninfo.get_session_uuid()
def load_session(): """Handles loading/reloading of the pyRevit addin and extensions. To create a proper ui, pyRevit extensions needs to be properly parsed and a dll assembly needs to be created. This function handles these tasks through interactions with .extensions, .loader.asmmaker, and .loader.uimaker Example: >>> from pyrevit.loader.sessionmgr import load_session >>> load_session() # start loading a new pyRevit session Returns: None """ # setup runtime environment variables sessioninfo.setup_runtime_vars() # the loader dll addon, does not create an output window # if an output window is not provided, create one if EXEC_PARAMS.first_load: output_window = _setup_output() else: from pyrevit import script output_window = script.get_output() # initialize timer to measure load time timer = Timer() # perform pre-load tasks _perform_onsessionloadstart_ops() # create a new session _new_session() # perform post-load tasks _perform_onsessionloadcomplete_ops() # log load time and thumbs-up :) endtime = timer.get_time() success_emoji = ':OK_hand:' if endtime < 3.00 else ':thumbs_up:' mlogger.info('Load time: %s seconds %s', endtime, success_emoji) # if everything went well, self destruct try: timeout = user_config.startuplog_timeout if timeout > 0 and not logger.loggers_have_errors(): if EXEC_PARAMS.first_load: # output_window is of type ScriptConsole output_window.SelfDestructTimer(timeout) else: # output_window is of type PyRevitOutputWindow output_window.self_destruct(timeout) except Exception as imp_err: mlogger.error('Error setting up self_destruct on output window | %s', imp_err) _cleanup_output() return sessioninfo.get_session_uuid()
def setup_hooks(session_id=None): # make sure session id is availabe if not session_id: session_id = sessioninfo.get_session_uuid() hooks_handler = get_hooks_handler() if hooks_handler: # deactivate old hooks_handler.DeactivateEventHooks(uiApp=HOST_APP.uiapp) # setup new hooks_handler = EventHooks(session_id) set_hooks_handler(hooks_handler) unregister_all_hooks()
def setup_telemetry(session_id=None): """Sets up the telemetry default config and environment values.""" # make sure session id is availabe if not session_id: session_id = sessioninfo.get_session_uuid() # PYREVIT TELEMETRY ------------------------------------------------------- # utc timestamp telemetry_utc_timestamp = user_config.telemetry_utc_timestamp set_telemetry_utc_timestamp(telemetry_utc_timestamp) # global telemetry toggle telemetry_state = user_config.telemetry_status set_telemetry_state(telemetry_state) # read or setup default values for file telemetry # default file path and name for telemetry telemetry_file_dir = user_config.telemetry_file_dir set_telemetry_file_dir(telemetry_file_dir) # check file telemetry config and setup destination if not telemetry_file_dir or coreutils.is_blank(telemetry_file_dir): # if no config is provided, disable output disable_telemetry_to_file() # if config exists, create new telemetry file under the same address elif telemetry_state: if op.isdir(telemetry_file_dir): telemetry_file_name = \ FILE_LOG_FILENAME_TEMPLATE.format(PYREVIT_FILE_PREFIX, session_id, FILE_LOG_EXT) # if directory is valid telemetry_fullfilepath = \ op.join(telemetry_file_dir, telemetry_file_name) set_telemetry_file_path(telemetry_fullfilepath) # setup telemetry file or disable if failed try: _setup_default_logfile(telemetry_fullfilepath) except Exception as write_err: mlogger.error( 'Telemetry is active but log file location ' 'is not accessible. | %s', write_err) disable_telemetry_to_file() else: # if not, show error and disable telemetry mlogger.error('Provided telemetry address does not exits or is ' 'not a directory. Telemetry disabled.') disable_telemetry_to_file() # read or setup default values for server telemetry telemetry_server_url = user_config.telemetry_server_url # check server telemetry config and setup destination if not telemetry_server_url or coreutils.is_blank(telemetry_server_url): # if no config is provided, disable output disable_telemetry_to_server() else: # if config exists, setup server logging set_telemetry_server_url(telemetry_server_url) # set telemetry script types set_telemetry_include_hooks(user_config.telemetry_include_hooks) # APP TELEMETRY ------------------------------------------------------------ # setup default value for telemetry global switch apptelemetry_state = user_config.apptelemetry_status set_apptelemetry_state(apptelemetry_state) # read or setup default values for server telemetry apptelemetry_server_url = user_config.apptelemetry_server_url # check server telemetry config and setup destination if not apptelemetry_server_url \ or coreutils.is_blank(apptelemetry_server_url): # if no config is provided, disable output disable_apptelemetry_to_server() else: # if config exists, setup server logging set_apptelemetry_server_url(apptelemetry_server_url) # setup events new_telemetry_handler = EventTelemetry(session_id) telemetry_handler = get_apptelemetry_handler() if telemetry_handler: # clear existing telemetry_events.unregister_all_event_telemetries(telemetry_handler) set_apptelemetry_handler(new_telemetry_handler) # register handlers only if telemetry system is active if apptelemetry_state: apptelemetry_event_flags = get_apptelemetry_event_flags() # re-register events with new telemetry_handler telemetry_events.register_event_telemetry(new_telemetry_handler, apptelemetry_event_flags) user_config.save_changes()
from pyrevit import script from pyrevit import forms from pyrevit.loader import sessionmgr from pyrevit.loader import sessioninfo res = True if EXEC_PARAMS.executed_from_ui: res = forms.alert('Reloading increases the memory footprint and is ' 'automatically called by pyRevit when necessary.\n\n' 'pyRevit developers can manually reload when:\n' ' - New buttons are added.\n' ' - Buttons have been removed.\n' ' - Button icons have changed.\n' ' - Base C# code has changed.\n' ' - Value of pyRevit parameters\n' ' (e.g. __title__, __doc__, ...) have changed.\n' ' - Cached engines need to be cleared.\n\n' 'Are you sure you want to reload?', ok=False, yes=True, no=True) if res: logger = script.get_logger() results = script.get_results() # re-load pyrevit session. logger.info('Reloading....') sessionmgr.reload_pyrevit() results.newsession = sessioninfo.get_session_uuid()
def setup_usage_logfile(session_id=None): """Sets up the usage logging default config and environment values.""" if not session_id: session_id = get_session_uuid() # default file path and name for usage logging filelogging_filename = FILE_LOG_FILENAME_TEMPLATE \ .format(PYREVIT_FILE_PREFIX, session_id, FILE_LOG_EXT) # default server url for usage logging usagelog_serverurl = 'https://design-tech-analytics.herokuapp.com/analytics/' \ 'pyRevit?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' \ '.eyJhcHBsaWNhdGlvbiI6IldSSVRFX1dFV09SS1BZUkVWSVQiLCJpYXQiOjE1NDM1MTYxMzN9' \ '.9G-LxWLQYYWoOF3fBOl8Uf2p9pLjI5FNtBlYoXUemOE' # initialize env variables related to usage logging _init_usagelogging_envvars() # setup config section if does not exist if not user_config.has_section('usagelogging'): user_config.add_section('usagelogging') # GLOBAL SWITCH ------------------------------------------------------------ # setup default value for usage logging global switch ul_config = user_config.usagelogging usageloggingactive = ul_config.get_option('active', default_value=True) envvars.set_pyrevit_env_var(PYREVIT_USAGELOGSTATE_ENVVAR, usageloggingactive) # FILE usage logging ------------------------------------------------------- # read or setup default values for file usage logging logfilepath = ul_config.get_option('logfilepath', default_value=PYREVIT_VERSION_APP_DIR) # check file usage logging config and setup destination if not logfilepath or is_blank(logfilepath): # if no config is provided, disable output _disable_file_usage_logging() else: # if config exists, create new usage log file under the same address if usageloggingactive: if op.isdir(logfilepath): # if directory is valid logfile_fullpath = op.join(logfilepath, filelogging_filename) _setup_default_logfile(logfile_fullpath) else: # if not, show error and disable usage logging logger.error('Provided usage log address does not exits or is ' 'not a directory. Usage logging disabled.') _disable_usage_logging() # SERVER usage logging ----------------------------------------------------- # read or setup default values for server usage logging logserverurl = ul_config.get_option('logserverurl', default_value=usagelog_serverurl) # check server usage logging config and setup destination if not logserverurl or is_blank(logserverurl): # if no config is provided, disable output _disable_server_usage_logging() else: # if config exists, setup server logging envvars.set_pyrevit_env_var(PYREVIT_USAGELOGSERVER_ENVVAR, logserverurl)
"""Searches the script folders and create buttons for the new script or newly installed extensions.""" from scriptutils import logger from pyrevit.loader.sessionmgr import load_session from pyrevit.loader.sessioninfo import get_session_uuid from scriptutils import this_script # re-load pyrevit session. logger.info('Reloading....') load_session() this_script.results.newsession = get_session_uuid()