in src/extension/src/__main__.py [0:0]
def main(argv):
stdout_file_mirror = None
file_logger = None
env_layer = EnvLayer()
logger = Logger()
telemetry_writer = TelemetryWriter(logger, env_layer)
logger.telemetry_writer = telemetry_writer # Need to set telemetry_writer within logger to enable sending all logs to telemetry
exit_code = None
try:
# initializing action handler
# args will have values install, uninstall, etc, as given in MsftLinuxPatchExtShim.sh in the operation var
cmd_exec_start_time = datetime.datetime.utcnow()
utility = Utility(logger)
runtime_context_handler = RuntimeContextHandler(logger)
json_file_handler = JsonFileHandler(logger)
ext_env_handler = ExtEnvHandler(logger, env_layer, json_file_handler)
env_health_manager = EnvHealthManager(env_layer)
if ext_env_handler.handler_environment_json is not None and ext_env_handler.config_folder is not None:
config_folder = ext_env_handler.config_folder
if config_folder is None or not os.path.exists(config_folder):
logger.log_error("Config folder not found at [{0}].".format(repr(config_folder)))
exit(Constants.ExitCode.ConfigurationError)
ext_config_settings_handler = ExtConfigSettingsHandler(logger, json_file_handler, config_folder)
core_state_handler = CoreStateHandler(config_folder, json_file_handler)
ext_state_handler = ExtStateHandler(config_folder, utility, json_file_handler)
ext_output_status_handler = ExtOutputStatusHandler(logger, utility, json_file_handler, ext_env_handler.status_folder)
process_handler = ProcessHandler(logger, env_layer, ext_output_status_handler)
action_handler = ActionHandler(logger, env_layer, telemetry_writer, utility, runtime_context_handler, json_file_handler, env_health_manager, ext_env_handler, ext_config_settings_handler, core_state_handler, ext_state_handler, ext_output_status_handler, process_handler, cmd_exec_start_time)
exit_code_from_handler_actions = action_handler.determine_operation(argv[1])
exit_code = Constants.ExitCode.Okay if exit_code_from_handler_actions is None else exit_code_from_handler_actions
else:
error_cause = "No configuration provided in HandlerEnvironment" if ext_env_handler.handler_environment_json is None else "Path to config folder not specified in HandlerEnvironment"
error_msg = "Error processing file. [File={0}] [Error={1}]".format(Constants.HANDLER_ENVIRONMENT_FILE, error_cause)
raise Exception(error_msg)
except Exception as error:
logger.log_error(repr(error))
exit_code = Constants.ExitCode.HandlerFailed
finally:
if stdout_file_mirror is not None:
stdout_file_mirror.stop()
if file_logger is not None:
file_logger.close()
exit(exit_code)