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.

Files changed (502) hide show
  1. rucio/__init__.py +0 -1
  2. rucio/alembicrevision.py +1 -2
  3. rucio/client/__init__.py +0 -1
  4. rucio/client/accountclient.py +45 -25
  5. rucio/client/accountlimitclient.py +37 -9
  6. rucio/client/baseclient.py +199 -154
  7. rucio/client/client.py +2 -3
  8. rucio/client/configclient.py +19 -6
  9. rucio/client/credentialclient.py +9 -4
  10. rucio/client/didclient.py +238 -63
  11. rucio/client/diracclient.py +13 -5
  12. rucio/client/downloadclient.py +162 -51
  13. rucio/client/exportclient.py +4 -4
  14. rucio/client/fileclient.py +3 -4
  15. rucio/client/importclient.py +4 -4
  16. rucio/client/lifetimeclient.py +21 -5
  17. rucio/client/lockclient.py +18 -8
  18. rucio/client/{metaclient.py → metaconventionsclient.py} +18 -15
  19. rucio/client/pingclient.py +0 -1
  20. rucio/client/replicaclient.py +15 -5
  21. rucio/client/requestclient.py +35 -19
  22. rucio/client/rseclient.py +133 -51
  23. rucio/client/ruleclient.py +29 -22
  24. rucio/client/scopeclient.py +8 -6
  25. rucio/client/subscriptionclient.py +47 -35
  26. rucio/client/touchclient.py +8 -4
  27. rucio/client/uploadclient.py +166 -82
  28. rucio/common/__init__.py +0 -1
  29. rucio/common/cache.py +4 -4
  30. rucio/common/config.py +52 -47
  31. rucio/common/constants.py +69 -2
  32. rucio/common/constraints.py +0 -1
  33. rucio/common/didtype.py +24 -22
  34. rucio/common/dumper/__init__.py +70 -41
  35. rucio/common/dumper/consistency.py +26 -22
  36. rucio/common/dumper/data_models.py +16 -23
  37. rucio/common/dumper/path_parsing.py +0 -1
  38. rucio/common/exception.py +281 -222
  39. rucio/common/extra.py +0 -1
  40. rucio/common/logging.py +54 -38
  41. rucio/common/pcache.py +122 -101
  42. rucio/common/plugins.py +153 -0
  43. rucio/common/policy.py +4 -4
  44. rucio/common/schema/__init__.py +17 -10
  45. rucio/common/schema/atlas.py +7 -5
  46. rucio/common/schema/belleii.py +7 -5
  47. rucio/common/schema/domatpc.py +7 -5
  48. rucio/common/schema/escape.py +7 -5
  49. rucio/common/schema/generic.py +8 -6
  50. rucio/common/schema/generic_multi_vo.py +7 -5
  51. rucio/common/schema/icecube.py +7 -5
  52. rucio/common/stomp_utils.py +0 -1
  53. rucio/common/stopwatch.py +0 -1
  54. rucio/common/test_rucio_server.py +2 -2
  55. rucio/common/types.py +262 -17
  56. rucio/common/utils.py +743 -451
  57. rucio/core/__init__.py +0 -1
  58. rucio/core/account.py +99 -29
  59. rucio/core/account_counter.py +89 -24
  60. rucio/core/account_limit.py +90 -24
  61. rucio/core/authentication.py +86 -29
  62. rucio/core/config.py +108 -38
  63. rucio/core/credential.py +14 -7
  64. rucio/core/did.py +680 -782
  65. rucio/core/did_meta_plugins/__init__.py +8 -6
  66. rucio/core/did_meta_plugins/did_column_meta.py +17 -12
  67. rucio/core/did_meta_plugins/did_meta_plugin_interface.py +60 -11
  68. rucio/core/did_meta_plugins/filter_engine.py +90 -50
  69. rucio/core/did_meta_plugins/json_meta.py +41 -16
  70. rucio/core/did_meta_plugins/mongo_meta.py +25 -8
  71. rucio/core/did_meta_plugins/postgres_meta.py +3 -4
  72. rucio/core/dirac.py +46 -17
  73. rucio/core/distance.py +66 -43
  74. rucio/core/exporter.py +5 -5
  75. rucio/core/heartbeat.py +181 -81
  76. rucio/core/identity.py +22 -12
  77. rucio/core/importer.py +23 -12
  78. rucio/core/lifetime_exception.py +32 -32
  79. rucio/core/lock.py +244 -142
  80. rucio/core/message.py +79 -38
  81. rucio/core/{meta.py → meta_conventions.py} +57 -44
  82. rucio/core/monitor.py +19 -13
  83. rucio/core/naming_convention.py +68 -27
  84. rucio/core/nongrid_trace.py +17 -5
  85. rucio/core/oidc.py +151 -29
  86. rucio/core/permission/__init__.py +18 -6
  87. rucio/core/permission/atlas.py +50 -35
  88. rucio/core/permission/belleii.py +6 -5
  89. rucio/core/permission/escape.py +8 -6
  90. rucio/core/permission/generic.py +82 -80
  91. rucio/core/permission/generic_multi_vo.py +9 -7
  92. rucio/core/quarantined_replica.py +91 -58
  93. rucio/core/replica.py +1303 -772
  94. rucio/core/replica_sorter.py +10 -12
  95. rucio/core/request.py +1133 -285
  96. rucio/core/rse.py +142 -102
  97. rucio/core/rse_counter.py +49 -18
  98. rucio/core/rse_expression_parser.py +6 -7
  99. rucio/core/rse_selector.py +41 -16
  100. rucio/core/rule.py +1538 -474
  101. rucio/core/rule_grouping.py +213 -68
  102. rucio/core/scope.py +50 -22
  103. rucio/core/subscription.py +92 -44
  104. rucio/core/topology.py +66 -24
  105. rucio/core/trace.py +42 -28
  106. rucio/core/transfer.py +543 -259
  107. rucio/core/vo.py +36 -18
  108. rucio/core/volatile_replica.py +59 -32
  109. rucio/daemons/__init__.py +0 -1
  110. rucio/daemons/abacus/__init__.py +0 -1
  111. rucio/daemons/abacus/account.py +29 -19
  112. rucio/daemons/abacus/collection_replica.py +21 -10
  113. rucio/daemons/abacus/rse.py +22 -12
  114. rucio/daemons/atropos/__init__.py +0 -1
  115. rucio/daemons/atropos/atropos.py +1 -2
  116. rucio/daemons/auditor/__init__.py +56 -28
  117. rucio/daemons/auditor/hdfs.py +17 -6
  118. rucio/daemons/auditor/srmdumps.py +116 -45
  119. rucio/daemons/automatix/__init__.py +0 -1
  120. rucio/daemons/automatix/automatix.py +30 -18
  121. rucio/daemons/badreplicas/__init__.py +0 -1
  122. rucio/daemons/badreplicas/minos.py +29 -18
  123. rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -7
  124. rucio/daemons/badreplicas/necromancer.py +9 -13
  125. rucio/daemons/bb8/__init__.py +0 -1
  126. rucio/daemons/bb8/bb8.py +10 -13
  127. rucio/daemons/bb8/common.py +151 -154
  128. rucio/daemons/bb8/nuclei_background_rebalance.py +15 -9
  129. rucio/daemons/bb8/t2_background_rebalance.py +15 -8
  130. rucio/daemons/c3po/__init__.py +0 -1
  131. rucio/daemons/c3po/algorithms/__init__.py +0 -1
  132. rucio/daemons/c3po/algorithms/simple.py +8 -5
  133. rucio/daemons/c3po/algorithms/t2_free_space.py +10 -7
  134. rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +10 -7
  135. rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +30 -15
  136. rucio/daemons/c3po/c3po.py +81 -52
  137. rucio/daemons/c3po/collectors/__init__.py +0 -1
  138. rucio/daemons/c3po/collectors/agis.py +17 -17
  139. rucio/daemons/c3po/collectors/free_space.py +32 -13
  140. rucio/daemons/c3po/collectors/jedi_did.py +14 -5
  141. rucio/daemons/c3po/collectors/mock_did.py +11 -6
  142. rucio/daemons/c3po/collectors/network_metrics.py +12 -4
  143. rucio/daemons/c3po/collectors/workload.py +21 -19
  144. rucio/daemons/c3po/utils/__init__.py +0 -1
  145. rucio/daemons/c3po/utils/dataset_cache.py +15 -5
  146. rucio/daemons/c3po/utils/expiring_dataset_cache.py +16 -5
  147. rucio/daemons/c3po/utils/expiring_list.py +6 -7
  148. rucio/daemons/c3po/utils/popularity.py +5 -2
  149. rucio/daemons/c3po/utils/timeseries.py +25 -12
  150. rucio/daemons/cache/__init__.py +0 -1
  151. rucio/daemons/cache/consumer.py +21 -15
  152. rucio/daemons/common.py +42 -18
  153. rucio/daemons/conveyor/__init__.py +0 -1
  154. rucio/daemons/conveyor/common.py +69 -37
  155. rucio/daemons/conveyor/finisher.py +83 -46
  156. rucio/daemons/conveyor/poller.py +101 -69
  157. rucio/daemons/conveyor/preparer.py +35 -28
  158. rucio/daemons/conveyor/receiver.py +64 -21
  159. rucio/daemons/conveyor/stager.py +33 -28
  160. rucio/daemons/conveyor/submitter.py +71 -47
  161. rucio/daemons/conveyor/throttler.py +99 -35
  162. rucio/daemons/follower/__init__.py +0 -1
  163. rucio/daemons/follower/follower.py +12 -8
  164. rucio/daemons/hermes/__init__.py +0 -1
  165. rucio/daemons/hermes/hermes.py +57 -21
  166. rucio/daemons/judge/__init__.py +0 -1
  167. rucio/daemons/judge/cleaner.py +27 -17
  168. rucio/daemons/judge/evaluator.py +31 -18
  169. rucio/daemons/judge/injector.py +31 -23
  170. rucio/daemons/judge/repairer.py +28 -18
  171. rucio/daemons/oauthmanager/__init__.py +0 -1
  172. rucio/daemons/oauthmanager/oauthmanager.py +7 -8
  173. rucio/daemons/reaper/__init__.py +0 -1
  174. rucio/daemons/reaper/dark_reaper.py +15 -9
  175. rucio/daemons/reaper/reaper.py +109 -67
  176. rucio/daemons/replicarecoverer/__init__.py +0 -1
  177. rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +255 -116
  178. rucio/{api → daemons/rsedecommissioner}/__init__.py +0 -1
  179. rucio/daemons/rsedecommissioner/config.py +81 -0
  180. rucio/daemons/rsedecommissioner/profiles/__init__.py +24 -0
  181. rucio/daemons/rsedecommissioner/profiles/atlas.py +60 -0
  182. rucio/daemons/rsedecommissioner/profiles/generic.py +451 -0
  183. rucio/daemons/rsedecommissioner/profiles/types.py +92 -0
  184. rucio/daemons/rsedecommissioner/rse_decommissioner.py +280 -0
  185. rucio/daemons/storage/__init__.py +0 -1
  186. rucio/daemons/storage/consistency/__init__.py +0 -1
  187. rucio/daemons/storage/consistency/actions.py +152 -59
  188. rucio/daemons/tracer/__init__.py +0 -1
  189. rucio/daemons/tracer/kronos.py +47 -24
  190. rucio/daemons/transmogrifier/__init__.py +0 -1
  191. rucio/daemons/transmogrifier/transmogrifier.py +35 -26
  192. rucio/daemons/undertaker/__init__.py +0 -1
  193. rucio/daemons/undertaker/undertaker.py +10 -10
  194. rucio/db/__init__.py +0 -1
  195. rucio/db/sqla/__init__.py +16 -2
  196. rucio/db/sqla/constants.py +10 -1
  197. rucio/db/sqla/migrate_repo/__init__.py +0 -1
  198. rucio/db/sqla/migrate_repo/env.py +0 -1
  199. rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -1
  200. rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -3
  201. rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +1 -3
  202. rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -3
  203. rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +1 -3
  204. rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +1 -3
  205. rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -3
  206. rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +1 -4
  207. rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -1
  208. rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -2
  209. rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -1
  210. rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -1
  211. rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -2
  212. rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -1
  213. rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +1 -3
  214. rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -1
  215. rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -3
  216. rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -1
  217. rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +1 -2
  218. rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -1
  219. rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -3
  220. rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +1 -3
  221. rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +1 -4
  222. rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -2
  223. rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -3
  224. rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -3
  225. rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +1 -2
  226. rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -1
  227. rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -1
  228. rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -2
  229. rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -3
  230. rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +1 -3
  231. rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -2
  232. rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +1 -4
  233. rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -3
  234. rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +1 -4
  235. rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -1
  236. rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +1 -3
  237. rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -2
  238. rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -3
  239. rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +1 -3
  240. rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +1 -2
  241. rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +1 -3
  242. rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +1 -3
  243. rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -2
  244. rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +1 -3
  245. rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +2 -3
  246. rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -3
  247. rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +1 -4
  248. rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -1
  249. rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -1
  250. rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -3
  251. rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -1
  252. rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -2
  253. rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -3
  254. rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -2
  255. rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +2 -4
  256. rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -2
  257. rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +1 -3
  258. rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +1 -4
  259. rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -3
  260. rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -3
  261. rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -2
  262. rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +1 -3
  263. rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -3
  264. rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +55 -0
  265. rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -2
  266. rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -2
  267. rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -3
  268. rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -3
  269. rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -3
  270. rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +1 -2
  271. rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -3
  272. rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +1 -3
  273. rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +1 -3
  274. rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +1 -2
  275. rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -3
  276. rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -3
  277. rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +1 -2
  278. rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +2 -4
  279. rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -1
  280. rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +1 -4
  281. rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -2
  282. rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -3
  283. rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +1 -2
  284. rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -3
  285. rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +1 -3
  286. rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -3
  287. rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -1
  288. rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +1 -2
  289. rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -2
  290. rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +55 -0
  291. rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +1 -3
  292. rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -2
  293. rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +1 -4
  294. rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -1
  295. rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -1
  296. rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +1 -3
  297. rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +1 -4
  298. rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -1
  299. rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +57 -0
  300. rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -3
  301. rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +41 -0
  302. rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +1 -2
  303. rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +1 -3
  304. rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -3
  305. rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +1 -5
  306. rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +1 -3
  307. rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -3
  308. rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +1 -3
  309. rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +1 -2
  310. rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -3
  311. rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +1 -4
  312. rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +1 -2
  313. rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +1 -4
  314. rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +1 -3
  315. rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +1 -4
  316. rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -2
  317. rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +1 -3
  318. rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -3
  319. rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +1 -3
  320. rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -1
  321. rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +1 -2
  322. rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +1 -3
  323. rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -2
  324. rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -1
  325. rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +1 -2
  326. rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -3
  327. rucio/db/sqla/models.py +122 -216
  328. rucio/db/sqla/sautils.py +12 -5
  329. rucio/db/sqla/session.py +71 -43
  330. rucio/db/sqla/types.py +3 -4
  331. rucio/db/sqla/util.py +91 -69
  332. rucio/gateway/__init__.py +13 -0
  333. rucio/{api → gateway}/account.py +119 -46
  334. rucio/{api → gateway}/account_limit.py +12 -13
  335. rucio/{api → gateway}/authentication.py +106 -33
  336. rucio/{api → gateway}/config.py +12 -13
  337. rucio/{api → gateway}/credential.py +15 -4
  338. rucio/{api → gateway}/did.py +384 -140
  339. rucio/{api → gateway}/dirac.py +16 -6
  340. rucio/{api → gateway}/exporter.py +3 -4
  341. rucio/{api → gateway}/heartbeat.py +17 -5
  342. rucio/{api → gateway}/identity.py +63 -19
  343. rucio/{api → gateway}/importer.py +3 -4
  344. rucio/{api → gateway}/lifetime_exception.py +35 -10
  345. rucio/{api → gateway}/lock.py +34 -12
  346. rucio/{api/meta.py → gateway/meta_conventions.py} +18 -16
  347. rucio/{api → gateway}/permission.py +4 -5
  348. rucio/{api → gateway}/quarantined_replica.py +13 -4
  349. rucio/{api → gateway}/replica.py +12 -11
  350. rucio/{api → gateway}/request.py +129 -28
  351. rucio/{api → gateway}/rse.py +11 -12
  352. rucio/{api → gateway}/rule.py +117 -35
  353. rucio/{api → gateway}/scope.py +24 -14
  354. rucio/{api → gateway}/subscription.py +65 -43
  355. rucio/{api → gateway}/vo.py +17 -7
  356. rucio/rse/__init__.py +3 -4
  357. rucio/rse/protocols/__init__.py +0 -1
  358. rucio/rse/protocols/bittorrent.py +184 -0
  359. rucio/rse/protocols/cache.py +1 -2
  360. rucio/rse/protocols/dummy.py +1 -2
  361. rucio/rse/protocols/gfal.py +12 -10
  362. rucio/rse/protocols/globus.py +7 -7
  363. rucio/rse/protocols/gsiftp.py +2 -3
  364. rucio/rse/protocols/http_cache.py +1 -2
  365. rucio/rse/protocols/mock.py +1 -2
  366. rucio/rse/protocols/ngarc.py +1 -2
  367. rucio/rse/protocols/posix.py +12 -13
  368. rucio/rse/protocols/protocol.py +116 -52
  369. rucio/rse/protocols/rclone.py +6 -7
  370. rucio/rse/protocols/rfio.py +4 -5
  371. rucio/rse/protocols/srm.py +9 -10
  372. rucio/rse/protocols/ssh.py +8 -9
  373. rucio/rse/protocols/storm.py +2 -3
  374. rucio/rse/protocols/webdav.py +17 -14
  375. rucio/rse/protocols/xrootd.py +23 -17
  376. rucio/rse/rsemanager.py +19 -7
  377. rucio/tests/__init__.py +0 -1
  378. rucio/tests/common.py +43 -17
  379. rucio/tests/common_server.py +3 -3
  380. rucio/transfertool/__init__.py +0 -1
  381. rucio/transfertool/bittorrent.py +199 -0
  382. rucio/transfertool/bittorrent_driver.py +52 -0
  383. rucio/transfertool/bittorrent_driver_qbittorrent.py +133 -0
  384. rucio/transfertool/fts3.py +250 -138
  385. rucio/transfertool/fts3_plugins.py +152 -0
  386. rucio/transfertool/globus.py +9 -8
  387. rucio/transfertool/globus_library.py +1 -2
  388. rucio/transfertool/mock.py +21 -12
  389. rucio/transfertool/transfertool.py +33 -24
  390. rucio/vcsversion.py +4 -4
  391. rucio/version.py +5 -13
  392. rucio/web/__init__.py +0 -1
  393. rucio/web/rest/__init__.py +0 -1
  394. rucio/web/rest/flaskapi/__init__.py +0 -1
  395. rucio/web/rest/flaskapi/authenticated_bp.py +0 -1
  396. rucio/web/rest/flaskapi/v1/__init__.py +0 -1
  397. rucio/web/rest/flaskapi/v1/accountlimits.py +15 -13
  398. rucio/web/rest/flaskapi/v1/accounts.py +49 -48
  399. rucio/web/rest/flaskapi/v1/archives.py +12 -10
  400. rucio/web/rest/flaskapi/v1/auth.py +146 -144
  401. rucio/web/rest/flaskapi/v1/common.py +82 -41
  402. rucio/web/rest/flaskapi/v1/config.py +5 -6
  403. rucio/web/rest/flaskapi/v1/credentials.py +7 -8
  404. rucio/web/rest/flaskapi/v1/dids.py +158 -28
  405. rucio/web/rest/flaskapi/v1/dirac.py +8 -8
  406. rucio/web/rest/flaskapi/v1/export.py +3 -5
  407. rucio/web/rest/flaskapi/v1/heartbeats.py +3 -5
  408. rucio/web/rest/flaskapi/v1/identities.py +3 -5
  409. rucio/web/rest/flaskapi/v1/import.py +3 -4
  410. rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +6 -9
  411. rucio/web/rest/flaskapi/v1/locks.py +2 -4
  412. rucio/web/rest/flaskapi/v1/main.py +10 -2
  413. rucio/web/rest/flaskapi/v1/{meta.py → meta_conventions.py} +26 -11
  414. rucio/web/rest/flaskapi/v1/metrics.py +1 -2
  415. rucio/web/rest/flaskapi/v1/nongrid_traces.py +4 -4
  416. rucio/web/rest/flaskapi/v1/ping.py +6 -7
  417. rucio/web/rest/flaskapi/v1/redirect.py +8 -9
  418. rucio/web/rest/flaskapi/v1/replicas.py +43 -19
  419. rucio/web/rest/flaskapi/v1/requests.py +178 -21
  420. rucio/web/rest/flaskapi/v1/rses.py +61 -26
  421. rucio/web/rest/flaskapi/v1/rules.py +48 -18
  422. rucio/web/rest/flaskapi/v1/scopes.py +3 -5
  423. rucio/web/rest/flaskapi/v1/subscriptions.py +22 -18
  424. rucio/web/rest/flaskapi/v1/traces.py +4 -4
  425. rucio/web/rest/flaskapi/v1/types.py +20 -0
  426. rucio/web/rest/flaskapi/v1/vos.py +3 -5
  427. rucio/web/rest/main.py +0 -1
  428. rucio/web/rest/metrics.py +0 -1
  429. rucio/web/rest/ping.py +27 -0
  430. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/ldap.cfg.template +1 -1
  431. rucio-35.8.0.data/data/rucio/requirements.server.txt +268 -0
  432. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/bootstrap.py +3 -3
  433. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/merge_rucio_configs.py +2 -5
  434. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/reset_database.py +3 -3
  435. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio +87 -85
  436. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-account +0 -1
  437. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-collection-replica +0 -1
  438. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-rse +0 -1
  439. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-admin +45 -32
  440. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-atropos +0 -1
  441. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-auditor +13 -7
  442. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-automatix +1 -2
  443. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-bb8 +0 -1
  444. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-c3po +0 -1
  445. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-cache-client +2 -3
  446. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-cache-consumer +0 -1
  447. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-finisher +1 -2
  448. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-poller +0 -1
  449. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-preparer +0 -1
  450. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-receiver +0 -1
  451. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-stager +0 -1
  452. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-submitter +2 -3
  453. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-throttler +0 -1
  454. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-dark-reaper +0 -1
  455. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-dumper +11 -10
  456. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-follower +0 -1
  457. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-hermes +0 -1
  458. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-cleaner +0 -1
  459. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-evaluator +2 -3
  460. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-injector +0 -1
  461. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-repairer +0 -1
  462. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-kronos +1 -3
  463. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-minos +0 -1
  464. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-minos-temporary-expiration +0 -1
  465. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-necromancer +1 -2
  466. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-oauth-manager +2 -3
  467. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-reaper +0 -1
  468. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-replica-recoverer +6 -7
  469. rucio-35.8.0.data/scripts/rucio-rse-decommissioner +66 -0
  470. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-storage-consistency-actions +0 -1
  471. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-transmogrifier +0 -1
  472. {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-undertaker +1 -2
  473. rucio-35.8.0.dist-info/METADATA +72 -0
  474. rucio-35.8.0.dist-info/RECORD +493 -0
  475. {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/WHEEL +1 -1
  476. {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/licenses/AUTHORS.rst +3 -0
  477. rucio/api/temporary_did.py +0 -49
  478. rucio/common/schema/cms.py +0 -478
  479. rucio/common/schema/lsst.py +0 -423
  480. rucio/core/permission/cms.py +0 -1166
  481. rucio/core/temporary_did.py +0 -188
  482. rucio/daemons/reaper/light_reaper.py +0 -255
  483. rucio/web/rest/flaskapi/v1/tmp_dids.py +0 -115
  484. rucio-32.8.6.data/data/rucio/requirements.txt +0 -55
  485. rucio-32.8.6.data/scripts/rucio-light-reaper +0 -53
  486. rucio-32.8.6.dist-info/METADATA +0 -83
  487. rucio-32.8.6.dist-info/RECORD +0 -481
  488. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/alembic.ini.template +0 -0
  489. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
  490. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
  491. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
  492. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  493. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
  494. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  495. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
  496. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  497. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
  498. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
  499. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
  500. {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
  501. {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/licenses/LICENSE +0 -0
  502. {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, try_stream, \
28
- response_headers, generate_http_error_flask, ErrorHandlingMethodView
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 destinaion RSE.
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 occured.
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 transfered.
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 transfered at value.
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 hostorical request for a given DID to a destination RSE.
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 occured.
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 transfered.
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 transfered at value.
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 Historic Requests
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. Seperated by the new line character.
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 occured.
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 transfered.
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 transfered at value.
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. Seperated by a new line character.
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 occured.
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 transfered.
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 transfered at value.
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, request, jsonify
19
-
20
- from rucio.api.account_limit import get_rse_account_usage
21
- from rucio.api.rse import add_rse, update_rse, list_rses, del_rse, add_rse_attribute, list_rse_attributes, \
22
- del_rse_attribute, add_protocol, get_rse_protocols, del_protocols, update_protocols, get_rse, set_rse_usage, \
23
- get_rse_usage, list_rse_usage_history, set_rse_limits, get_rse_limits, delete_rse_limits, parse_rse_expression, \
24
- add_distance, get_distance, update_distance, delete_distance, list_qos_policies, add_qos_policy, delete_qos_policy
25
- from rucio.common.exception import Duplicate, AccessDenied, RSENotFound, RSEOperationNotSupported, \
26
- RSEProtocolNotSupported, InvalidObject, RSEProtocolDomainNotSupported, RSEProtocolPriorityError, \
27
- InvalidRSEExpression, RSEAttributeNotFound, CounterNotFound, InvalidPath, ReplicaNotFound, InputValidationError
28
- from rucio.common.utils import Availability, render_json, APIEncoder
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 response_headers, check_accept_header_wrapper_flask, \
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
- latitute:
209
- description: The latitute of the RSE.
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
- latitute:
350
- description: The latitute of the RSE.
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
- latitute:
444
- description: The latitute of the RSE.
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 Protocal Doman, RSE Protocol not supported
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 protoco for read-vs-writes.
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 Protocl Domain not supported
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 attibutes.
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 betweeen source and destination.
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
- porperties:
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, request, Response
20
-
21
- from rucio.api.lock import get_replica_locks_for_rule_id
22
- from rucio.api.rule import add_replication_rule, delete_replication_rule, get_replication_rule, \
23
- update_replication_rule, reduce_replication_rule, list_replication_rule_history, \
24
- list_replication_rule_full_history, list_replication_rules, examine_replication_rule, move_replication_rule
25
- from rucio.common.exception import InputValidationError, InsufficientAccountLimit, RuleNotFound, AccessDenied, InvalidRSEExpression, \
26
- InvalidReplicationRule, DataIdentifierNotFound, InsufficientTargetRSEs, ReplicationRuleCreationTemporaryFailed, \
27
- InvalidRuleWeight, StagingAreaRuleRequiresLifetime, DuplicateRule, InvalidObject, AccountNotFound, \
28
- RuleReplaceFailed, ScratchDiskLifetimeConflict, ManualRuleApprovalBlocked, UnsupportedOperation
29
- from rucio.common.utils import render_json, APIEncoder
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, try_stream, \
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: string
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 transfered lock.
796
+ description: The rse_id of the transferred lock.
767
797
  rse:
768
798
  type: object
769
- description: Information about the rse of the transfered lock.
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 occured.
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, request, jsonify
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, response_headers, \
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):