glideinFrontendInterface.frontendConfig.advertise_use_multi = (elementDescript.frontend_data['AdvertiseWithMultiple'] in ('True', '1')) try: dir = os.path.dirname(os.path.dirname(sys.argv[0])) glideinFrontendInterface.frontendConfig.glideinwms_version = glideinWMSVersion.GlideinWMSDistro(dir, os.path.join(dir, 'etc/checksum.frontend')).version() except: tb = traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]) logSupport.log.warning("Exception occured while trying to retrieve the glideinwms version. See debug log for more details.") logSupport.log.debug("Exception occurred: %s" % tb) if len(elementDescript.merged_data['Proxies']) > 0: if not glideinFrontendPlugins.proxy_plugins.has_key(elementDescript.merged_data['ProxySelectionPlugin']): logSupport.log.warning("Invalid ProxySelectionPlugin '%s', supported plugins are %s" % (elementDescript.merged_data['ProxySelectionPlugin']), glideinFrontendPlugins.proxy_plugins.keys()) return 1 x509_proxy_plugin = glideinFrontendPlugins.proxy_plugins[elementDescript.merged_data['ProxySelectionPlugin']](os.path.join(work_dir, "group_%s" % group_name), glideinFrontendPlugins.createCredentialList(elementDescript)) else: # no proxies, will try to use the factory one x509_proxy_plugin = None # set the condor configuration and GSI setup globally, so I don't need to worry about it later on os.environ['CONDOR_CONFIG'] = elementDescript.frontend_data['CondorConfig'] os.environ['_CONDOR_CERTIFICATE_MAPFILE'] = elementDescript.element_data['MapFile'] os.environ['X509_USER_PROXY'] = elementDescript.frontend_data['ClassAdProxy'] # create lock file pid_obj = glideinFrontendPidLib.ElementPidSupport(work_dir, group_name) pid_obj.register(parent_pid) try: try:
def main(parent_pid, work_dir, group_name): startup_time = time.time() elementDescript = glideinFrontendConfig.ElementMergedDescript(work_dir, group_name) # the log dir is shared between the frontend main and the groups, so use a subdir logSupport.log_dir = os.path.join(elementDescript.frontend_data['LogDir'], "group_%s" % group_name) # Configure frontend group process logging process_logs = eval(elementDescript.frontend_data['ProcessLogs']) for plog in process_logs: logSupport.add_processlog_handler(group_name, logSupport.log_dir, plog['msg_types'], plog['extension'], int(float(plog['max_days'])), int(float(plog['min_days'])), int(float(plog['max_mbytes']))) logSupport.log = logging.getLogger(group_name) logSupport.log.info("Logging initialized") logSupport.log.debug("Frontend Element startup time: %s" % str(startup_time)) paramsDescript = glideinFrontendConfig.ParamsDescript(work_dir, group_name) attrsDescript = glideinFrontendConfig.AttrsDescript(work_dir,group_name) signatureDescript = glideinFrontendConfig.GroupSignatureDescript(work_dir, group_name) # # We decided we will not use the data from the stage area # Leaving it commented in the code, in case we decide in the future # it was a good validation of the Web server health # #stageArea=glideinFrontendConfig.MergeStageFiles(elementDescript.frontend_data['WebURL'], # signatureDescript.signature_type, # signatureDescript.frontend_descript_fname,signatureDescript.frontend_descript_signature, # group_name, # signatureDescript.group_descript_fname,signatureDescript.group_descript_signature) # constsDescript=stageArea.get_constants() # attr_dict=attrsDescript.data glideinFrontendMonitoring.monitoringConfig.monitor_dir = os.path.join(work_dir, "monitor/group_%s" % group_name) glideinFrontendInterface.frontendConfig.advertise_use_tcp = (elementDescript.frontend_data['AdvertiseWithTCP'] in ('True', '1')) glideinFrontendInterface.frontendConfig.advertise_use_multi = (elementDescript.frontend_data['AdvertiseWithMultiple'] in ('True', '1')) try: dir = os.path.dirname(os.path.dirname(sys.argv[0])) glideinFrontendInterface.frontendConfig.glideinwms_version = glideinWMSVersion.GlideinWMSDistro(dir, os.path.join(dir, 'etc/checksum.frontend')).version() except: logSupport.log.exception("Exception occurred while trying to retrieve the glideinwms version: ") if len(elementDescript.merged_data['Proxies']) > 0: if not glideinFrontendPlugins.proxy_plugins.has_key(elementDescript.merged_data['ProxySelectionPlugin']): logSupport.log.warning("Invalid ProxySelectionPlugin '%s', supported plugins are %s" % (elementDescript.merged_data['ProxySelectionPlugin']), glideinFrontendPlugins.proxy_plugins.keys()) return 1 x509_proxy_plugin = glideinFrontendPlugins.proxy_plugins[elementDescript.merged_data['ProxySelectionPlugin']](os.path.join(work_dir, "group_%s" % group_name), glideinFrontendPlugins.createCredentialList(elementDescript)) else: # no proxies, will try to use the factory one x509_proxy_plugin = None # set the condor configuration and GSI setup globally, so I don't need to worry about it later on os.environ['CONDOR_CONFIG'] = elementDescript.frontend_data['CondorConfig'] os.environ['_CONDOR_CERTIFICATE_MAPFILE'] = elementDescript.element_data['MapFile'] os.environ['X509_USER_PROXY'] = elementDescript.frontend_data['ClassAdProxy'] # create lock file pid_obj = glideinFrontendPidLib.ElementPidSupport(work_dir, group_name) pid_obj.register(parent_pid) try: try: logSupport.log.info("Starting up") iterate(parent_pid, elementDescript, paramsDescript, attr_dict, signatureDescript, x509_proxy_plugin) except KeyboardInterrupt: logSupport.log.info("Received signal...exit") except: logSupport.log.exception("Unhandled exception, dying: ") finally: pid_obj.relinquish()