infrahub-server 1.1.9__py3-none-any.whl → 1.2.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.
Files changed (467) hide show
  1. infrahub/api/artifact.py +16 -4
  2. infrahub/api/dependencies.py +14 -6
  3. infrahub/api/diff/validation_models.py +7 -7
  4. infrahub/api/oauth2.py +0 -1
  5. infrahub/api/oidc.py +0 -1
  6. infrahub/api/query.py +18 -7
  7. infrahub/api/schema.py +33 -7
  8. infrahub/api/transformation.py +12 -5
  9. infrahub/{message_bus/messages/check_artifact_create.py → artifacts/models.py} +6 -6
  10. infrahub/{message_bus/operations/check/artifact.py → artifacts/tasks.py} +27 -28
  11. infrahub/cli/__init__.py +12 -10
  12. infrahub/cli/constants.py +3 -0
  13. infrahub/cli/db.py +166 -185
  14. infrahub/cli/events.py +8 -3
  15. infrahub/cli/git_agent.py +9 -7
  16. infrahub/cli/tasks.py +4 -6
  17. infrahub/cli/upgrade.py +146 -0
  18. infrahub/computed_attribute/gather.py +174 -0
  19. infrahub/computed_attribute/models.py +202 -11
  20. infrahub/computed_attribute/tasks.py +103 -421
  21. infrahub/computed_attribute/triggers.py +56 -0
  22. infrahub/config.py +33 -33
  23. infrahub/context.py +53 -0
  24. infrahub/core/account.py +9 -12
  25. infrahub/core/attribute.py +104 -75
  26. infrahub/core/branch/models.py +4 -4
  27. infrahub/core/branch/tasks.py +133 -125
  28. infrahub/core/changelog/__init__.py +0 -0
  29. infrahub/core/changelog/diff.py +291 -0
  30. infrahub/core/changelog/models.py +662 -0
  31. infrahub/core/constants/__init__.py +47 -2
  32. infrahub/core/constants/infrahubkind.py +3 -0
  33. infrahub/core/constants/schema.py +2 -0
  34. infrahub/core/constraint/node/runner.py +2 -2
  35. infrahub/core/diff/branch_differ.py +10 -10
  36. infrahub/core/diff/combiner.py +1 -1
  37. infrahub/core/diff/enricher/cardinality_one.py +1 -1
  38. infrahub/core/diff/enricher/hierarchy.py +5 -3
  39. infrahub/core/diff/enricher/labels.py +1 -1
  40. infrahub/core/diff/enricher/path_identifier.py +1 -2
  41. infrahub/core/diff/enricher/summary_counts.py +107 -0
  42. infrahub/core/diff/ipam_diff_parser.py +4 -5
  43. infrahub/core/diff/merger/merger.py +3 -1
  44. infrahub/core/diff/model/diff.py +27 -27
  45. infrahub/core/diff/model/path.py +13 -13
  46. infrahub/core/diff/query/all_conflicts.py +1 -1
  47. infrahub/core/diff/query/artifact.py +1 -1
  48. infrahub/core/diff/query/delete_query.py +1 -1
  49. infrahub/core/diff/query/diff_get.py +1 -1
  50. infrahub/core/diff/query/diff_summary.py +1 -1
  51. infrahub/core/diff/query/field_specifiers.py +1 -1
  52. infrahub/core/diff/query/field_summary.py +1 -1
  53. infrahub/core/diff/query/filters.py +2 -2
  54. infrahub/core/diff/query/get_conflict_query.py +1 -1
  55. infrahub/core/diff/query/has_conflicts_query.py +1 -1
  56. infrahub/core/diff/query/merge.py +3 -3
  57. infrahub/core/diff/query/merge_tracking_id.py +1 -1
  58. infrahub/core/diff/query/roots_metadata.py +1 -1
  59. infrahub/core/diff/query/save.py +3 -3
  60. infrahub/core/diff/query/summary_counts_enricher.py +2 -2
  61. infrahub/core/diff/query/time_range_query.py +1 -1
  62. infrahub/core/diff/query/update_conflict_query.py +1 -1
  63. infrahub/core/diff/query_parser.py +4 -4
  64. infrahub/core/diff/repository/deserializer.py +1 -1
  65. infrahub/core/diff/tasks.py +9 -8
  66. infrahub/core/enums.py +1 -1
  67. infrahub/core/initialization.py +1 -10
  68. infrahub/core/integrity/object_conflict/conflict_recorder.py +1 -1
  69. infrahub/core/ipam/constants.py +3 -4
  70. infrahub/core/ipam/reconciler.py +13 -13
  71. infrahub/core/ipam/tasks.py +2 -3
  72. infrahub/core/ipam/utilization.py +10 -13
  73. infrahub/core/manager.py +52 -47
  74. infrahub/core/merge.py +12 -9
  75. infrahub/core/migrations/__init__.py +1 -3
  76. infrahub/core/migrations/graph/__init__.py +5 -3
  77. infrahub/core/migrations/graph/m001_add_version_to_graph.py +1 -1
  78. infrahub/core/migrations/graph/m002_attribute_is_default.py +2 -2
  79. infrahub/core/migrations/graph/m003_relationship_parent_optional.py +2 -2
  80. infrahub/core/migrations/graph/m004_add_attr_documentation.py +1 -1
  81. infrahub/core/migrations/graph/m005_add_rel_read_only.py +1 -1
  82. infrahub/core/migrations/graph/m006_add_rel_on_delete.py +1 -1
  83. infrahub/core/migrations/graph/m007_add_rel_allow_override.py +1 -1
  84. infrahub/core/migrations/graph/m008_add_human_friendly_id.py +1 -1
  85. infrahub/core/migrations/graph/m009_add_generate_profile_attr.py +1 -1
  86. infrahub/core/migrations/graph/m010_add_generate_profile_attr_generic.py +1 -1
  87. infrahub/core/migrations/graph/m011_remove_profile_relationship_schema.py +2 -2
  88. infrahub/core/migrations/graph/m012_convert_account_generic.py +12 -23
  89. infrahub/core/migrations/graph/m013_convert_git_password_credential.py +7 -11
  90. infrahub/core/migrations/graph/m014_remove_index_attr_value.py +2 -2
  91. infrahub/core/migrations/graph/m015_diff_format_update.py +1 -1
  92. infrahub/core/migrations/graph/m016_diff_delete_bug_fix.py +1 -1
  93. infrahub/core/migrations/graph/m017_add_core_profile.py +2 -6
  94. infrahub/core/migrations/graph/m018_uniqueness_nulls.py +3 -3
  95. infrahub/core/migrations/graph/m019_restore_rels_to_time.py +4 -4
  96. infrahub/core/migrations/graph/m020_duplicate_edges.py +3 -3
  97. infrahub/core/migrations/graph/m021_missing_hierarchy_merge.py +2 -2
  98. infrahub/core/migrations/graph/m022_add_generate_template_attr.py +48 -0
  99. infrahub/core/migrations/query/attribute_add.py +3 -3
  100. infrahub/core/migrations/query/attribute_rename.py +1 -1
  101. infrahub/core/migrations/query/delete_element_in_schema.py +1 -1
  102. infrahub/core/migrations/query/node_duplicate.py +1 -1
  103. infrahub/core/migrations/query/relationship_duplicate.py +1 -1
  104. infrahub/core/migrations/query/schema_attribute_update.py +3 -3
  105. infrahub/core/migrations/schema/models.py +19 -4
  106. infrahub/core/migrations/schema/node_attribute_remove.py +1 -1
  107. infrahub/core/migrations/schema/node_remove.py +1 -1
  108. infrahub/core/migrations/schema/tasks.py +7 -7
  109. infrahub/core/migrations/shared.py +10 -12
  110. infrahub/core/models.py +13 -14
  111. infrahub/core/node/__init__.py +172 -57
  112. infrahub/core/node/base.py +3 -5
  113. infrahub/core/node/constraints/attribute_uniqueness.py +2 -2
  114. infrahub/core/node/constraints/grouped_uniqueness.py +5 -5
  115. infrahub/core/node/constraints/interface.py +1 -2
  116. infrahub/core/node/delete_validator.py +7 -9
  117. infrahub/core/node/ipam.py +10 -10
  118. infrahub/core/node/permissions.py +7 -7
  119. infrahub/core/node/resource_manager/ip_address_pool.py +6 -6
  120. infrahub/core/node/resource_manager/ip_prefix_pool.py +14 -11
  121. infrahub/core/node/resource_manager/number_pool.py +3 -3
  122. infrahub/core/node/standard.py +3 -5
  123. infrahub/core/path.py +12 -12
  124. infrahub/core/property.py +12 -12
  125. infrahub/core/protocols.py +11 -0
  126. infrahub/core/protocols_base.py +25 -23
  127. infrahub/core/query/__init__.py +35 -38
  128. infrahub/core/query/attribute.py +13 -13
  129. infrahub/core/query/branch.py +5 -5
  130. infrahub/core/query/delete.py +1 -1
  131. infrahub/core/query/diff.py +7 -7
  132. infrahub/core/query/ipam.py +4 -4
  133. infrahub/core/query/node.py +23 -24
  134. infrahub/core/query/relationship.py +143 -46
  135. infrahub/core/query/resource_manager.py +10 -10
  136. infrahub/core/query/standard_node.py +9 -9
  137. infrahub/core/query/subquery.py +9 -9
  138. infrahub/core/query/task.py +3 -3
  139. infrahub/core/query/task_log.py +1 -1
  140. infrahub/core/query/utils.py +5 -5
  141. infrahub/core/registry.py +13 -17
  142. infrahub/core/relationship/constraints/count.py +4 -5
  143. infrahub/core/relationship/constraints/peer_kind.py +4 -5
  144. infrahub/core/relationship/constraints/profiles_kind.py +2 -2
  145. infrahub/core/relationship/model.py +103 -67
  146. infrahub/core/schema/__init__.py +6 -4
  147. infrahub/core/schema/attribute_schema.py +16 -8
  148. infrahub/core/schema/basenode_schema.py +38 -26
  149. infrahub/core/schema/computed_attribute.py +3 -3
  150. infrahub/core/schema/definitions/core/__init__.py +147 -0
  151. infrahub/core/schema/definitions/core/account.py +171 -0
  152. infrahub/core/schema/definitions/core/artifact.py +136 -0
  153. infrahub/core/schema/definitions/core/builtin.py +24 -0
  154. infrahub/core/schema/definitions/core/check.py +68 -0
  155. infrahub/core/schema/definitions/core/core.py +17 -0
  156. infrahub/core/schema/definitions/core/generator.py +100 -0
  157. infrahub/core/schema/definitions/core/graphql_query.py +79 -0
  158. infrahub/core/schema/definitions/core/group.py +108 -0
  159. infrahub/core/schema/definitions/core/ipam.py +193 -0
  160. infrahub/core/schema/definitions/core/lineage.py +19 -0
  161. infrahub/core/schema/definitions/core/menu.py +48 -0
  162. infrahub/core/schema/definitions/core/permission.py +163 -0
  163. infrahub/core/schema/definitions/core/profile.py +18 -0
  164. infrahub/core/schema/definitions/core/propose_change.py +97 -0
  165. infrahub/core/schema/definitions/core/propose_change_comment.py +193 -0
  166. infrahub/core/schema/definitions/core/propose_change_validator.py +328 -0
  167. infrahub/core/schema/definitions/core/repository.py +286 -0
  168. infrahub/core/schema/definitions/core/resource_pool.py +170 -0
  169. infrahub/core/schema/definitions/core/template.py +27 -0
  170. infrahub/core/schema/definitions/core/transform.py +96 -0
  171. infrahub/core/schema/definitions/core/webhook.py +134 -0
  172. infrahub/core/schema/definitions/internal.py +32 -16
  173. infrahub/core/schema/dropdown.py +3 -4
  174. infrahub/core/schema/generated/attribute_schema.py +15 -18
  175. infrahub/core/schema/generated/base_node_schema.py +12 -14
  176. infrahub/core/schema/generated/genericnode_schema.py +5 -0
  177. infrahub/core/schema/generated/node_schema.py +8 -5
  178. infrahub/core/schema/generated/relationship_schema.py +9 -11
  179. infrahub/core/schema/generic_schema.py +6 -2
  180. infrahub/core/schema/manager.py +46 -43
  181. infrahub/core/schema/node_schema.py +6 -2
  182. infrahub/core/schema/profile_schema.py +4 -0
  183. infrahub/core/schema/relationship_schema.py +15 -7
  184. infrahub/core/schema/schema_branch.py +423 -89
  185. infrahub/core/schema/schema_branch_computed.py +41 -4
  186. infrahub/core/schema/template_schema.py +36 -0
  187. infrahub/core/task/task.py +3 -3
  188. infrahub/core/task/user_task.py +21 -19
  189. infrahub/core/timestamp.py +3 -3
  190. infrahub/core/utils.py +12 -12
  191. infrahub/core/validators/__init__.py +1 -3
  192. infrahub/core/validators/aggregated_checker.py +2 -2
  193. infrahub/core/validators/attribute/choices.py +3 -3
  194. infrahub/core/validators/attribute/enum.py +3 -3
  195. infrahub/core/validators/attribute/kind.py +3 -3
  196. infrahub/core/validators/attribute/length.py +3 -3
  197. infrahub/core/validators/attribute/optional.py +3 -3
  198. infrahub/core/validators/attribute/regex.py +3 -3
  199. infrahub/core/validators/attribute/unique.py +3 -3
  200. infrahub/core/validators/checks_runner.py +60 -0
  201. infrahub/core/validators/determiner.py +1 -3
  202. infrahub/core/validators/model.py +1 -3
  203. infrahub/core/validators/models/validate_migration.py +17 -4
  204. infrahub/core/validators/node/attribute.py +2 -2
  205. infrahub/core/validators/node/generate_profile.py +3 -3
  206. infrahub/core/validators/node/hierarchy.py +3 -3
  207. infrahub/core/validators/node/inherit_from.py +2 -2
  208. infrahub/core/validators/node/relationship.py +2 -2
  209. infrahub/core/validators/query.py +1 -1
  210. infrahub/core/validators/relationship/count.py +5 -5
  211. infrahub/core/validators/relationship/optional.py +3 -3
  212. infrahub/core/validators/relationship/peer.py +3 -3
  213. infrahub/core/validators/shared.py +2 -2
  214. infrahub/core/validators/tasks.py +8 -6
  215. infrahub/core/validators/uniqueness/checker.py +5 -6
  216. infrahub/core/validators/uniqueness/index.py +2 -2
  217. infrahub/core/validators/uniqueness/model.py +11 -11
  218. infrahub/core/validators/uniqueness/query.py +1 -1
  219. infrahub/database/__init__.py +19 -23
  220. infrahub/database/memgraph.py +1 -1
  221. infrahub/dependencies/builder/diff/combiner.py +1 -1
  222. infrahub/dependencies/builder/diff/conflicts_enricher.py +1 -1
  223. infrahub/dependencies/builder/diff/deserializer.py +1 -1
  224. infrahub/dependencies/builder/diff/enricher/summary_counts.py +8 -0
  225. infrahub/dependencies/builder/diff/parent_node_adder.py +1 -1
  226. infrahub/dependencies/component/registry.py +2 -2
  227. infrahub/events/__init__.py +25 -2
  228. infrahub/events/artifact_action.py +64 -0
  229. infrahub/events/branch_action.py +57 -20
  230. infrahub/events/generator.py +71 -0
  231. infrahub/events/group_action.py +103 -0
  232. infrahub/events/models.py +160 -53
  233. infrahub/events/node_action.py +140 -23
  234. infrahub/events/repository_action.py +7 -20
  235. infrahub/events/schema_action.py +18 -10
  236. infrahub/events/utils.py +16 -0
  237. infrahub/events/validator_action.py +55 -0
  238. infrahub/exceptions.py +12 -3
  239. infrahub/generators/models.py +2 -3
  240. infrahub/generators/tasks.py +34 -15
  241. infrahub/git/base.py +10 -12
  242. infrahub/git/constants.py +0 -1
  243. infrahub/git/integrator.py +82 -57
  244. infrahub/git/models.py +101 -9
  245. infrahub/git/repository.py +9 -10
  246. infrahub/git/tasks.py +450 -112
  247. infrahub/git/utils.py +48 -0
  248. infrahub/git/worktree.py +1 -2
  249. infrahub/git_credential/askpass.py +1 -2
  250. infrahub/git_credential/helper.py +2 -3
  251. infrahub/graphql/analyzer.py +572 -11
  252. infrahub/graphql/app.py +47 -41
  253. infrahub/graphql/auth/query_permission_checker/anonymous_checker.py +5 -5
  254. infrahub/graphql/auth/query_permission_checker/default_branch_checker.py +4 -4
  255. infrahub/graphql/auth/query_permission_checker/merge_operation_checker.py +4 -4
  256. infrahub/graphql/auth/query_permission_checker/object_permission_checker.py +28 -35
  257. infrahub/graphql/auth/query_permission_checker/super_admin_checker.py +5 -5
  258. infrahub/graphql/context.py +39 -0
  259. infrahub/graphql/enums.py +1 -1
  260. infrahub/graphql/initialization.py +5 -1
  261. infrahub/graphql/loaders/node.py +1 -1
  262. infrahub/graphql/loaders/shared.py +1 -1
  263. infrahub/graphql/manager.py +75 -72
  264. infrahub/graphql/mutations/account.py +20 -13
  265. infrahub/graphql/mutations/artifact_definition.py +18 -14
  266. infrahub/graphql/mutations/branch.py +86 -40
  267. infrahub/graphql/mutations/computed_attribute.py +26 -18
  268. infrahub/graphql/mutations/diff.py +17 -8
  269. infrahub/graphql/mutations/diff_conflict.py +14 -8
  270. infrahub/graphql/mutations/generator.py +83 -0
  271. infrahub/graphql/mutations/graphql_query.py +21 -13
  272. infrahub/graphql/mutations/ipam.py +41 -39
  273. infrahub/graphql/mutations/main.py +226 -66
  274. infrahub/graphql/mutations/menu.py +12 -12
  275. infrahub/graphql/mutations/models.py +2 -4
  276. infrahub/graphql/mutations/node_getter/by_default_filter.py +1 -3
  277. infrahub/graphql/mutations/node_getter/by_hfid.py +1 -3
  278. infrahub/graphql/mutations/node_getter/by_id.py +1 -3
  279. infrahub/graphql/mutations/node_getter/interface.py +1 -2
  280. infrahub/graphql/mutations/proposed_change.py +39 -31
  281. infrahub/graphql/mutations/relationship.py +372 -129
  282. infrahub/graphql/mutations/repository.py +46 -40
  283. infrahub/graphql/mutations/resource_manager.py +26 -26
  284. infrahub/graphql/mutations/schema.py +70 -37
  285. infrahub/graphql/mutations/tasks.py +10 -7
  286. infrahub/graphql/mutations/webhook.py +137 -0
  287. infrahub/graphql/parser.py +5 -5
  288. infrahub/graphql/permissions.py +3 -10
  289. infrahub/graphql/queries/account.py +22 -18
  290. infrahub/graphql/queries/branch.py +6 -4
  291. infrahub/graphql/queries/diff/tree.py +67 -56
  292. infrahub/graphql/queries/event.py +115 -0
  293. infrahub/graphql/queries/internal.py +3 -3
  294. infrahub/graphql/queries/ipam.py +25 -20
  295. infrahub/graphql/queries/relationship.py +13 -12
  296. infrahub/graphql/queries/resource_manager.py +37 -25
  297. infrahub/graphql/queries/search.py +11 -10
  298. infrahub/graphql/queries/status.py +12 -9
  299. infrahub/graphql/queries/task.py +11 -9
  300. infrahub/graphql/resolvers/many_relationship.py +15 -15
  301. infrahub/graphql/resolvers/resolver.py +58 -37
  302. infrahub/graphql/resolvers/single_relationship.py +16 -10
  303. infrahub/graphql/schema.py +4 -0
  304. infrahub/graphql/subscription/__init__.py +1 -1
  305. infrahub/graphql/subscription/events.py +1 -1
  306. infrahub/graphql/subscription/graphql_query.py +8 -8
  307. infrahub/graphql/types/branch.py +2 -2
  308. infrahub/graphql/types/common.py +6 -1
  309. infrahub/graphql/types/context.py +12 -0
  310. infrahub/graphql/types/enums.py +2 -0
  311. infrahub/graphql/types/event.py +167 -0
  312. infrahub/graphql/types/interface.py +2 -2
  313. infrahub/graphql/types/node.py +5 -5
  314. infrahub/graphql/types/permission.py +2 -2
  315. infrahub/graphql/types/relationship.py +3 -3
  316. infrahub/graphql/types/standard_node.py +9 -11
  317. infrahub/graphql/utils.py +30 -184
  318. infrahub/groups/ancestors.py +29 -0
  319. infrahub/groups/parsers.py +107 -0
  320. infrahub/groups/tasks.py +2 -3
  321. infrahub/lock.py +21 -21
  322. infrahub/menu/generator.py +7 -8
  323. infrahub/menu/menu.py +107 -139
  324. infrahub/menu/models.py +121 -20
  325. infrahub/menu/repository.py +111 -0
  326. infrahub/menu/utils.py +5 -8
  327. infrahub/message_bus/__init__.py +11 -13
  328. infrahub/message_bus/messages/__init__.py +1 -25
  329. infrahub/message_bus/messages/check_generator_run.py +3 -3
  330. infrahub/message_bus/messages/event_branch_merge.py +3 -0
  331. infrahub/message_bus/messages/finalize_validator_execution.py +3 -0
  332. infrahub/message_bus/messages/proposed_change/request_proposedchange_refreshartifacts.py +6 -0
  333. infrahub/message_bus/messages/request_generatordefinition_check.py +2 -0
  334. infrahub/message_bus/messages/request_proposedchange_pipeline.py +2 -0
  335. infrahub/message_bus/messages/send_echo_request.py +1 -1
  336. infrahub/message_bus/operations/__init__.py +4 -15
  337. infrahub/message_bus/operations/check/__init__.py +2 -2
  338. infrahub/message_bus/operations/check/generator.py +2 -3
  339. infrahub/message_bus/operations/event/__init__.py +2 -2
  340. infrahub/message_bus/operations/event/branch.py +7 -3
  341. infrahub/message_bus/operations/event/worker.py +0 -3
  342. infrahub/message_bus/operations/finalize/validator.py +52 -2
  343. infrahub/message_bus/operations/git/file.py +2 -2
  344. infrahub/message_bus/operations/git/repository.py +1 -1
  345. infrahub/message_bus/operations/requests/__init__.py +0 -4
  346. infrahub/message_bus/operations/requests/generator_definition.py +22 -24
  347. infrahub/message_bus/operations/requests/proposed_change.py +39 -20
  348. infrahub/message_bus/operations/send/echo.py +1 -1
  349. infrahub/message_bus/types.py +1 -1
  350. infrahub/permissions/globals.py +15 -0
  351. infrahub/pools/number.py +2 -4
  352. infrahub/pools/prefix.py +29 -165
  353. infrahub/prefect_server/__init__.py +0 -0
  354. infrahub/prefect_server/app.py +18 -0
  355. infrahub/prefect_server/database.py +20 -0
  356. infrahub/prefect_server/events.py +28 -0
  357. infrahub/prefect_server/models.py +46 -0
  358. infrahub/proposed_change/models.py +18 -1
  359. infrahub/proposed_change/tasks.py +204 -53
  360. infrahub/pytest_plugin.py +13 -10
  361. infrahub/server.py +13 -12
  362. infrahub/services/__init__.py +148 -63
  363. infrahub/services/adapters/cache/__init__.py +11 -11
  364. infrahub/services/adapters/cache/nats.py +42 -25
  365. infrahub/services/adapters/cache/redis.py +3 -11
  366. infrahub/services/adapters/event/__init__.py +11 -19
  367. infrahub/services/adapters/http/__init__.py +0 -5
  368. infrahub/services/adapters/http/httpx.py +22 -15
  369. infrahub/services/adapters/message_bus/__init__.py +25 -8
  370. infrahub/services/adapters/message_bus/local.py +9 -7
  371. infrahub/services/adapters/message_bus/nats.py +14 -8
  372. infrahub/services/adapters/message_bus/rabbitmq.py +23 -10
  373. infrahub/services/adapters/workflow/__init__.py +11 -8
  374. infrahub/services/adapters/workflow/local.py +27 -6
  375. infrahub/services/adapters/workflow/worker.py +23 -7
  376. infrahub/services/component.py +43 -40
  377. infrahub/services/protocols.py +7 -7
  378. infrahub/services/scheduler.py +30 -29
  379. infrahub/storage.py +2 -4
  380. infrahub/task_manager/constants.py +1 -1
  381. infrahub/task_manager/event.py +275 -0
  382. infrahub/task_manager/models.py +147 -3
  383. infrahub/task_manager/task.py +1 -1
  384. infrahub/tasks/artifact.py +20 -21
  385. infrahub/tasks/registry.py +1 -1
  386. infrahub/telemetry/__init__.py +0 -0
  387. infrahub/telemetry/constants.py +9 -0
  388. infrahub/telemetry/database.py +86 -0
  389. infrahub/telemetry/models.py +65 -0
  390. infrahub/telemetry/task_manager.py +77 -0
  391. infrahub/telemetry/tasks.py +119 -0
  392. infrahub/telemetry/utils.py +11 -0
  393. infrahub/transformations/tasks.py +5 -7
  394. infrahub/trigger/__init__.py +0 -0
  395. infrahub/trigger/catalogue.py +13 -0
  396. infrahub/trigger/constants.py +1 -0
  397. infrahub/trigger/models.py +118 -0
  398. infrahub/trigger/setup.py +90 -0
  399. infrahub/trigger/tasks.py +36 -0
  400. infrahub/types.py +1 -1
  401. infrahub/utils.py +12 -2
  402. infrahub/validators/__init__.py +0 -0
  403. infrahub/validators/events.py +42 -0
  404. infrahub/validators/tasks.py +41 -0
  405. infrahub/webhook/gather.py +17 -0
  406. infrahub/webhook/models.py +180 -42
  407. infrahub/webhook/tasks.py +149 -203
  408. infrahub/webhook/triggers.py +44 -0
  409. infrahub/workers/infrahub_async.py +38 -27
  410. infrahub/workers/utils.py +63 -0
  411. infrahub/workflows/catalogue.py +98 -71
  412. infrahub/workflows/initialization.py +12 -8
  413. infrahub/workflows/models.py +29 -5
  414. infrahub/workflows/utils.py +11 -2
  415. infrahub_sdk/client.py +19 -0
  416. infrahub_sdk/context.py +13 -0
  417. infrahub_sdk/ctl/branch.py +3 -2
  418. infrahub_sdk/ctl/utils.py +0 -16
  419. infrahub_sdk/exceptions.py +6 -0
  420. infrahub_sdk/generator.py +3 -0
  421. infrahub_sdk/graphql.py +45 -13
  422. infrahub_sdk/node.py +66 -20
  423. infrahub_sdk/protocols.py +21 -8
  424. infrahub_sdk/protocols_base.py +32 -11
  425. infrahub_sdk/schema/__init__.py +14 -2
  426. infrahub_sdk/schema/main.py +7 -0
  427. infrahub_sdk/task/__init__.py +11 -0
  428. infrahub_sdk/task/constants.py +3 -0
  429. infrahub_sdk/task/exceptions.py +25 -0
  430. infrahub_sdk/task/manager.py +551 -0
  431. infrahub_sdk/task/models.py +74 -0
  432. infrahub_sdk/timestamp.py +142 -33
  433. infrahub_sdk/utils.py +29 -1
  434. {infrahub_server-1.1.9.dist-info → infrahub_server-1.2.0.dist-info}/METADATA +8 -6
  435. infrahub_server-1.2.0.dist-info/RECORD +746 -0
  436. infrahub_testcontainers/container.py +5 -6
  437. infrahub_testcontainers/docker-compose.test.yml +2 -2
  438. infrahub_testcontainers/helpers.py +5 -1
  439. infrahub/core/branch/constants.py +0 -2
  440. infrahub/core/schema/definitions/core.py +0 -2275
  441. infrahub/graphql/query.py +0 -52
  442. infrahub/message_bus/messages/check_repository_checkdefinition.py +0 -20
  443. infrahub/message_bus/messages/check_repository_mergeconflicts.py +0 -16
  444. infrahub/message_bus/messages/check_repository_usercheck.py +0 -26
  445. infrahub/message_bus/messages/event_branch_create.py +0 -11
  446. infrahub/message_bus/messages/event_branch_delete.py +0 -11
  447. infrahub/message_bus/messages/event_branch_rebased.py +0 -9
  448. infrahub/message_bus/messages/event_node_mutated.py +0 -15
  449. infrahub/message_bus/messages/event_schema_update.py +0 -9
  450. infrahub/message_bus/messages/request_artifactdefinition_check.py +0 -17
  451. infrahub/message_bus/messages/request_repository_checks.py +0 -12
  452. infrahub/message_bus/messages/request_repository_userchecks.py +0 -18
  453. infrahub/message_bus/operations/check/repository.py +0 -293
  454. infrahub/message_bus/operations/event/node.py +0 -20
  455. infrahub/message_bus/operations/event/schema.py +0 -17
  456. infrahub/message_bus/operations/requests/artifact_definition.py +0 -148
  457. infrahub/message_bus/operations/requests/repository.py +0 -133
  458. infrahub/schema/constants.py +0 -1
  459. infrahub/schema/tasks.py +0 -76
  460. infrahub/services/adapters/database/__init__.py +0 -9
  461. infrahub/tasks/telemetry.py +0 -127
  462. infrahub/webhook/constants.py +0 -3
  463. infrahub_server-1.1.9.dist-info/RECORD +0 -688
  464. /infrahub/{schema → artifacts}/__init__.py +0 -0
  465. {infrahub_server-1.1.9.dist-info → infrahub_server-1.2.0.dist-info}/LICENSE.txt +0 -0
  466. {infrahub_server-1.1.9.dist-info → infrahub_server-1.2.0.dist-info}/WHEEL +0 -0
  467. {infrahub_server-1.1.9.dist-info → infrahub_server-1.2.0.dist-info}/entry_points.txt +0 -0
@@ -1,148 +0,0 @@
1
- from typing import Optional
2
-
3
- from infrahub_sdk.uuidt import UUIDT
4
- from prefect import flow
5
- from prefect.logging import get_run_logger
6
-
7
- from infrahub.core.constants import InfrahubKind, ValidatorConclusion, ValidatorState
8
- from infrahub.core.timestamp import Timestamp
9
- from infrahub.message_bus import InfrahubMessage, Meta, messages
10
- from infrahub.message_bus.types import KVTTL
11
- from infrahub.services import InfrahubServices
12
- from infrahub.workflows.utils import add_tags
13
-
14
-
15
- @flow(
16
- name="artifact-definition-check",
17
- flow_run_name="Validating generation of artifacts for {message.artifact_definition.definition_name}",
18
- )
19
- async def check(message: messages.RequestArtifactDefinitionCheck, service: InfrahubServices) -> None:
20
- events: list[InfrahubMessage] = []
21
- await add_tags(branches=[message.source_branch], nodes=[message.proposed_change], db_change=True)
22
-
23
- log = get_run_logger()
24
- artifact_definition = await service.client.get(
25
- kind=InfrahubKind.ARTIFACTDEFINITION,
26
- id=message.artifact_definition.definition_id,
27
- branch=message.source_branch,
28
- )
29
- proposed_change = await service.client.get(kind=InfrahubKind.PROPOSEDCHANGE, id=message.proposed_change)
30
-
31
- validator_name = f"Artifact Validator: {message.artifact_definition.definition_name}"
32
- validator_execution_id = str(UUIDT())
33
- check_execution_ids: list[str] = []
34
-
35
- await proposed_change.validations.fetch()
36
-
37
- validator = None
38
- for relationship in proposed_change.validations.peers:
39
- existing_validator = relationship.peer
40
- if (
41
- existing_validator.typename == InfrahubKind.ARTIFACTVALIDATOR
42
- and existing_validator.definition.id == message.artifact_definition.definition_id
43
- ):
44
- validator = existing_validator
45
-
46
- if validator:
47
- validator.conclusion.value = ValidatorConclusion.UNKNOWN.value
48
- validator.state.value = ValidatorState.QUEUED.value
49
- validator.started_at.value = ""
50
- validator.completed_at.value = ""
51
- await validator.save()
52
- else:
53
- validator = await service.client.create(
54
- kind=InfrahubKind.ARTIFACTVALIDATOR,
55
- data={
56
- "label": validator_name,
57
- "proposed_change": message.proposed_change,
58
- "definition": message.artifact_definition.definition_id,
59
- },
60
- )
61
- await validator.save()
62
-
63
- await artifact_definition.targets.fetch()
64
- group = artifact_definition.targets.peer
65
- await group.members.fetch()
66
-
67
- existing_artifacts = await service.client.filters(
68
- kind=InfrahubKind.ARTIFACT,
69
- definition__ids=[message.artifact_definition.definition_id],
70
- include=["object"],
71
- branch=message.source_branch,
72
- )
73
- artifacts_by_member = {}
74
- for artifact in existing_artifacts:
75
- artifacts_by_member[artifact.object.peer.id] = artifact.id
76
-
77
- repository = message.branch_diff.get_repository(repository_id=message.artifact_definition.repository_id)
78
- requested_artifacts = 0
79
- impacted_artifacts = message.branch_diff.get_subscribers_ids(kind=InfrahubKind.ARTIFACT)
80
- for relationship in group.members.peers:
81
- member = relationship.peer
82
- artifact_id = artifacts_by_member.get(member.id)
83
- if _render_artifact(
84
- artifact_id=artifact_id,
85
- managed_branch=message.source_branch_sync_with_git,
86
- impacted_artifacts=impacted_artifacts,
87
- ):
88
- check_execution_id = str(UUIDT())
89
- check_execution_ids.append(check_execution_id)
90
- requested_artifacts += 1
91
- log.info(f"Trigger Artifact processing for {member.display_label}")
92
- events.append(
93
- messages.CheckArtifactCreate(
94
- artifact_name=message.artifact_definition.artifact_name,
95
- artifact_id=artifact_id,
96
- artifact_definition=message.artifact_definition.definition_id,
97
- commit=repository.source_commit,
98
- content_type=message.artifact_definition.content_type,
99
- transform_type=message.artifact_definition.transform_kind,
100
- transform_location=message.artifact_definition.transform_location,
101
- repository_id=repository.repository_id,
102
- repository_name=repository.repository_name,
103
- repository_kind=repository.kind,
104
- branch_name=message.source_branch,
105
- query=message.artifact_definition.query_name,
106
- variables=member.extract(params=artifact_definition.parameters.value),
107
- target_id=member.id,
108
- target_name=member.display_label,
109
- timeout=message.artifact_definition.timeout,
110
- validator_id=validator.id,
111
- meta=Meta(validator_execution_id=validator_execution_id, check_execution_id=check_execution_id),
112
- )
113
- )
114
-
115
- checks_in_execution = ",".join(check_execution_ids)
116
- await service.cache.set(
117
- key=f"validator_execution_id:{validator_execution_id}:checks",
118
- value=checks_in_execution,
119
- expires=KVTTL.TWO_HOURS,
120
- )
121
- events.append(
122
- messages.FinalizeValidatorExecution(
123
- start_time=Timestamp().to_string(),
124
- validator_id=validator.id,
125
- validator_execution_id=validator_execution_id,
126
- validator_type=InfrahubKind.ARTIFACTVALIDATOR,
127
- )
128
- )
129
- for event in events:
130
- event.assign_meta(parent=message)
131
- await service.send(message=event)
132
-
133
-
134
- def _render_artifact(artifact_id: Optional[str], managed_branch: bool, impacted_artifacts: list[str]) -> bool: # pylint: disable=unused-argument
135
- """Returns a boolean to indicate if an artifact should be generated or not.
136
- Will return true if:
137
- * The artifact_id wasn't set which could be that it's a new object that doesn't have a previous artifact
138
- * The source brance is not data only which would indicate that it could contain updates in git to the transform
139
- * The artifact_id exists in the impacted_artifacts list
140
- Will return false if:
141
- * The source branch is a data only branch and the artifact_id exists and is not in the impacted list
142
- """
143
-
144
- # if not artifact_id or managed_branch:
145
- # return True
146
- # return artifact_id in impacted_artifacts
147
- # Temporary workaround tracked in https://github.com/opsmill/infrahub/issues/4991
148
- return True
@@ -1,133 +0,0 @@
1
- from infrahub_sdk.uuidt import UUIDT
2
- from prefect import flow
3
- from prefect.logging import get_run_logger
4
-
5
- from infrahub.core.constants import InfrahubKind
6
- from infrahub.core.timestamp import Timestamp
7
- from infrahub.message_bus import InfrahubMessage, messages
8
- from infrahub.message_bus.types import KVTTL
9
- from infrahub.services import InfrahubServices
10
- from infrahub.workflows.utils import add_tags
11
-
12
-
13
- @flow(name="repository-check", flow_run_name="Running repository checks for repository {message.repository}")
14
- async def checks(message: messages.RequestRepositoryChecks, service: InfrahubServices) -> None:
15
- """Request to start validation checks on a specific repository."""
16
- await add_tags(branches=[message.source_branch], nodes=[message.proposed_change])
17
- log = get_run_logger()
18
-
19
- events: list[InfrahubMessage] = []
20
-
21
- repository = await service.client.get(
22
- kind=InfrahubKind.GENERICREPOSITORY, id=message.repository, branch=message.source_branch
23
- )
24
- proposed_change = await service.client.get(kind=InfrahubKind.PROPOSEDCHANGE, id=message.proposed_change)
25
-
26
- validator_execution_id = str(UUIDT())
27
- check_execution_ids: list[str] = []
28
- await proposed_change.validations.fetch()
29
- await repository.checks.fetch()
30
-
31
- validator_name = f"Repository Validator: {repository.name.value}"
32
- validator = None
33
- for relationship in proposed_change.validations.peers:
34
- existing_validator = relationship.peer
35
-
36
- if (
37
- existing_validator.typename == InfrahubKind.REPOSITORYVALIDATOR
38
- and existing_validator.repository.id == message.repository
39
- ):
40
- validator = existing_validator
41
-
42
- if validator:
43
- validator.conclusion.value = "unknown"
44
- validator.state.value = "queued"
45
- validator.started_at.value = ""
46
- validator.completed_at.value = ""
47
- await validator.save()
48
- else:
49
- validator = await service.client.create(
50
- kind=InfrahubKind.REPOSITORYVALIDATOR,
51
- data={
52
- "label": validator_name,
53
- "proposed_change": message.proposed_change,
54
- "repository": message.repository,
55
- },
56
- )
57
- await validator.save()
58
-
59
- check_execution_id = str(UUIDT())
60
- check_execution_ids.append(check_execution_id)
61
- log.info("Adding check for merge conflict")
62
-
63
- events.append(
64
- messages.CheckRepositoryMergeConflicts(
65
- validator_id=validator.id,
66
- validator_execution_id=validator_execution_id,
67
- check_execution_id=check_execution_id,
68
- proposed_change=message.proposed_change,
69
- repository_id=message.repository,
70
- repository_name=repository.name.value,
71
- source_branch=message.source_branch,
72
- target_branch=message.target_branch,
73
- )
74
- )
75
-
76
- checks_in_execution = ",".join(check_execution_ids)
77
- log.info(f"Checks in execution {checks_in_execution}")
78
- await service.cache.set(
79
- key=f"validator_execution_id:{validator_execution_id}:checks",
80
- value=checks_in_execution,
81
- expires=KVTTL.TWO_HOURS,
82
- )
83
- events.append(
84
- messages.FinalizeValidatorExecution(
85
- start_time=Timestamp().to_string(),
86
- validator_id=validator.id,
87
- validator_execution_id=validator_execution_id,
88
- validator_type=InfrahubKind.REPOSITORYVALIDATOR,
89
- )
90
- )
91
-
92
- for event in events:
93
- event.assign_meta(parent=message)
94
- await service.send(message=event)
95
-
96
-
97
- @flow(
98
- name="repository-users-check",
99
- flow_run_name="Evaluating user-defined checks on repository {message.repository_name}",
100
- )
101
- async def user_checks(message: messages.RequestRepositoryUserChecks, service: InfrahubServices) -> None:
102
- """Request to start validation checks on a specific repository for User-defined checks."""
103
-
104
- await add_tags(branches=[message.source_branch], nodes=[message.proposed_change])
105
- log = get_run_logger()
106
-
107
- events: list[InfrahubMessage] = []
108
-
109
- repository = await service.client.get(
110
- kind=InfrahubKind.GENERICREPOSITORY, id=message.repository_id, branch=message.source_branch, fragment=True
111
- )
112
- await repository.checks.fetch()
113
-
114
- for relationship in repository.checks.peers:
115
- log.info("Adding check for user defined check")
116
- check_definition = relationship.peer
117
- events.append(
118
- messages.CheckRepositoryCheckDefinition(
119
- check_definition_id=check_definition.id,
120
- repository_id=repository.id,
121
- repository_name=repository.name.value,
122
- commit=repository.commit.value,
123
- file_path=check_definition.file_path.value,
124
- class_name=check_definition.class_name.value,
125
- branch_name=message.source_branch,
126
- proposed_change=message.proposed_change,
127
- branch_diff=message.branch_diff,
128
- )
129
- )
130
-
131
- for event in events:
132
- event.assign_meta(parent=message)
133
- await service.send(message=event)
@@ -1 +0,0 @@
1
- AUTOMATION_NAME = "Trigger-schema-update-event"
infrahub/schema/tasks.py DELETED
@@ -1,76 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from datetime import timedelta
4
-
5
- from prefect import flow
6
- from prefect.automations import AutomationCore
7
- from prefect.client.orchestration import get_client
8
- from prefect.client.schemas.filters import DeploymentFilter, DeploymentFilterName
9
- from prefect.events.actions import RunDeployment
10
- from prefect.events.schemas.automations import EventTrigger, Posture
11
- from prefect.logging import get_run_logger
12
-
13
- from infrahub.workflows.catalogue import COMPUTED_ATTRIBUTE_SETUP, COMPUTED_ATTRIBUTE_SETUP_PYTHON
14
-
15
- from .constants import AUTOMATION_NAME
16
-
17
-
18
- @flow(name="schema-updated-setup", flow_run_name="Setup schema updated event in task-manager")
19
- async def schema_updated_setup() -> None:
20
- log = get_run_logger()
21
-
22
- async with get_client(sync_client=False) as client:
23
- deployments = {
24
- item.name: item
25
- for item in await client.read_deployments(
26
- deployment_filter=DeploymentFilter(
27
- name=DeploymentFilterName(
28
- any_=[COMPUTED_ATTRIBUTE_SETUP.name, COMPUTED_ATTRIBUTE_SETUP_PYTHON.name]
29
- )
30
- )
31
- )
32
- }
33
- if COMPUTED_ATTRIBUTE_SETUP.name not in deployments:
34
- raise ValueError("Unable to find the deployment for PROCESS_COMPUTED_MACRO")
35
-
36
- deployment_id_computed_attribute_setup = deployments[COMPUTED_ATTRIBUTE_SETUP.name].id
37
- deployment_id_computed_attribute_setup_python = deployments[COMPUTED_ATTRIBUTE_SETUP_PYTHON.name].id
38
-
39
- schema_update_automation = await client.find_automation(id_or_name=AUTOMATION_NAME)
40
-
41
- automation = AutomationCore(
42
- name=AUTOMATION_NAME,
43
- description="Trigger actions on schema update event",
44
- enabled=True,
45
- trigger=EventTrigger(
46
- posture=Posture.Reactive,
47
- expect={"infrahub.schema.update"},
48
- within=timedelta(0),
49
- threshold=1,
50
- ),
51
- actions=[
52
- RunDeployment(
53
- source="selected",
54
- deployment_id=deployment_id_computed_attribute_setup,
55
- parameters={
56
- "branch_name": "{{ event.resource['infrahub.branch.name'] }}",
57
- },
58
- job_variables={},
59
- ),
60
- RunDeployment(
61
- source="selected",
62
- deployment_id=deployment_id_computed_attribute_setup_python,
63
- parameters={
64
- "branch_name": "{{ event.resource['infrahub.branch.name'] }}",
65
- },
66
- job_variables={},
67
- ),
68
- ],
69
- )
70
-
71
- if schema_update_automation:
72
- await client.update_automation(automation_id=schema_update_automation.id, automation=automation)
73
- log.info(f"{AUTOMATION_NAME} Updated")
74
- else:
75
- await client.create_automation(automation=automation)
76
- log.info(f"{AUTOMATION_NAME} Created")
@@ -1,9 +0,0 @@
1
- from neo4j import AsyncSession
2
-
3
-
4
- class InfrahubDatabase:
5
- """Base class for database access"""
6
-
7
- @property
8
- def session(self) -> AsyncSession:
9
- raise NotImplementedError()
@@ -1,127 +0,0 @@
1
- import hashlib
2
- import json
3
- import platform
4
- import time
5
- from typing import Any
6
-
7
- from prefect import flow, task
8
- from prefect.cache_policies import NONE
9
- from prefect.logging import get_run_logger
10
-
11
- from infrahub import __version__, config
12
- from infrahub.core import registry, utils
13
- from infrahub.core.branch import Branch
14
- from infrahub.core.constants import InfrahubKind
15
- from infrahub.core.graph.schema import GRAPH_SCHEMA
16
- from infrahub.services import InfrahubServices, services
17
-
18
- TELEMETRY_KIND: str = "community"
19
- TELEMETRY_VERSION: str = "20240524"
20
-
21
-
22
- @task(name="telemetry-gather-db", task_run_name="Gather Database Information", cache_policy=NONE)
23
- async def gather_database_information(service: InfrahubServices, branch: Branch) -> dict: # pylint: disable=unused-argument
24
- async with service.database.start_session() as db:
25
- data: dict[str, Any] = {
26
- "database_type": db.db_type.value,
27
- "relationship_count": {"total": await utils.count_relationships(db=db)},
28
- "node_count": {"total": await utils.count_nodes(db=db)},
29
- }
30
-
31
- for name in GRAPH_SCHEMA["relationships"]:
32
- data["relationship_count"][name] = await utils.count_relationships(db=db, label=name)
33
-
34
- for name in GRAPH_SCHEMA["nodes"]:
35
- data["node_count"][name] = await utils.count_nodes(db=db, label=name)
36
-
37
- return data
38
-
39
-
40
- @task(name="telemetry-schema-information", task_run_name="Gather Schema Information", cache_policy=NONE)
41
- async def gather_schema_information(service: InfrahubServices, branch: Branch) -> dict: # pylint: disable=unused-argument
42
- data: dict[str, Any] = {}
43
- main_schema = registry.schema.get_schema_branch(name=branch.name)
44
- data["node_count"] = len(main_schema.node_names)
45
- data["generic_count"] = len(main_schema.generic_names)
46
- data["last_update"] = branch.schema_changed_at
47
-
48
- return data
49
-
50
-
51
- @task(name="telemetry-feature-information", task_run_name="Gather Feature Information", cache_policy=NONE)
52
- async def gather_feature_information(service: InfrahubServices, branch: Branch) -> dict: # pylint: disable=unused-argument
53
- async with service.database.start_session() as db:
54
- data = {}
55
- features_to_count = [
56
- InfrahubKind.ARTIFACT,
57
- InfrahubKind.RESOURCEPOOL,
58
- InfrahubKind.REPOSITORY,
59
- InfrahubKind.GENERICGROUP,
60
- InfrahubKind.PROFILE,
61
- InfrahubKind.PROPOSEDCHANGE,
62
- InfrahubKind.TRANSFORM,
63
- ]
64
- for kind in features_to_count:
65
- data[kind] = await utils.count_nodes(db=db, label=kind)
66
-
67
- return data
68
-
69
-
70
- @task(name="telemetry-gather-data", task_run_name="Gather Anonynous Data", cache_policy=NONE)
71
- async def gather_anonymous_telemetry_data(service: InfrahubServices) -> dict:
72
- start_time = time.time()
73
-
74
- default_branch = registry.get_branch_from_registry()
75
- workers = await service.component.list_workers(branch=default_branch.name, schema_hash=False)
76
-
77
- data: dict[str, Any] = {
78
- "deployment_id": registry.id,
79
- "execution_time": None,
80
- "infrahub_version": __version__,
81
- "python_version": platform.python_version(),
82
- "platform": platform.machine(),
83
- "workers": {
84
- "total": len(workers),
85
- "active": len([w for w in workers if w.active]),
86
- },
87
- "branches": {
88
- "total": len(registry.branch),
89
- },
90
- "features": await gather_feature_information(service=service, branch=default_branch),
91
- "schema": await gather_schema_information(service=service, branch=default_branch),
92
- "database": await gather_database_information(service=service, branch=default_branch),
93
- }
94
-
95
- data["execution_time"] = time.time() - start_time
96
-
97
- return data
98
-
99
-
100
- @task(name="telemetry-post-data", task_run_name="Upload data", retries=5, cache_policy=NONE)
101
- async def post_telemetry_data(service: InfrahubServices, url: str, payload: dict[str, Any]) -> None:
102
- """Send the telemetry data to the specified URL, using HTTP POST."""
103
- response = await service.http.post(url=url, json=payload)
104
- response.raise_for_status()
105
-
106
-
107
- @flow(name="anonymous_telemetry_send", flow_run_name="Send anonymous telemetry")
108
- async def send_telemetry_push() -> None:
109
- service = services.service
110
- log = get_run_logger()
111
- if config.SETTINGS.main.telemetry_optout:
112
- log.info("Skipping, User opted out of this service.")
113
- return
114
-
115
- log.info(f"Pushing anonymous telemetry data to {config.SETTINGS.main.telemetry_endpoint}...")
116
-
117
- data = await gather_anonymous_telemetry_data(service=service)
118
- log.info(f"Anonymous usage telemetry gathered in {data['execution_time']} seconds. | {data}")
119
-
120
- payload = {
121
- "kind": TELEMETRY_KIND,
122
- "payload_format": TELEMETRY_VERSION,
123
- "data": data,
124
- "checksum": hashlib.sha256(json.dumps(data).encode()).hexdigest(),
125
- }
126
-
127
- await post_telemetry_data(service=service, url=config.SETTINGS.main.telemetry_endpoint, payload=payload)
@@ -1,3 +0,0 @@
1
- AUTOMATION_NAME = "Trigger-webhook-update-configuration"
2
-
3
- AUTOMATION_NAME_RUN = "Trigger-webhook-execution"