rucio 32.8.6__py3-none-any.whl → 35.8.0__py3-none-any.whl
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 rucio might be problematic. Click here for more details.
- rucio/__init__.py +0 -1
- rucio/alembicrevision.py +1 -2
- rucio/client/__init__.py +0 -1
- rucio/client/accountclient.py +45 -25
- rucio/client/accountlimitclient.py +37 -9
- rucio/client/baseclient.py +199 -154
- rucio/client/client.py +2 -3
- rucio/client/configclient.py +19 -6
- rucio/client/credentialclient.py +9 -4
- rucio/client/didclient.py +238 -63
- rucio/client/diracclient.py +13 -5
- rucio/client/downloadclient.py +162 -51
- rucio/client/exportclient.py +4 -4
- rucio/client/fileclient.py +3 -4
- rucio/client/importclient.py +4 -4
- rucio/client/lifetimeclient.py +21 -5
- rucio/client/lockclient.py +18 -8
- rucio/client/{metaclient.py → metaconventionsclient.py} +18 -15
- rucio/client/pingclient.py +0 -1
- rucio/client/replicaclient.py +15 -5
- rucio/client/requestclient.py +35 -19
- rucio/client/rseclient.py +133 -51
- rucio/client/ruleclient.py +29 -22
- rucio/client/scopeclient.py +8 -6
- rucio/client/subscriptionclient.py +47 -35
- rucio/client/touchclient.py +8 -4
- rucio/client/uploadclient.py +166 -82
- rucio/common/__init__.py +0 -1
- rucio/common/cache.py +4 -4
- rucio/common/config.py +52 -47
- rucio/common/constants.py +69 -2
- rucio/common/constraints.py +0 -1
- rucio/common/didtype.py +24 -22
- rucio/common/dumper/__init__.py +70 -41
- rucio/common/dumper/consistency.py +26 -22
- rucio/common/dumper/data_models.py +16 -23
- rucio/common/dumper/path_parsing.py +0 -1
- rucio/common/exception.py +281 -222
- rucio/common/extra.py +0 -1
- rucio/common/logging.py +54 -38
- rucio/common/pcache.py +122 -101
- rucio/common/plugins.py +153 -0
- rucio/common/policy.py +4 -4
- rucio/common/schema/__init__.py +17 -10
- rucio/common/schema/atlas.py +7 -5
- rucio/common/schema/belleii.py +7 -5
- rucio/common/schema/domatpc.py +7 -5
- rucio/common/schema/escape.py +7 -5
- rucio/common/schema/generic.py +8 -6
- rucio/common/schema/generic_multi_vo.py +7 -5
- rucio/common/schema/icecube.py +7 -5
- rucio/common/stomp_utils.py +0 -1
- rucio/common/stopwatch.py +0 -1
- rucio/common/test_rucio_server.py +2 -2
- rucio/common/types.py +262 -17
- rucio/common/utils.py +743 -451
- rucio/core/__init__.py +0 -1
- rucio/core/account.py +99 -29
- rucio/core/account_counter.py +89 -24
- rucio/core/account_limit.py +90 -24
- rucio/core/authentication.py +86 -29
- rucio/core/config.py +108 -38
- rucio/core/credential.py +14 -7
- rucio/core/did.py +680 -782
- rucio/core/did_meta_plugins/__init__.py +8 -6
- rucio/core/did_meta_plugins/did_column_meta.py +17 -12
- rucio/core/did_meta_plugins/did_meta_plugin_interface.py +60 -11
- rucio/core/did_meta_plugins/filter_engine.py +90 -50
- rucio/core/did_meta_plugins/json_meta.py +41 -16
- rucio/core/did_meta_plugins/mongo_meta.py +25 -8
- rucio/core/did_meta_plugins/postgres_meta.py +3 -4
- rucio/core/dirac.py +46 -17
- rucio/core/distance.py +66 -43
- rucio/core/exporter.py +5 -5
- rucio/core/heartbeat.py +181 -81
- rucio/core/identity.py +22 -12
- rucio/core/importer.py +23 -12
- rucio/core/lifetime_exception.py +32 -32
- rucio/core/lock.py +244 -142
- rucio/core/message.py +79 -38
- rucio/core/{meta.py → meta_conventions.py} +57 -44
- rucio/core/monitor.py +19 -13
- rucio/core/naming_convention.py +68 -27
- rucio/core/nongrid_trace.py +17 -5
- rucio/core/oidc.py +151 -29
- rucio/core/permission/__init__.py +18 -6
- rucio/core/permission/atlas.py +50 -35
- rucio/core/permission/belleii.py +6 -5
- rucio/core/permission/escape.py +8 -6
- rucio/core/permission/generic.py +82 -80
- rucio/core/permission/generic_multi_vo.py +9 -7
- rucio/core/quarantined_replica.py +91 -58
- rucio/core/replica.py +1303 -772
- rucio/core/replica_sorter.py +10 -12
- rucio/core/request.py +1133 -285
- rucio/core/rse.py +142 -102
- rucio/core/rse_counter.py +49 -18
- rucio/core/rse_expression_parser.py +6 -7
- rucio/core/rse_selector.py +41 -16
- rucio/core/rule.py +1538 -474
- rucio/core/rule_grouping.py +213 -68
- rucio/core/scope.py +50 -22
- rucio/core/subscription.py +92 -44
- rucio/core/topology.py +66 -24
- rucio/core/trace.py +42 -28
- rucio/core/transfer.py +543 -259
- rucio/core/vo.py +36 -18
- rucio/core/volatile_replica.py +59 -32
- rucio/daemons/__init__.py +0 -1
- rucio/daemons/abacus/__init__.py +0 -1
- rucio/daemons/abacus/account.py +29 -19
- rucio/daemons/abacus/collection_replica.py +21 -10
- rucio/daemons/abacus/rse.py +22 -12
- rucio/daemons/atropos/__init__.py +0 -1
- rucio/daemons/atropos/atropos.py +1 -2
- rucio/daemons/auditor/__init__.py +56 -28
- rucio/daemons/auditor/hdfs.py +17 -6
- rucio/daemons/auditor/srmdumps.py +116 -45
- rucio/daemons/automatix/__init__.py +0 -1
- rucio/daemons/automatix/automatix.py +30 -18
- rucio/daemons/badreplicas/__init__.py +0 -1
- rucio/daemons/badreplicas/minos.py +29 -18
- rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -7
- rucio/daemons/badreplicas/necromancer.py +9 -13
- rucio/daemons/bb8/__init__.py +0 -1
- rucio/daemons/bb8/bb8.py +10 -13
- rucio/daemons/bb8/common.py +151 -154
- rucio/daemons/bb8/nuclei_background_rebalance.py +15 -9
- rucio/daemons/bb8/t2_background_rebalance.py +15 -8
- rucio/daemons/c3po/__init__.py +0 -1
- rucio/daemons/c3po/algorithms/__init__.py +0 -1
- rucio/daemons/c3po/algorithms/simple.py +8 -5
- rucio/daemons/c3po/algorithms/t2_free_space.py +10 -7
- rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +10 -7
- rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +30 -15
- rucio/daemons/c3po/c3po.py +81 -52
- rucio/daemons/c3po/collectors/__init__.py +0 -1
- rucio/daemons/c3po/collectors/agis.py +17 -17
- rucio/daemons/c3po/collectors/free_space.py +32 -13
- rucio/daemons/c3po/collectors/jedi_did.py +14 -5
- rucio/daemons/c3po/collectors/mock_did.py +11 -6
- rucio/daemons/c3po/collectors/network_metrics.py +12 -4
- rucio/daemons/c3po/collectors/workload.py +21 -19
- rucio/daemons/c3po/utils/__init__.py +0 -1
- rucio/daemons/c3po/utils/dataset_cache.py +15 -5
- rucio/daemons/c3po/utils/expiring_dataset_cache.py +16 -5
- rucio/daemons/c3po/utils/expiring_list.py +6 -7
- rucio/daemons/c3po/utils/popularity.py +5 -2
- rucio/daemons/c3po/utils/timeseries.py +25 -12
- rucio/daemons/cache/__init__.py +0 -1
- rucio/daemons/cache/consumer.py +21 -15
- rucio/daemons/common.py +42 -18
- rucio/daemons/conveyor/__init__.py +0 -1
- rucio/daemons/conveyor/common.py +69 -37
- rucio/daemons/conveyor/finisher.py +83 -46
- rucio/daemons/conveyor/poller.py +101 -69
- rucio/daemons/conveyor/preparer.py +35 -28
- rucio/daemons/conveyor/receiver.py +64 -21
- rucio/daemons/conveyor/stager.py +33 -28
- rucio/daemons/conveyor/submitter.py +71 -47
- rucio/daemons/conveyor/throttler.py +99 -35
- rucio/daemons/follower/__init__.py +0 -1
- rucio/daemons/follower/follower.py +12 -8
- rucio/daemons/hermes/__init__.py +0 -1
- rucio/daemons/hermes/hermes.py +57 -21
- rucio/daemons/judge/__init__.py +0 -1
- rucio/daemons/judge/cleaner.py +27 -17
- rucio/daemons/judge/evaluator.py +31 -18
- rucio/daemons/judge/injector.py +31 -23
- rucio/daemons/judge/repairer.py +28 -18
- rucio/daemons/oauthmanager/__init__.py +0 -1
- rucio/daemons/oauthmanager/oauthmanager.py +7 -8
- rucio/daemons/reaper/__init__.py +0 -1
- rucio/daemons/reaper/dark_reaper.py +15 -9
- rucio/daemons/reaper/reaper.py +109 -67
- rucio/daemons/replicarecoverer/__init__.py +0 -1
- rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +255 -116
- rucio/{api → daemons/rsedecommissioner}/__init__.py +0 -1
- rucio/daemons/rsedecommissioner/config.py +81 -0
- rucio/daemons/rsedecommissioner/profiles/__init__.py +24 -0
- rucio/daemons/rsedecommissioner/profiles/atlas.py +60 -0
- rucio/daemons/rsedecommissioner/profiles/generic.py +451 -0
- rucio/daemons/rsedecommissioner/profiles/types.py +92 -0
- rucio/daemons/rsedecommissioner/rse_decommissioner.py +280 -0
- rucio/daemons/storage/__init__.py +0 -1
- rucio/daemons/storage/consistency/__init__.py +0 -1
- rucio/daemons/storage/consistency/actions.py +152 -59
- rucio/daemons/tracer/__init__.py +0 -1
- rucio/daemons/tracer/kronos.py +47 -24
- rucio/daemons/transmogrifier/__init__.py +0 -1
- rucio/daemons/transmogrifier/transmogrifier.py +35 -26
- rucio/daemons/undertaker/__init__.py +0 -1
- rucio/daemons/undertaker/undertaker.py +10 -10
- rucio/db/__init__.py +0 -1
- rucio/db/sqla/__init__.py +16 -2
- rucio/db/sqla/constants.py +10 -1
- rucio/db/sqla/migrate_repo/__init__.py +0 -1
- rucio/db/sqla/migrate_repo/env.py +0 -1
- rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -1
- rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +1 -3
- rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -3
- rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +1 -4
- rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -1
- rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -2
- rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -2
- rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -3
- rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -1
- rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +1 -2
- rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -1
- rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -3
- rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +1 -4
- rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -2
- rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -3
- rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +1 -2
- rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -1
- rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -1
- rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -2
- rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -2
- rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +1 -4
- rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +1 -4
- rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -1
- rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +1 -3
- rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -2
- rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -3
- rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +1 -2
- rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +1 -3
- rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -2
- rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +2 -3
- rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +1 -4
- rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -1
- rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -1
- rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -1
- rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -2
- rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -3
- rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -2
- rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +2 -4
- rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -2
- rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +1 -4
- rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -2
- rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +55 -0
- rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -2
- rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -2
- rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -3
- rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -3
- rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +1 -3
- rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +1 -3
- rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -3
- rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +1 -2
- rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +2 -4
- rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -1
- rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +1 -4
- rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -2
- rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +1 -2
- rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -3
- rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +1 -3
- rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -3
- rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -1
- rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -2
- rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +55 -0
- rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +1 -3
- rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -2
- rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +1 -4
- rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -1
- rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -1
- rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +1 -4
- rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -1
- rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +57 -0
- rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -3
- rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +41 -0
- rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +1 -2
- rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +1 -3
- rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +1 -5
- rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +1 -3
- rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -3
- rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +1 -3
- rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -3
- rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +1 -4
- rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +1 -2
- rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +1 -4
- rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +1 -3
- rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +1 -4
- rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -2
- rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +1 -3
- rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -1
- rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +1 -2
- rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +1 -3
- rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -2
- rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -1
- rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +1 -2
- rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -3
- rucio/db/sqla/models.py +122 -216
- rucio/db/sqla/sautils.py +12 -5
- rucio/db/sqla/session.py +71 -43
- rucio/db/sqla/types.py +3 -4
- rucio/db/sqla/util.py +91 -69
- rucio/gateway/__init__.py +13 -0
- rucio/{api → gateway}/account.py +119 -46
- rucio/{api → gateway}/account_limit.py +12 -13
- rucio/{api → gateway}/authentication.py +106 -33
- rucio/{api → gateway}/config.py +12 -13
- rucio/{api → gateway}/credential.py +15 -4
- rucio/{api → gateway}/did.py +384 -140
- rucio/{api → gateway}/dirac.py +16 -6
- rucio/{api → gateway}/exporter.py +3 -4
- rucio/{api → gateway}/heartbeat.py +17 -5
- rucio/{api → gateway}/identity.py +63 -19
- rucio/{api → gateway}/importer.py +3 -4
- rucio/{api → gateway}/lifetime_exception.py +35 -10
- rucio/{api → gateway}/lock.py +34 -12
- rucio/{api/meta.py → gateway/meta_conventions.py} +18 -16
- rucio/{api → gateway}/permission.py +4 -5
- rucio/{api → gateway}/quarantined_replica.py +13 -4
- rucio/{api → gateway}/replica.py +12 -11
- rucio/{api → gateway}/request.py +129 -28
- rucio/{api → gateway}/rse.py +11 -12
- rucio/{api → gateway}/rule.py +117 -35
- rucio/{api → gateway}/scope.py +24 -14
- rucio/{api → gateway}/subscription.py +65 -43
- rucio/{api → gateway}/vo.py +17 -7
- rucio/rse/__init__.py +3 -4
- rucio/rse/protocols/__init__.py +0 -1
- rucio/rse/protocols/bittorrent.py +184 -0
- rucio/rse/protocols/cache.py +1 -2
- rucio/rse/protocols/dummy.py +1 -2
- rucio/rse/protocols/gfal.py +12 -10
- rucio/rse/protocols/globus.py +7 -7
- rucio/rse/protocols/gsiftp.py +2 -3
- rucio/rse/protocols/http_cache.py +1 -2
- rucio/rse/protocols/mock.py +1 -2
- rucio/rse/protocols/ngarc.py +1 -2
- rucio/rse/protocols/posix.py +12 -13
- rucio/rse/protocols/protocol.py +116 -52
- rucio/rse/protocols/rclone.py +6 -7
- rucio/rse/protocols/rfio.py +4 -5
- rucio/rse/protocols/srm.py +9 -10
- rucio/rse/protocols/ssh.py +8 -9
- rucio/rse/protocols/storm.py +2 -3
- rucio/rse/protocols/webdav.py +17 -14
- rucio/rse/protocols/xrootd.py +23 -17
- rucio/rse/rsemanager.py +19 -7
- rucio/tests/__init__.py +0 -1
- rucio/tests/common.py +43 -17
- rucio/tests/common_server.py +3 -3
- rucio/transfertool/__init__.py +0 -1
- rucio/transfertool/bittorrent.py +199 -0
- rucio/transfertool/bittorrent_driver.py +52 -0
- rucio/transfertool/bittorrent_driver_qbittorrent.py +133 -0
- rucio/transfertool/fts3.py +250 -138
- rucio/transfertool/fts3_plugins.py +152 -0
- rucio/transfertool/globus.py +9 -8
- rucio/transfertool/globus_library.py +1 -2
- rucio/transfertool/mock.py +21 -12
- rucio/transfertool/transfertool.py +33 -24
- rucio/vcsversion.py +4 -4
- rucio/version.py +5 -13
- rucio/web/__init__.py +0 -1
- rucio/web/rest/__init__.py +0 -1
- rucio/web/rest/flaskapi/__init__.py +0 -1
- rucio/web/rest/flaskapi/authenticated_bp.py +0 -1
- rucio/web/rest/flaskapi/v1/__init__.py +0 -1
- rucio/web/rest/flaskapi/v1/accountlimits.py +15 -13
- rucio/web/rest/flaskapi/v1/accounts.py +49 -48
- rucio/web/rest/flaskapi/v1/archives.py +12 -10
- rucio/web/rest/flaskapi/v1/auth.py +146 -144
- rucio/web/rest/flaskapi/v1/common.py +82 -41
- rucio/web/rest/flaskapi/v1/config.py +5 -6
- rucio/web/rest/flaskapi/v1/credentials.py +7 -8
- rucio/web/rest/flaskapi/v1/dids.py +158 -28
- rucio/web/rest/flaskapi/v1/dirac.py +8 -8
- rucio/web/rest/flaskapi/v1/export.py +3 -5
- rucio/web/rest/flaskapi/v1/heartbeats.py +3 -5
- rucio/web/rest/flaskapi/v1/identities.py +3 -5
- rucio/web/rest/flaskapi/v1/import.py +3 -4
- rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +6 -9
- rucio/web/rest/flaskapi/v1/locks.py +2 -4
- rucio/web/rest/flaskapi/v1/main.py +10 -2
- rucio/web/rest/flaskapi/v1/{meta.py → meta_conventions.py} +26 -11
- rucio/web/rest/flaskapi/v1/metrics.py +1 -2
- rucio/web/rest/flaskapi/v1/nongrid_traces.py +4 -4
- rucio/web/rest/flaskapi/v1/ping.py +6 -7
- rucio/web/rest/flaskapi/v1/redirect.py +8 -9
- rucio/web/rest/flaskapi/v1/replicas.py +43 -19
- rucio/web/rest/flaskapi/v1/requests.py +178 -21
- rucio/web/rest/flaskapi/v1/rses.py +61 -26
- rucio/web/rest/flaskapi/v1/rules.py +48 -18
- rucio/web/rest/flaskapi/v1/scopes.py +3 -5
- rucio/web/rest/flaskapi/v1/subscriptions.py +22 -18
- rucio/web/rest/flaskapi/v1/traces.py +4 -4
- rucio/web/rest/flaskapi/v1/types.py +20 -0
- rucio/web/rest/flaskapi/v1/vos.py +3 -5
- rucio/web/rest/main.py +0 -1
- rucio/web/rest/metrics.py +0 -1
- rucio/web/rest/ping.py +27 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/ldap.cfg.template +1 -1
- rucio-35.8.0.data/data/rucio/requirements.server.txt +268 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/bootstrap.py +3 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/merge_rucio_configs.py +2 -5
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/reset_database.py +3 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio +87 -85
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-account +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-collection-replica +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-rse +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-admin +45 -32
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-atropos +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-auditor +13 -7
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-automatix +1 -2
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-bb8 +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-c3po +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-cache-client +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-cache-consumer +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-finisher +1 -2
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-poller +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-preparer +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-receiver +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-stager +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-submitter +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-throttler +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-dark-reaper +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-dumper +11 -10
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-follower +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-hermes +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-cleaner +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-evaluator +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-injector +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-repairer +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-kronos +1 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-minos +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-minos-temporary-expiration +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-necromancer +1 -2
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-oauth-manager +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-reaper +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-replica-recoverer +6 -7
- rucio-35.8.0.data/scripts/rucio-rse-decommissioner +66 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-storage-consistency-actions +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-transmogrifier +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-undertaker +1 -2
- rucio-35.8.0.dist-info/METADATA +72 -0
- rucio-35.8.0.dist-info/RECORD +493 -0
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/WHEEL +1 -1
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/licenses/AUTHORS.rst +3 -0
- rucio/api/temporary_did.py +0 -49
- rucio/common/schema/cms.py +0 -478
- rucio/common/schema/lsst.py +0 -423
- rucio/core/permission/cms.py +0 -1166
- rucio/core/temporary_did.py +0 -188
- rucio/daemons/reaper/light_reaper.py +0 -255
- rucio/web/rest/flaskapi/v1/tmp_dids.py +0 -115
- rucio-32.8.6.data/data/rucio/requirements.txt +0 -55
- rucio-32.8.6.data/scripts/rucio-light-reaper +0 -53
- rucio-32.8.6.dist-info/METADATA +0 -83
- rucio-32.8.6.dist-info/RECORD +0 -481
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/alembic.ini.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/licenses/LICENSE +0 -0
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/top_level.txt +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
3
2
|
#
|
|
4
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -14,18 +13,21 @@
|
|
|
14
13
|
# limitations under the License.
|
|
15
14
|
|
|
16
15
|
import json
|
|
16
|
+
from typing import TYPE_CHECKING
|
|
17
17
|
|
|
18
18
|
import flask
|
|
19
19
|
from flask import Flask, Response
|
|
20
20
|
|
|
21
|
-
from rucio.api import request
|
|
22
21
|
from rucio.common.exception import RequestNotFound
|
|
23
22
|
from rucio.common.utils import APIEncoder, render_json
|
|
24
23
|
from rucio.core.rse import get_rses_with_attribute_value
|
|
25
24
|
from rucio.db.sqla.constants import RequestState
|
|
25
|
+
from rucio.gateway import request
|
|
26
26
|
from rucio.web.rest.flaskapi.authenticated_bp import AuthenticatedBlueprint
|
|
27
|
-
from rucio.web.rest.flaskapi.v1.common import check_accept_header_wrapper_flask, parse_scope_name,
|
|
28
|
-
|
|
27
|
+
from rucio.web.rest.flaskapi.v1.common import ErrorHandlingMethodView, check_accept_header_wrapper_flask, generate_http_error_flask, parse_scope_name, response_headers, try_stream
|
|
28
|
+
|
|
29
|
+
if TYPE_CHECKING:
|
|
30
|
+
from collections.abc import Iterator
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
class RequestGet(ErrorHandlingMethodView):
|
|
@@ -36,7 +38,7 @@ class RequestGet(ErrorHandlingMethodView):
|
|
|
36
38
|
"""
|
|
37
39
|
---
|
|
38
40
|
summary: Get Request
|
|
39
|
-
description: Get a request for a given DID to a
|
|
41
|
+
description: Get a request for a given DID to a destination RSE.
|
|
40
42
|
tags:
|
|
41
43
|
- Requests
|
|
42
44
|
parameters:
|
|
@@ -100,7 +102,7 @@ class RequestGet(ErrorHandlingMethodView):
|
|
|
100
102
|
description: The numbers of attempted retires.
|
|
101
103
|
type: integer
|
|
102
104
|
err_msg:
|
|
103
|
-
description: An error message if one
|
|
105
|
+
description: An error message if one occurred.
|
|
104
106
|
type: string
|
|
105
107
|
previous_attempt_id:
|
|
106
108
|
description: The id of the previous attempt.
|
|
@@ -130,7 +132,7 @@ class RequestGet(ErrorHandlingMethodView):
|
|
|
130
132
|
description: The time the request got started.
|
|
131
133
|
type: string
|
|
132
134
|
transferred_at:
|
|
133
|
-
description: The time the request got
|
|
135
|
+
description: The time the request got transferred.
|
|
134
136
|
type: string
|
|
135
137
|
estimated_at:
|
|
136
138
|
description: The time the request got estimated.
|
|
@@ -142,7 +144,7 @@ class RequestGet(ErrorHandlingMethodView):
|
|
|
142
144
|
description: The estimation of the started at value.
|
|
143
145
|
type: string
|
|
144
146
|
estimated_transferred_at:
|
|
145
|
-
description: The estimation of the
|
|
147
|
+
description: The estimation of the transferred at value.
|
|
146
148
|
type: string
|
|
147
149
|
staging_started_at:
|
|
148
150
|
description: The time the staging got started.
|
|
@@ -201,7 +203,7 @@ class RequestHistoryGet(ErrorHandlingMethodView):
|
|
|
201
203
|
"""
|
|
202
204
|
---
|
|
203
205
|
summary: Get Historical Request
|
|
204
|
-
description: List a
|
|
206
|
+
description: List a historical request for a given DID to a destination RSE.
|
|
205
207
|
tags:
|
|
206
208
|
- Requests
|
|
207
209
|
parameters:
|
|
@@ -265,7 +267,7 @@ class RequestHistoryGet(ErrorHandlingMethodView):
|
|
|
265
267
|
description: The numbers of attempted retires.
|
|
266
268
|
type: integer
|
|
267
269
|
err_msg:
|
|
268
|
-
description: An error message if one
|
|
270
|
+
description: An error message if one occurred.
|
|
269
271
|
type: string
|
|
270
272
|
previous_attempt_id:
|
|
271
273
|
description: The id of the previous attempt.
|
|
@@ -295,7 +297,7 @@ class RequestHistoryGet(ErrorHandlingMethodView):
|
|
|
295
297
|
description: The time the request got started.
|
|
296
298
|
type: string
|
|
297
299
|
transferred_at:
|
|
298
|
-
description: The time the request got
|
|
300
|
+
description: The time the request got transferred.
|
|
299
301
|
type: string
|
|
300
302
|
estimated_at:
|
|
301
303
|
description: The time the request got estimated.
|
|
@@ -307,7 +309,7 @@ class RequestHistoryGet(ErrorHandlingMethodView):
|
|
|
307
309
|
description: The estimation of the started at value.
|
|
308
310
|
type: string
|
|
309
311
|
estimated_transferred_at:
|
|
310
|
-
description: The estimation of the
|
|
312
|
+
description: The estimation of the transferred at value.
|
|
311
313
|
type: string
|
|
312
314
|
staging_started_at:
|
|
313
315
|
description: The time the staging got started.
|
|
@@ -365,7 +367,7 @@ class RequestList(ErrorHandlingMethodView):
|
|
|
365
367
|
def get(self):
|
|
366
368
|
"""
|
|
367
369
|
---
|
|
368
|
-
summary: List
|
|
370
|
+
summary: List Requests
|
|
369
371
|
description: List requests for a given source and destination RSE or site.
|
|
370
372
|
tags:
|
|
371
373
|
- Requests
|
|
@@ -417,7 +419,7 @@ class RequestList(ErrorHandlingMethodView):
|
|
|
417
419
|
content:
|
|
418
420
|
application/x-json-stream:
|
|
419
421
|
schema:
|
|
420
|
-
description: All requests matching the arguments.
|
|
422
|
+
description: All requests matching the arguments. Separated by the new line character.
|
|
421
423
|
type: array
|
|
422
424
|
items:
|
|
423
425
|
description: A request.
|
|
@@ -462,7 +464,7 @@ class RequestList(ErrorHandlingMethodView):
|
|
|
462
464
|
description: The numbers of attempted retires.
|
|
463
465
|
type: integer
|
|
464
466
|
err_msg:
|
|
465
|
-
description: An error message if one
|
|
467
|
+
description: An error message if one occurred.
|
|
466
468
|
type: string
|
|
467
469
|
previous_attempt_id:
|
|
468
470
|
description: The id of the previous attempt.
|
|
@@ -492,7 +494,7 @@ class RequestList(ErrorHandlingMethodView):
|
|
|
492
494
|
description: The time the request got started.
|
|
493
495
|
type: string
|
|
494
496
|
transferred_at:
|
|
495
|
-
description: The time the request got
|
|
497
|
+
description: The time the request got transferred.
|
|
496
498
|
type: string
|
|
497
499
|
estimated_at:
|
|
498
500
|
description: The time the request got estimated.
|
|
@@ -504,7 +506,7 @@ class RequestList(ErrorHandlingMethodView):
|
|
|
504
506
|
description: The estimation of the started at value.
|
|
505
507
|
type: string
|
|
506
508
|
estimated_transferred_at:
|
|
507
|
-
description: The estimation of the
|
|
509
|
+
description: The estimation of the transferred at value.
|
|
508
510
|
type: string
|
|
509
511
|
staging_started_at:
|
|
510
512
|
description: The time the staging got started.
|
|
@@ -652,7 +654,7 @@ class RequestHistoryList(ErrorHandlingMethodView):
|
|
|
652
654
|
content:
|
|
653
655
|
application/x-json-stream:
|
|
654
656
|
schema:
|
|
655
|
-
description: All requests matching the arguments.
|
|
657
|
+
description: All requests matching the arguments. Separated by a new line character.
|
|
656
658
|
type: array
|
|
657
659
|
items:
|
|
658
660
|
description: A request.
|
|
@@ -697,7 +699,7 @@ class RequestHistoryList(ErrorHandlingMethodView):
|
|
|
697
699
|
description: The numbers of attempted retires.
|
|
698
700
|
type: integer
|
|
699
701
|
err_msg:
|
|
700
|
-
description: An error message if one
|
|
702
|
+
description: An error message if one occurred.
|
|
701
703
|
type: string
|
|
702
704
|
previous_attempt_id:
|
|
703
705
|
description: The id of the previous attempt.
|
|
@@ -727,7 +729,7 @@ class RequestHistoryList(ErrorHandlingMethodView):
|
|
|
727
729
|
description: The time the request got started.
|
|
728
730
|
type: string
|
|
729
731
|
transferred_at:
|
|
730
|
-
description: The time the request got
|
|
732
|
+
description: The time the request got transferred.
|
|
731
733
|
type: string
|
|
732
734
|
estimated_at:
|
|
733
735
|
description: The time the request got estimated.
|
|
@@ -739,7 +741,7 @@ class RequestHistoryList(ErrorHandlingMethodView):
|
|
|
739
741
|
description: The estimation of the started at value.
|
|
740
742
|
type: string
|
|
741
743
|
estimated_transferred_at:
|
|
742
|
-
description: The estimation of the
|
|
744
|
+
description: The estimation of the transferred at value.
|
|
743
745
|
type: string
|
|
744
746
|
staging_started_at:
|
|
745
747
|
description: The time the staging got started.
|
|
@@ -818,6 +820,159 @@ class RequestHistoryList(ErrorHandlingMethodView):
|
|
|
818
820
|
return try_stream(generate(issuer=flask.request.environ.get('issuer'), vo=flask.request.environ.get('vo')))
|
|
819
821
|
|
|
820
822
|
|
|
823
|
+
class RequestMetricsGet(ErrorHandlingMethodView):
|
|
824
|
+
""" REST API to get request stats. """
|
|
825
|
+
|
|
826
|
+
@check_accept_header_wrapper_flask(['application/x-json-stream'])
|
|
827
|
+
def get(self):
|
|
828
|
+
"""
|
|
829
|
+
---
|
|
830
|
+
summary: Get Request Statistics
|
|
831
|
+
description: Get statistics of requests grouped by source, destination, and activity.
|
|
832
|
+
tags:
|
|
833
|
+
- Requests
|
|
834
|
+
parameters:
|
|
835
|
+
- name: dest_rse
|
|
836
|
+
in: query
|
|
837
|
+
description: The destination RSE name
|
|
838
|
+
schema:
|
|
839
|
+
type: string
|
|
840
|
+
- name: source_rse
|
|
841
|
+
in: query
|
|
842
|
+
description: The source RSE name
|
|
843
|
+
schema:
|
|
844
|
+
type: string
|
|
845
|
+
- name: activity
|
|
846
|
+
in: query
|
|
847
|
+
description: The activity
|
|
848
|
+
schema:
|
|
849
|
+
type: string
|
|
850
|
+
- name: group_by_rse_attribute
|
|
851
|
+
in: query
|
|
852
|
+
description: The parameter to group the RSEs by.
|
|
853
|
+
schema:
|
|
854
|
+
type: string
|
|
855
|
+
responses:
|
|
856
|
+
200:
|
|
857
|
+
description: OK
|
|
858
|
+
content:
|
|
859
|
+
application/x-json-stream:
|
|
860
|
+
schema:
|
|
861
|
+
description: Statistics of requests by source, destination, and activity.
|
|
862
|
+
type: array
|
|
863
|
+
items:
|
|
864
|
+
description: Statistics of the request group for a given (source, destination, activity) tuple.
|
|
865
|
+
type: object
|
|
866
|
+
properties:
|
|
867
|
+
src_rse:
|
|
868
|
+
type: string
|
|
869
|
+
description: The name of this links source RSE
|
|
870
|
+
dst_rse:
|
|
871
|
+
type: string
|
|
872
|
+
description: The name of this links destination RSE
|
|
873
|
+
distance:
|
|
874
|
+
type: integer
|
|
875
|
+
description: The distance between the source and destination RSE
|
|
876
|
+
files:
|
|
877
|
+
type: object
|
|
878
|
+
properties:
|
|
879
|
+
done-total-1h:
|
|
880
|
+
type: integer
|
|
881
|
+
description: The total number of files successfully transferred in the last 1 hour
|
|
882
|
+
done-total-6h:
|
|
883
|
+
type: integer
|
|
884
|
+
description: The total number of files successfully transferred in the last 6 hours
|
|
885
|
+
failed-total-1h:
|
|
886
|
+
type: integer
|
|
887
|
+
description: The total number of transfer failures in the last 1 hour
|
|
888
|
+
failed-total-6h:
|
|
889
|
+
type: integer
|
|
890
|
+
description: The total number of transfer failures in the last 6 hours
|
|
891
|
+
queued-total:
|
|
892
|
+
type: integer
|
|
893
|
+
description: The total number of files queued in rucio
|
|
894
|
+
queued:
|
|
895
|
+
type: object
|
|
896
|
+
description: Per-activity number of queued files
|
|
897
|
+
additionalProperties:
|
|
898
|
+
type: integer
|
|
899
|
+
done:
|
|
900
|
+
type: object
|
|
901
|
+
additionalProperties:
|
|
902
|
+
type: object
|
|
903
|
+
properties:
|
|
904
|
+
1h:
|
|
905
|
+
type: integer
|
|
906
|
+
6h:
|
|
907
|
+
type: integer
|
|
908
|
+
failed:
|
|
909
|
+
type: object
|
|
910
|
+
description: Per-activity number of transfer failures in the last 1 and 6 hours
|
|
911
|
+
additionalProperties:
|
|
912
|
+
type: object
|
|
913
|
+
properties:
|
|
914
|
+
1h:
|
|
915
|
+
type: integer
|
|
916
|
+
6h:
|
|
917
|
+
type: integer
|
|
918
|
+
bytes:
|
|
919
|
+
type: object
|
|
920
|
+
properties:
|
|
921
|
+
done-total-1h:
|
|
922
|
+
type: integer
|
|
923
|
+
description: The total number of bytes successfully transferred in the last 1 hour
|
|
924
|
+
done-total-6h:
|
|
925
|
+
type: integer
|
|
926
|
+
description: The total number of bytes successfully transferred in the last 6 hours
|
|
927
|
+
queued-total:
|
|
928
|
+
type: integer
|
|
929
|
+
description: The total number of bytes queued to be transferred by rucio
|
|
930
|
+
queued:
|
|
931
|
+
type: object
|
|
932
|
+
description: Per-activity amount of queued bytes
|
|
933
|
+
additionalProperties:
|
|
934
|
+
type: integer
|
|
935
|
+
done:
|
|
936
|
+
type: object
|
|
937
|
+
description: Per-activity number of transferred bytes in the last 1 and 6 hours
|
|
938
|
+
additionalProperties:
|
|
939
|
+
type: object
|
|
940
|
+
properties:
|
|
941
|
+
1h:
|
|
942
|
+
type: integer
|
|
943
|
+
6h:
|
|
944
|
+
type: integer
|
|
945
|
+
required:
|
|
946
|
+
- distance
|
|
947
|
+
- src_rse
|
|
948
|
+
- dst_rse
|
|
949
|
+
401:
|
|
950
|
+
description: Invalid Auth Token
|
|
951
|
+
"""
|
|
952
|
+
dst_rse = flask.request.args.get('dst_rse', default=None)
|
|
953
|
+
src_rse = flask.request.args.get('src_rse', default=None)
|
|
954
|
+
activity = flask.request.args.get('activity', default=None)
|
|
955
|
+
group_by_rse_attribute = flask.request.args.get('group_by_rse_attribute', default=None)
|
|
956
|
+
format = flask.request.args.get('format', default=None)
|
|
957
|
+
|
|
958
|
+
metrics = request.get_request_metrics(
|
|
959
|
+
dst_rse=dst_rse,
|
|
960
|
+
src_rse=src_rse,
|
|
961
|
+
activity=activity,
|
|
962
|
+
group_by_rse_attribute=group_by_rse_attribute,
|
|
963
|
+
issuer=flask.request.environ.get('issuer'),
|
|
964
|
+
vo=flask.request.environ.get('vo')
|
|
965
|
+
)
|
|
966
|
+
|
|
967
|
+
if format == 'panda':
|
|
968
|
+
return Response(json.dumps(metrics, cls=APIEncoder), content_type='application/json')
|
|
969
|
+
|
|
970
|
+
def generate() -> "Iterator[str]":
|
|
971
|
+
for result in metrics.values():
|
|
972
|
+
yield render_json(**result) + '\n'
|
|
973
|
+
return try_stream(generate())
|
|
974
|
+
|
|
975
|
+
|
|
821
976
|
def blueprint():
|
|
822
977
|
bp = AuthenticatedBlueprint('requests', __name__, url_prefix='/requests')
|
|
823
978
|
|
|
@@ -829,6 +984,8 @@ def blueprint():
|
|
|
829
984
|
bp.add_url_rule('/list', view_func=request_list_view, methods=['get', ])
|
|
830
985
|
request_history_list_view = RequestHistoryList.as_view('request_history_list')
|
|
831
986
|
bp.add_url_rule('/history/list', view_func=request_history_list_view, methods=['get', ])
|
|
987
|
+
request_metrics_view = RequestMetricsGet.as_view('request_metrics_get')
|
|
988
|
+
bp.add_url_rule('/metrics', view_func=request_metrics_view, methods=['get', ])
|
|
832
989
|
|
|
833
990
|
bp.after_request(response_headers)
|
|
834
991
|
return bp
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
3
2
|
#
|
|
4
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -15,21 +14,57 @@
|
|
|
15
14
|
|
|
16
15
|
from json import dumps
|
|
17
16
|
|
|
18
|
-
from flask import Flask, Response,
|
|
19
|
-
|
|
20
|
-
from rucio.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
InvalidRSEExpression,
|
|
28
|
-
|
|
17
|
+
from flask import Flask, Response, jsonify, request
|
|
18
|
+
|
|
19
|
+
from rucio.common.exception import (
|
|
20
|
+
AccessDenied,
|
|
21
|
+
CounterNotFound,
|
|
22
|
+
Duplicate,
|
|
23
|
+
InputValidationError,
|
|
24
|
+
InvalidObject,
|
|
25
|
+
InvalidPath,
|
|
26
|
+
InvalidRSEExpression,
|
|
27
|
+
ReplicaNotFound,
|
|
28
|
+
RSEAttributeNotFound,
|
|
29
|
+
RSENotFound,
|
|
30
|
+
RSEOperationNotSupported,
|
|
31
|
+
RSEProtocolDomainNotSupported,
|
|
32
|
+
RSEProtocolNotSupported,
|
|
33
|
+
RSEProtocolPriorityError,
|
|
34
|
+
)
|
|
35
|
+
from rucio.common.utils import APIEncoder, Availability, render_json
|
|
36
|
+
from rucio.gateway.account_limit import get_rse_account_usage
|
|
37
|
+
from rucio.gateway.rse import (
|
|
38
|
+
add_distance,
|
|
39
|
+
add_protocol,
|
|
40
|
+
add_qos_policy,
|
|
41
|
+
add_rse,
|
|
42
|
+
add_rse_attribute,
|
|
43
|
+
del_protocols,
|
|
44
|
+
del_rse,
|
|
45
|
+
del_rse_attribute,
|
|
46
|
+
delete_distance,
|
|
47
|
+
delete_qos_policy,
|
|
48
|
+
delete_rse_limits,
|
|
49
|
+
get_distance,
|
|
50
|
+
get_rse,
|
|
51
|
+
get_rse_limits,
|
|
52
|
+
get_rse_protocols,
|
|
53
|
+
get_rse_usage,
|
|
54
|
+
list_qos_policies,
|
|
55
|
+
list_rse_attributes,
|
|
56
|
+
list_rse_usage_history,
|
|
57
|
+
list_rses,
|
|
58
|
+
parse_rse_expression,
|
|
59
|
+
set_rse_limits,
|
|
60
|
+
set_rse_usage,
|
|
61
|
+
update_distance,
|
|
62
|
+
update_protocols,
|
|
63
|
+
update_rse,
|
|
64
|
+
)
|
|
29
65
|
from rucio.rse import rsemanager
|
|
30
66
|
from rucio.web.rest.flaskapi.authenticated_bp import AuthenticatedBlueprint
|
|
31
|
-
from rucio.web.rest.flaskapi.v1.common import
|
|
32
|
-
try_stream, generate_http_error_flask, ErrorHandlingMethodView, json_parameters, param_get
|
|
67
|
+
from rucio.web.rest.flaskapi.v1.common import ErrorHandlingMethodView, check_accept_header_wrapper_flask, generate_http_error_flask, json_parameters, param_get, response_headers, try_stream
|
|
33
68
|
|
|
34
69
|
|
|
35
70
|
class RSEs(ErrorHandlingMethodView):
|
|
@@ -205,8 +240,8 @@ class RSE(ErrorHandlingMethodView):
|
|
|
205
240
|
description: The rse type.
|
|
206
241
|
type: string
|
|
207
242
|
enum: ["DISK", "TAPE"]
|
|
208
|
-
|
|
209
|
-
description: The
|
|
243
|
+
latitude:
|
|
244
|
+
description: The latitude of the RSE.
|
|
210
245
|
type: number
|
|
211
246
|
longitude:
|
|
212
247
|
description: The longitude of the RSE.
|
|
@@ -346,8 +381,8 @@ class RSE(ErrorHandlingMethodView):
|
|
|
346
381
|
description: The rse type.
|
|
347
382
|
type: string
|
|
348
383
|
enum: ["DISK", "TAPE"]
|
|
349
|
-
|
|
350
|
-
description: The
|
|
384
|
+
latitude:
|
|
385
|
+
description: The latitude of the RSE.
|
|
351
386
|
type: number
|
|
352
387
|
longitude:
|
|
353
388
|
description: The longitude of the RSE.
|
|
@@ -440,8 +475,8 @@ class RSE(ErrorHandlingMethodView):
|
|
|
440
475
|
description: The rse type.
|
|
441
476
|
type: string
|
|
442
477
|
enum: ["DISK", "TAPE"]
|
|
443
|
-
|
|
444
|
-
description: The
|
|
478
|
+
latitude:
|
|
479
|
+
description: The latitude of the RSE.
|
|
445
480
|
type: number
|
|
446
481
|
longitude:
|
|
447
482
|
description: The longitude of the RSE.
|
|
@@ -787,7 +822,7 @@ class ProtocolList(ErrorHandlingMethodView):
|
|
|
787
822
|
401:
|
|
788
823
|
description: Invalid Auth Token
|
|
789
824
|
404:
|
|
790
|
-
description: RSE not found or RSE Operation, RSE
|
|
825
|
+
description: RSE not found or RSE Operation, RSE Protocol Domain, RSE Protocol not supported
|
|
791
826
|
406:
|
|
792
827
|
description: Not acceptable
|
|
793
828
|
"""
|
|
@@ -838,7 +873,7 @@ class LFNS2PFNS(ErrorHandlingMethodView):
|
|
|
838
873
|
type: string
|
|
839
874
|
- name: operation
|
|
840
875
|
in: query
|
|
841
|
-
description: Optional query argument to select the
|
|
876
|
+
description: Optional query argument to select the protocol for read-vs-writes.
|
|
842
877
|
schema:
|
|
843
878
|
type: string
|
|
844
879
|
responses:
|
|
@@ -855,7 +890,7 @@ class LFNS2PFNS(ErrorHandlingMethodView):
|
|
|
855
890
|
401:
|
|
856
891
|
description: Invalid Auth Token
|
|
857
892
|
404:
|
|
858
|
-
description: RSE not found or RSE Protocol or RSE
|
|
893
|
+
description: RSE not found or RSE Protocol or RSE Protocol Domain not supported
|
|
859
894
|
406:
|
|
860
895
|
description: Not acceptable
|
|
861
896
|
"""
|
|
@@ -1315,7 +1350,7 @@ class Protocol(ErrorHandlingMethodView):
|
|
|
1315
1350
|
"""
|
|
1316
1351
|
---
|
|
1317
1352
|
summary: Delete Protocol Attributes
|
|
1318
|
-
description: Delete all protocol
|
|
1353
|
+
description: Delete all protocol attributes.
|
|
1319
1354
|
tags:
|
|
1320
1355
|
- Rucio Storage Elements
|
|
1321
1356
|
parameters:
|
|
@@ -1813,7 +1848,7 @@ class Distance(ErrorHandlingMethodView):
|
|
|
1813
1848
|
type: array
|
|
1814
1849
|
items:
|
|
1815
1850
|
type: object
|
|
1816
|
-
description: One distance
|
|
1851
|
+
description: One distance between source and destination.
|
|
1817
1852
|
properties:
|
|
1818
1853
|
src_rse_id:
|
|
1819
1854
|
description: The source rse id.
|
|
@@ -2140,7 +2175,7 @@ class QoSPolicy(ErrorHandlingMethodView):
|
|
|
2140
2175
|
type: array
|
|
2141
2176
|
items:
|
|
2142
2177
|
type: object
|
|
2143
|
-
|
|
2178
|
+
properties:
|
|
2144
2179
|
rse_id:
|
|
2145
2180
|
description: The rse id.
|
|
2146
2181
|
type: string
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
3
2
|
#
|
|
4
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -16,20 +15,44 @@
|
|
|
16
15
|
from json import dumps
|
|
17
16
|
from typing import Any
|
|
18
17
|
|
|
19
|
-
from flask import Flask,
|
|
20
|
-
|
|
21
|
-
from rucio.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
from flask import Flask, Response, request
|
|
19
|
+
|
|
20
|
+
from rucio.common.exception import (
|
|
21
|
+
AccessDenied,
|
|
22
|
+
AccountNotFound,
|
|
23
|
+
DataIdentifierNotFound,
|
|
24
|
+
DuplicateRule,
|
|
25
|
+
InputValidationError,
|
|
26
|
+
InsufficientAccountLimit,
|
|
27
|
+
InsufficientTargetRSEs,
|
|
28
|
+
InvalidObject,
|
|
29
|
+
InvalidReplicationRule,
|
|
30
|
+
InvalidRSEExpression,
|
|
31
|
+
InvalidRuleWeight,
|
|
32
|
+
ManualRuleApprovalBlocked,
|
|
33
|
+
ReplicationRuleCreationTemporaryFailed,
|
|
34
|
+
RuleNotFound,
|
|
35
|
+
RuleReplaceFailed,
|
|
36
|
+
ScratchDiskLifetimeConflict,
|
|
37
|
+
StagingAreaRuleRequiresLifetime,
|
|
38
|
+
UnsupportedOperation,
|
|
39
|
+
)
|
|
40
|
+
from rucio.common.utils import APIEncoder, render_json
|
|
41
|
+
from rucio.gateway.lock import get_replica_locks_for_rule_id
|
|
42
|
+
from rucio.gateway.rule import (
|
|
43
|
+
add_replication_rule,
|
|
44
|
+
delete_replication_rule,
|
|
45
|
+
examine_replication_rule,
|
|
46
|
+
get_replication_rule,
|
|
47
|
+
list_replication_rule_full_history,
|
|
48
|
+
list_replication_rule_history,
|
|
49
|
+
list_replication_rules,
|
|
50
|
+
move_replication_rule,
|
|
51
|
+
reduce_replication_rule,
|
|
52
|
+
update_replication_rule,
|
|
53
|
+
)
|
|
30
54
|
from rucio.web.rest.flaskapi.authenticated_bp import AuthenticatedBlueprint
|
|
31
|
-
from rucio.web.rest.flaskapi.v1.common import check_accept_header_wrapper_flask, parse_scope_name,
|
|
32
|
-
response_headers, generate_http_error_flask, ErrorHandlingMethodView, json_parameters, param_get
|
|
55
|
+
from rucio.web.rest.flaskapi.v1.common import ErrorHandlingMethodView, check_accept_header_wrapper_flask, generate_http_error_flask, json_parameters, param_get, parse_scope_name, response_headers, try_stream
|
|
33
56
|
|
|
34
57
|
|
|
35
58
|
class Rule(ErrorHandlingMethodView):
|
|
@@ -253,7 +276,14 @@ class AllRule(ErrorHandlingMethodView):
|
|
|
253
276
|
description: The list of data identifiers.
|
|
254
277
|
type: array
|
|
255
278
|
items:
|
|
256
|
-
type:
|
|
279
|
+
type: object
|
|
280
|
+
properties:
|
|
281
|
+
scope:
|
|
282
|
+
description: The scope of the data identifier
|
|
283
|
+
type: string
|
|
284
|
+
name:
|
|
285
|
+
description: The name of the data identifier
|
|
286
|
+
type: string
|
|
257
287
|
account:
|
|
258
288
|
description: The account of the issuer.
|
|
259
289
|
type: string
|
|
@@ -763,16 +793,16 @@ class RuleAnalysis(ErrorHandlingMethodView):
|
|
|
763
793
|
description: The name of the lock.
|
|
764
794
|
rse_id:
|
|
765
795
|
type: string
|
|
766
|
-
description: The rse_id of the
|
|
796
|
+
description: The rse_id of the transferred lock.
|
|
767
797
|
rse:
|
|
768
798
|
type: object
|
|
769
|
-
description: Information about the rse of the
|
|
799
|
+
description: Information about the rse of the transferred lock.
|
|
770
800
|
attempts:
|
|
771
801
|
type: integer
|
|
772
802
|
description: The number of attempts.
|
|
773
803
|
last_error:
|
|
774
804
|
type: string
|
|
775
|
-
description: The last error that
|
|
805
|
+
description: The last error that occurred.
|
|
776
806
|
last_source:
|
|
777
807
|
type: string
|
|
778
808
|
description: The last source.
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
3
2
|
#
|
|
4
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -13,13 +12,12 @@
|
|
|
13
12
|
# See the License for the specific language governing permissions and
|
|
14
13
|
# limitations under the License.
|
|
15
14
|
|
|
16
|
-
from flask import Flask,
|
|
15
|
+
from flask import Flask, jsonify, request
|
|
17
16
|
|
|
18
|
-
from rucio.api.scope import add_scope, list_scopes, get_scopes
|
|
19
17
|
from rucio.common.exception import AccountNotFound, Duplicate, ScopeNotFound
|
|
18
|
+
from rucio.gateway.scope import add_scope, get_scopes, list_scopes
|
|
20
19
|
from rucio.web.rest.flaskapi.authenticated_bp import AuthenticatedBlueprint
|
|
21
|
-
from rucio.web.rest.flaskapi.v1.common import check_accept_header_wrapper_flask,
|
|
22
|
-
generate_http_error_flask, ErrorHandlingMethodView
|
|
20
|
+
from rucio.web.rest.flaskapi.v1.common import ErrorHandlingMethodView, check_accept_header_wrapper_flask, generate_http_error_flask, response_headers
|
|
23
21
|
|
|
24
22
|
|
|
25
23
|
class Scope(ErrorHandlingMethodView):
|