File indexing completed on 2026-06-26 08:40:24
0001 """Global template context for lightweight monitor state."""
0002
0003 from .system_status import status_summary
0004
0005
0006 def _active_nav(request):
0007 match = getattr(request, 'resolver_match', None)
0008 namespace = getattr(match, 'namespace', '') or ''
0009 url_name = getattr(match, 'url_name', '') or ''
0010 kwargs = getattr(match, 'kwargs', {}) or {}
0011 tag_type = kwargs.get('tag_type')
0012
0013 pcs_questionnaire_names = {
0014 'questionnaires_list',
0015 'questionnaire_import',
0016 'questionnaire_detail',
0017 'questionnaire_match_add',
0018 'questionnaire_match_remove',
0019 }
0020 pcs_catalog_names = {
0021 'pcs_catalog',
0022 'pcs_catalog_csv_update',
0023 'pcs_catalog_past_update',
0024 'pcs_catalog_rucio_update',
0025 'pcs_catalog_evgen_update',
0026 'pcs_catalog_set_current',
0027 'pcs_catalog_set_last',
0028 }
0029 pcs_tag_names = {
0030 'physics_categories_list',
0031 'physics_category_create',
0032 'tag_compose',
0033 'param_defs_api',
0034 'tags_list',
0035 'tags_datatable_ajax',
0036 'tag_detail',
0037 'tag_edit',
0038 'tag_delete',
0039 'tag_lock',
0040 'tag_datasets',
0041 }
0042 pcs_dataset_names = {
0043 'datasets_compose',
0044 'datasets_list',
0045 'datasets_datatable_ajax',
0046 'dataset_create',
0047 'dataset_detail',
0048 'dataset_add_block',
0049 'compose_dataset_detail',
0050 'rucio_did_detail',
0051 'rucio_did_files',
0052 }
0053 pcs_config_names = {
0054 'prod_configs_compose',
0055 'prod_configs_list',
0056 'prod_configs_datatable_ajax',
0057 'prod_config_create',
0058 'prod_config_detail',
0059 'prod_config_edit',
0060 }
0061 pcs_task_names = {
0062 'prod_task_compose',
0063 'prod_tasks_list',
0064 'prod_tasks_datatable_ajax',
0065 'prod_task_detail',
0066 'prod_task_delete',
0067 'prod_task_generate_commands',
0068 'compose_task_detail',
0069 }
0070 pcs_names = (
0071 {'pcs_hub'}
0072 | pcs_tag_names
0073 | pcs_dataset_names
0074 | pcs_config_names
0075 | pcs_task_names
0076 )
0077
0078 workflow_names = {
0079 'workflows_home',
0080 'workflow_definitions_list',
0081 'workflow_definitions_datatable_ajax',
0082 'workflow_definitions_filter_counts',
0083 'workflow_definition_detail',
0084 'workflow_executions_list',
0085 'workflow_executions_datatable_ajax',
0086 'workflow_executions_filter_counts',
0087 'workflow_execution_detail',
0088 'namespaces_list',
0089 'namespaces_datatable_ajax',
0090 'namespace_detail',
0091 }
0092 file_names = {
0093 'stf_files_list',
0094 'stf_files_datatable_ajax',
0095 'stf_file_detail',
0096 'fastmon_files_list',
0097 'fastmon_files_datatable_ajax',
0098 'tf_slices_list',
0099 'tf_slices_datatable_ajax',
0100 }
0101 log_names = {
0102 'log_summary',
0103 'log_summary_datatable_ajax',
0104 'log_list',
0105 'logs_datatable_ajax',
0106 'log_filter_counts',
0107 'log_detail',
0108 }
0109 database_names = {
0110 'database_tables_list',
0111 'database_tables_datatable_ajax',
0112 'database_table_list',
0113 'database_table_datatable_ajax',
0114 }
0115 panda_rucio_names = {
0116 'panda_hub',
0117 'panda_activity',
0118 'panda_jobs_list',
0119 'panda_jobs_datatable_ajax',
0120 'panda_jobs_filter_counts',
0121 'panda_job_detail',
0122 'panda_payload_log',
0123 'epicprod_job_detail',
0124 'epicprod_job_refresh',
0125 'panda_view_text',
0126 'panda_tasks_list',
0127 'panda_tasks_datatable_ajax',
0128 'panda_tasks_filter_counts',
0129 'panda_task_detail',
0130 'panda_errors_list',
0131 'panda_errors_datatable_ajax',
0132 'panda_diagnostics_list',
0133 'panda_diagnostics_datatable_ajax',
0134 'epic_queues_list',
0135 'epic_queue_detail',
0136 'panda_queues_list',
0137 'panda_queue_detail',
0138 'panda_database_tables_list',
0139 'panda_database_table_list',
0140 'idds_database_tables_list',
0141 'idds_database_table_list',
0142 'rucio_endpoints_list',
0143 'rucio_endpoint_detail',
0144 }
0145 panda_database_names = {
0146 'panda_database_tables_list',
0147 'panda_database_tables_datatable_ajax',
0148 'panda_database_table_list',
0149 'panda_database_table_datatable_ajax',
0150 }
0151 idds_database_names = {
0152 'idds_database_tables_list',
0153 'idds_database_tables_datatable_ajax',
0154 'idds_database_table_list',
0155 'idds_database_table_datatable_ajax',
0156 }
0157 rucio_endpoint_names = {
0158 'rucio_endpoints_list',
0159 'rucio_endpoints_datatable_ajax',
0160 'rucio_endpoint_detail',
0161 }
0162 alarm_names = {
0163 'alarms_dashboard',
0164 'alarm_event_detail',
0165 'alarm_config_edit',
0166 'alarm_config_save',
0167 'alarm_config_version',
0168 'alarm_test',
0169 'alarm_run_report',
0170 'alarm_task_history',
0171 'team_create',
0172 'team_new',
0173 'team_edit',
0174 'team_save',
0175 'team_version',
0176 }
0177
0178 return {
0179 'requests': namespace == 'pcs' and url_name in pcs_questionnaire_names,
0180 'pcs': namespace == 'pcs' and url_name in pcs_names,
0181 'pcs_hub': namespace == 'pcs' and url_name == 'pcs_hub',
0182 'pcs_categories': namespace == 'pcs' and url_name in {
0183 'physics_categories_list',
0184 'physics_category_create',
0185 },
0186 'pcs_tags': namespace == 'pcs' and url_name in pcs_tag_names,
0187 'pcs_physics_tags': namespace == 'pcs' and url_name in pcs_tag_names and tag_type == 'p',
0188 'pcs_evgen_tags': namespace == 'pcs' and url_name in pcs_tag_names and tag_type == 'e',
0189 'pcs_simu_tags': namespace == 'pcs' and url_name in pcs_tag_names and tag_type == 's',
0190 'pcs_reco_tags': namespace == 'pcs' and url_name in pcs_tag_names and tag_type == 'r',
0191 'pcs_background_tags': namespace == 'pcs' and url_name in pcs_tag_names and tag_type == 'k',
0192 'pcs_datasets': namespace == 'pcs' and url_name in pcs_dataset_names,
0193 'pcs_configs': namespace == 'pcs' and url_name in pcs_config_names,
0194 'pcs_tasks': namespace == 'pcs' and url_name in pcs_task_names,
0195 'campaigns': namespace == 'pcs' and url_name in pcs_catalog_names,
0196 'workflows': namespace == 'monitor_app' and url_name in workflow_names,
0197 'files': namespace == 'monitor_app' and url_name in file_names,
0198 'agents': namespace == 'monitor_app' and url_name in {
0199 'workflow_agents_list',
0200 'workflow_agents_datatable_ajax',
0201 'agent_detail',
0202 },
0203 'subscribers': namespace == 'monitor_app' and url_name in {
0204 'subscribers_list',
0205 'subscribers_datatable_ajax',
0206 'subscribers_filter_counts',
0207 'subscriber_detail',
0208 },
0209 'messages': namespace == 'monitor_app' and url_name in {
0210 'workflow_messages',
0211 'workflow_messages_datatable_ajax',
0212 'workflow_messages_filter_counts',
0213 'message_detail',
0214 },
0215 'logs': namespace == 'monitor_app' and url_name in log_names,
0216 'database': namespace == 'monitor_app' and url_name in database_names,
0217 'state': namespace == 'monitor_app' and url_name == 'persistent_state',
0218 'panda_rucio': namespace == 'monitor_app' and url_name in panda_rucio_names,
0219 'panda_hub': namespace == 'monitor_app' and url_name == 'panda_hub',
0220 'panda_activity': namespace == 'monitor_app' and url_name == 'panda_activity',
0221 'panda_tasks': namespace == 'monitor_app' and url_name in {
0222 'panda_tasks_list',
0223 'panda_tasks_datatable_ajax',
0224 'panda_tasks_filter_counts',
0225 'panda_task_detail',
0226 },
0227 'panda_jobs': namespace == 'monitor_app' and url_name in {
0228 'panda_jobs_list',
0229 'panda_jobs_datatable_ajax',
0230 'panda_jobs_filter_counts',
0231 'panda_job_detail',
0232 'panda_payload_log',
0233 'epicprod_job_detail',
0234 'epicprod_job_refresh',
0235 },
0236 'panda_errors': namespace == 'monitor_app' and url_name in {
0237 'panda_errors_list',
0238 'panda_errors_datatable_ajax',
0239 },
0240 'panda_diagnostics': namespace == 'monitor_app' and url_name in {
0241 'panda_diagnostics_list',
0242 'panda_diagnostics_datatable_ajax',
0243 },
0244 'panda_queues': namespace == 'monitor_app' and url_name in {
0245 'epic_queues_list',
0246 'epic_queue_detail',
0247 },
0248 'alarms': namespace == 'monitor_app' and url_name in alarm_names,
0249 'panda_database': namespace == 'monitor_app' and url_name in panda_database_names,
0250 'idds_database': namespace == 'monitor_app' and url_name in idds_database_names,
0251 'rucio_endpoints': namespace == 'monitor_app' and url_name in rucio_endpoint_names,
0252 'system': namespace == 'monitor_app' and url_name in {
0253 'system_status',
0254 'system_status_root',
0255 },
0256 'about': namespace == 'monitor_app' and url_name == 'about',
0257 'account': namespace == 'monitor_app' and url_name == 'account',
0258 }
0259
0260
0261 def system_status_nav(request):
0262 summary = status_summary()
0263 return {
0264 'active_nav': _active_nav(request),
0265 'system_status_overall': summary.get('overall_status', 'unknown'),
0266 'system_status_reason': summary.get('overall_reason', ''),
0267 'system_status_latest_checked_at': summary.get('latest_checked_at'),
0268 }