datadog_api_client 1.9.0 → 2.0.0

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 (440) hide show
  1. checksums.yaml +4 -4
  2. data/.apigentools-info +4 -4
  3. data/.generator/schemas/v1/openapi.yaml +1486 -273
  4. data/.generator/schemas/v2/openapi.yaml +2348 -146
  5. data/.generator/src/generator/cli.py +57 -40
  6. data/.generator/src/generator/formatter.py +20 -1
  7. data/.generator/src/generator/openapi.py +15 -9
  8. data/.generator/src/generator/templates/api.j2 +14 -13
  9. data/.generator/src/generator/templates/api_client.j2 +64 -15
  10. data/.generator/src/generator/templates/configuration.j2 +12 -8
  11. data/.generator/src/generator/templates/example.j2 +1 -1
  12. data/.generator/src/generator/templates/inflector.j2 +28 -0
  13. data/.generator/src/generator/templates/model_base.j2 +2 -2
  14. data/.generator/src/generator/templates/model_generic.j2 +42 -3
  15. data/.generator/src/generator/templates/model_oneof.j2 +1 -1
  16. data/.generator/src/generator/templates/package.j2 +7 -12
  17. data/.github/workflows/approved_status.yml +0 -2
  18. data/.github/workflows/codeql-analysis.yml +49 -0
  19. data/.github/workflows/docs.yml +1 -1
  20. data/.github/workflows/prepare_release.yml +16 -4
  21. data/.github/workflows/publish.yml +1 -1
  22. data/.github/workflows/release.yml +1 -1
  23. data/.github/workflows/test.yml +4 -6
  24. data/.github/workflows/test_integration.yml +1 -8
  25. data/.pre-commit-config.yaml +3 -12
  26. data/CHANGELOG.md +91 -0
  27. data/Gemfile +1 -0
  28. data/Makefile +2 -3
  29. data/README.md +16 -0
  30. data/check-examples.sh +0 -2
  31. data/datadog_api_client.gemspec +2 -0
  32. data/examples/v1/aws-integration/UpdateAWSAccount.rb +8 -4
  33. data/examples/v1/dashboards/CreateDashboard_1442588603.rb +61 -0
  34. data/examples/v1/dashboards/CreateDashboard_252716965.rb +52 -0
  35. data/examples/v1/dashboards/CreateDashboard_3882428227.rb +60 -0
  36. data/examples/v1/downtimes/CreateDowntime_1393233946.rb +3 -0
  37. data/examples/v1/downtimes/CreateDowntime_2908359488.rb +4 -0
  38. data/examples/v1/downtimes/CreateDowntime_3059354445.rb +4 -0
  39. data/examples/v1/downtimes/UpdateDowntime.rb +1 -0
  40. data/examples/v1/events/ListEvents.rb +1 -1
  41. data/examples/v1/metrics/SubmitDistributionPoints.rb +22 -0
  42. data/examples/v1/metrics/SubmitDistributionPoints_3109558960.rb +25 -0
  43. data/examples/v1/monitors/CreateMonitor_1969035628.rb +52 -0
  44. data/examples/v1/monitors/CreateMonitor_2520912138.rb +22 -0
  45. data/examples/v1/organizations/DowngradeOrg.rb +5 -0
  46. data/examples/v1/organizations/UpdateOrg.rb +1 -0
  47. data/examples/v1/security-monitoring/AddSecurityMonitoringSignalToIncident.rb +9 -0
  48. data/examples/v1/security-monitoring/EditSecurityMonitoringSignalAssignee.rb +9 -0
  49. data/examples/v1/security-monitoring/EditSecurityMonitoringSignalState.rb +10 -0
  50. data/examples/v1/service-level-objective-corrections/CreateSLOCorrection.rb +0 -3
  51. data/examples/v1/service-level-objective-corrections/CreateSLOCorrection_1326388368.rb +0 -3
  52. data/examples/v1/service-level-objective-corrections/DeleteSLOCorrection.rb +0 -3
  53. data/examples/v1/service-level-objective-corrections/GetSLOCorrection.rb +0 -3
  54. data/examples/v1/service-level-objective-corrections/ListSLOCorrection.rb +0 -3
  55. data/examples/v1/service-level-objective-corrections/UpdateSLOCorrection.rb +0 -3
  56. data/examples/v1/service-level-objectives/GetSLOCorrections.rb +0 -3
  57. data/examples/v1/service-level-objectives/GetSLOHistory.rb +1 -1
  58. data/examples/v1/service-level-objectives/SearchSLO.rb +16 -0
  59. data/examples/v1/snapshots/GetGraphSnapshot.rb +2 -0
  60. data/examples/v1/synthetics/CreateSyntheticsAPITest.rb +8 -0
  61. data/examples/v1/synthetics/CreateSyntheticsAPITest_1402674167.rb +44 -0
  62. data/examples/v1/synthetics/CreateSyntheticsBrowserTest_2932742688.rb +67 -0
  63. data/examples/v1/synthetics/GetAPITestLatestResults.rb +1 -1
  64. data/examples/v1/synthetics/GetAPITestResult.rb +1 -1
  65. data/examples/v1/synthetics/GetBrowserTestLatestResults.rb +1 -1
  66. data/examples/v1/synthetics/GetBrowserTestResult.rb +1 -1
  67. data/examples/v1/synthetics/UpdateBrowserTest.rb +8 -0
  68. data/examples/v1/usage-metering/GetDailyCustomReports.rb +1 -1
  69. data/examples/v1/usage-metering/GetHourlyUsageAttribution.rb +1 -4
  70. data/examples/v1/usage-metering/GetMonthlyCustomReports.rb +1 -1
  71. data/examples/v1/usage-metering/GetMonthlyUsageAttribution.rb +1 -4
  72. data/examples/v1/usage-metering/{GetMonthlyUsageAttribution_3738504447.rb → GetMonthlyUsageAttribution_3849653599.rb} +1 -1
  73. data/examples/v1/usage-metering/GetSpecifiedDailyCustomReports.rb +1 -1
  74. data/examples/v1/usage-metering/GetSpecifiedMonthlyCustomReports.rb +1 -1
  75. data/examples/v1/usage-metering/GetUsageAttribution.rb +2 -2
  76. data/examples/v1/usage-metering/GetUsageCIApp.rb +2 -5
  77. data/examples/v1/usage-metering/GetUsageCIApp_1064440884.rb +8 -0
  78. data/examples/v1/usage-metering/GetUsageCWS.rb +2 -5
  79. data/examples/v1/usage-metering/GetUsageCWS_736958514.rb +8 -0
  80. data/examples/v1/usage-metering/GetUsageDBM.rb +2 -5
  81. data/examples/v1/usage-metering/GetUsageDBM_3446806203.rb +8 -0
  82. data/examples/v1/usage-metering/GetUsageLambda.rb +2 -5
  83. data/examples/v1/usage-metering/GetUsageLambda_3132428705.rb +8 -0
  84. data/examples/v1/usage-metering/GetUsageLogs.rb +2 -5
  85. data/examples/v1/usage-metering/GetUsageLogsByIndex.rb +2 -5
  86. data/examples/v1/usage-metering/GetUsageLogsByIndex_1025184776.rb +8 -0
  87. data/examples/v1/usage-metering/GetUsageLogs_2562396405.rb +8 -0
  88. data/examples/v1/usage-metering/GetUsageNetworkFlows.rb +2 -5
  89. data/examples/v1/usage-metering/GetUsageNetworkFlows_1239422069.rb +8 -0
  90. data/examples/v1/usage-metering/GetUsageNetworkHosts.rb +2 -5
  91. data/examples/v1/usage-metering/GetUsageNetworkHosts_1249907835.rb +8 -0
  92. data/examples/v1/usage-metering/GetUsageOnlineArchive.rb +2 -5
  93. data/examples/v1/usage-metering/GetUsageOnlineArchive_1501172903.rb +8 -0
  94. data/examples/v1/usage-metering/GetUsageRumSessions.rb +2 -5
  95. data/examples/v1/usage-metering/GetUsageRumSessions_3271366243.rb +9 -0
  96. data/examples/v1/usage-metering/GetUsageRumSessions_714937291.rb +8 -0
  97. data/examples/v1/usage-metering/GetUsageRumUnits.rb +2 -5
  98. data/examples/v1/usage-metering/GetUsageRumUnits_3959755399.rb +8 -0
  99. data/examples/v1/usage-metering/GetUsageSDS.rb +2 -5
  100. data/examples/v1/usage-metering/GetUsageSDS_271128478.rb +8 -0
  101. data/examples/v1/usage-metering/GetUsageSynthetics.rb +1 -1
  102. data/examples/v1/usage-metering/GetUsageSyntheticsAPI.rb +2 -5
  103. data/examples/v1/usage-metering/GetUsageSyntheticsAPI_4048033529.rb +8 -0
  104. data/examples/v1/usage-metering/GetUsageSyntheticsBrowser.rb +2 -5
  105. data/examples/v1/usage-metering/GetUsageSyntheticsBrowser_1704663299.rb +8 -0
  106. data/examples/v2/events/ListEvents.rb +8 -0
  107. data/examples/v2/events/ListEvents_2663715109.rb +14 -0
  108. data/examples/v2/events/SearchEvents.rb +23 -0
  109. data/examples/v2/incident-services/CreateIncidentService.rb +1 -1
  110. data/examples/v2/incident-services/DeleteIncidentService.rb +1 -1
  111. data/examples/v2/incident-services/GetIncidentService.rb +1 -1
  112. data/examples/v2/incident-services/ListIncidentServices.rb +1 -1
  113. data/examples/v2/incident-services/UpdateIncidentService.rb +1 -1
  114. data/examples/v2/incident-teams/CreateIncidentTeam.rb +1 -1
  115. data/examples/v2/incident-teams/DeleteIncidentTeam.rb +1 -1
  116. data/examples/v2/incident-teams/GetIncidentTeam.rb +1 -1
  117. data/examples/v2/incident-teams/ListIncidentTeams.rb +1 -1
  118. data/examples/v2/incident-teams/UpdateIncidentTeam.rb +1 -1
  119. data/examples/v2/incidents/CreateIncident.rb +1 -1
  120. data/examples/v2/incidents/DeleteIncident.rb +1 -1
  121. data/examples/v2/incidents/GetIncident.rb +1 -1
  122. data/examples/v2/incidents/ListIncidents.rb +1 -1
  123. data/examples/v2/incidents/UpdateIncident.rb +1 -1
  124. data/examples/v2/incidents/UpdateIncident_1009194038.rb +1 -1
  125. data/examples/v2/incidents/UpdateIncident_3369341440.rb +1 -1
  126. data/examples/v2/logs/SubmitLog.rb +1 -0
  127. data/examples/v2/logs-archives/CreateLogsArchive.rb +1 -0
  128. data/examples/v2/logs-archives/UpdateLogsArchive.rb +1 -0
  129. data/examples/v2/metrics/CreateTagConfiguration.rb +0 -3
  130. data/examples/v2/metrics/DeleteTagConfiguration.rb +0 -3
  131. data/examples/v2/metrics/EstimateMetricsOutputSeries.rb +9 -0
  132. data/examples/v2/metrics/ListTagConfigurationByName.rb +0 -3
  133. data/examples/v2/metrics/ListTagConfigurations.rb +0 -3
  134. data/examples/v2/metrics/ListTagConfigurations_103226315.rb +0 -3
  135. data/examples/v2/metrics/ListTagConfigurations_1799362914.rb +0 -3
  136. data/examples/v2/metrics/SubmitMetrics.rb +26 -0
  137. data/examples/v2/metrics/UpdateTagConfiguration.rb +0 -3
  138. data/examples/v2/opsgenie-integration/CreateOpsgenieService.rb +16 -0
  139. data/examples/v2/opsgenie-integration/DeleteOpsgenieService.rb +8 -0
  140. data/examples/v2/opsgenie-integration/GetOpsgenieService.rb +8 -0
  141. data/examples/v2/opsgenie-integration/ListOpsgenieServices.rb +5 -0
  142. data/examples/v2/opsgenie-integration/UpdateOpsgenieService.rb +21 -0
  143. data/examples/v2/security-monitoring/EditSecurityMonitoringSignalAssignee.rb +15 -0
  144. data/examples/v2/security-monitoring/EditSecurityMonitoringSignalIncidents.rb +15 -0
  145. data/examples/v2/security-monitoring/EditSecurityMonitoringSignalState.rb +14 -0
  146. data/examples/v2/security-monitoring/ListSecurityMonitoringSignals.rb +0 -3
  147. data/examples/v2/security-monitoring/SearchSecurityMonitoringSignals.rb +0 -3
  148. data/examples/v2/security-monitoring/UpdateSecurityMonitoringRule.rb +5 -0
  149. data/examples/v2/usage-metering/GetCostByOrg.rb +5 -0
  150. data/examples/v2/usage-metering/GetEstimatedCostByOrg.rb +8 -0
  151. data/examples/v2/usage-metering/GetEstimatedCostByOrg_2734954020.rb +11 -0
  152. data/examples/v2/usage-metering/GetEstimatedCostByOrg_3186693804.rb +11 -0
  153. data/examples/v2/usage-metering/GetUsageApplicationSecurityMonitoring.rb +5 -0
  154. data/examples/v2/usage-metering/GetUsageApplicationSecurityMonitoring_3959166796.rb +8 -0
  155. data/examples/v2/usage-metering/GetUsageLambdaTracedInvocations.rb +5 -0
  156. data/examples/v2/usage-metering/GetUsageLambdaTracedInvocations_1436752065.rb +8 -0
  157. data/examples/v2/usage-metering/GetUsageObservabilityPipelines.rb +2 -5
  158. data/examples/v2/usage-metering/GetUsageObservabilityPipelines_970725512.rb +8 -0
  159. data/lib/datadog_api_client/{v2/api_client.rb → api_client.rb} +64 -15
  160. data/lib/datadog_api_client/api_key_configuration.rb +1 -18
  161. data/lib/datadog_api_client/{v1/configuration.rb → configuration.rb} +133 -35
  162. data/lib/datadog_api_client/inflector.rb +1293 -0
  163. data/lib/datadog_api_client/models.rb +66 -0
  164. data/lib/datadog_api_client/v1/api/authentication_api.rb +3 -11
  165. data/lib/datadog_api_client/v1/api/aws_integration_api.rb +19 -91
  166. data/lib/datadog_api_client/v1/api/aws_logs_integration_api.rb +15 -71
  167. data/lib/datadog_api_client/v1/api/azure_integration_api.rb +11 -51
  168. data/lib/datadog_api_client/v1/api/dashboard_lists_api.rb +11 -51
  169. data/lib/datadog_api_client/v1/api/dashboards_api.rb +15 -71
  170. data/lib/datadog_api_client/v1/api/downtimes_api.rb +15 -71
  171. data/lib/datadog_api_client/v1/api/events_api.rb +9 -33
  172. data/lib/datadog_api_client/v1/api/gcp_integration_api.rb +9 -41
  173. data/lib/datadog_api_client/v1/api/hosts_api.rb +9 -41
  174. data/lib/datadog_api_client/v1/api/ip_ranges_api.rb +3 -11
  175. data/lib/datadog_api_client/v1/api/key_management_api.rb +21 -101
  176. data/lib/datadog_api_client/v1/api/logs_api.rb +5 -21
  177. data/lib/datadog_api_client/v1/api/logs_indexes_api.rb +13 -61
  178. data/lib/datadog_api_client/v1/api/logs_pipelines_api.rb +15 -71
  179. data/lib/datadog_api_client/v1/api/metrics_api.rb +87 -62
  180. data/lib/datadog_api_client/v1/api/monitors_api.rb +90 -157
  181. data/lib/datadog_api_client/v1/api/notebooks_api.rb +11 -51
  182. data/lib/datadog_api_client/v1/api/organizations_api.rb +77 -52
  183. data/lib/datadog_api_client/v1/api/pager_duty_integration_api.rb +9 -41
  184. data/lib/datadog_api_client/v1/api/security_monitoring_api.rb +242 -0
  185. data/lib/datadog_api_client/v1/api/service_checks_api.rb +3 -11
  186. data/lib/datadog_api_client/v1/api/service_level_objective_corrections_api.rb +12 -52
  187. data/lib/datadog_api_client/v1/api/service_level_objectives_api.rb +100 -94
  188. data/lib/datadog_api_client/v1/api/slack_integration_api.rb +11 -51
  189. data/lib/datadog_api_client/v1/api/snapshots_api.rb +7 -11
  190. data/lib/datadog_api_client/v1/api/synthetics_api.rb +55 -271
  191. data/lib/datadog_api_client/v1/api/tags_api.rb +11 -51
  192. data/lib/datadog_api_client/v1/api/usage_metering_api.rb +184 -427
  193. data/lib/datadog_api_client/v1/api/users_api.rb +11 -51
  194. data/lib/datadog_api_client/v1/api/webhooks_integration_api.rb +17 -81
  195. data/lib/datadog_api_client/v1/model_base.rb +2 -2
  196. data/lib/datadog_api_client/v1/models/add_signal_to_incident_request.rb +142 -0
  197. data/lib/datadog_api_client/v1/models/distribution_point_item.rb +63 -0
  198. data/lib/datadog_api_client/v1/models/distribution_points_content_encoding.rb +26 -0
  199. data/lib/datadog_api_client/v1/models/distribution_points_payload.rb +124 -0
  200. data/lib/datadog_api_client/v1/models/distribution_points_series.rb +179 -0
  201. data/lib/datadog_api_client/v1/models/distribution_points_type.rb +26 -0
  202. data/lib/datadog_api_client/v1/models/distribution_widget_histogram_request_query.rb +64 -0
  203. data/lib/datadog_api_client/v1/models/distribution_widget_histogram_request_type.rb +26 -0
  204. data/lib/datadog_api_client/v1/models/distribution_widget_request.rb +21 -1
  205. data/lib/datadog_api_client/v1/models/downtime.rb +11 -1
  206. data/lib/datadog_api_client/v1/models/downtime_child.rb +11 -1
  207. data/lib/datadog_api_client/v1/models/event.rb +1 -1
  208. data/lib/datadog_api_client/v1/models/formula_and_function_apm_resource_stat_name.rb +1 -0
  209. data/lib/datadog_api_client/v1/models/formula_and_function_query_definition.rb +1 -1
  210. data/lib/datadog_api_client/v1/models/hourly_usage_attribution_body.rb +5 -1
  211. data/lib/datadog_api_client/v1/models/hourly_usage_attribution_usage_type.rb +9 -0
  212. data/lib/datadog_api_client/v1/models/http_log_item.rb +29 -4
  213. data/lib/datadog_api_client/v1/models/ip_prefixes_synthetics_private_locations.rb +125 -0
  214. data/lib/datadog_api_client/v1/models/ip_ranges.rb +11 -1
  215. data/lib/datadog_api_client/v1/models/logs_category_processor.rb +1 -1
  216. data/lib/datadog_api_client/v1/models/logs_list_request.rb +1 -1
  217. data/lib/datadog_api_client/v1/models/logs_processor.rb +1 -1
  218. data/lib/datadog_api_client/v1/models/logs_sort.rb +1 -1
  219. data/lib/datadog_api_client/v1/models/monitor_formula_and_function_events_data_source.rb +1 -0
  220. data/lib/datadog_api_client/v1/models/monitor_formula_and_function_query_definition.rb +1 -1
  221. data/lib/datadog_api_client/v1/models/monitor_group_search_response_counts.rb +2 -2
  222. data/lib/datadog_api_client/v1/models/{monitor_search_response_counts_tag_item.rb → monitor_search_count_item.rb} +3 -3
  223. data/lib/datadog_api_client/v1/models/monitor_search_response_counts.rb +4 -4
  224. data/lib/datadog_api_client/v1/models/monitor_type.rb +1 -0
  225. data/lib/datadog_api_client/v1/models/monthly_usage_attribution_body.rb +6 -2
  226. data/lib/datadog_api_client/v1/models/monthly_usage_attribution_response.rb +1 -1
  227. data/lib/datadog_api_client/v1/models/monthly_usage_attribution_supported_metrics.rb +18 -0
  228. data/lib/datadog_api_client/v1/models/monthly_usage_attribution_values.rb +61 -1
  229. data/lib/datadog_api_client/v1/models/notebook_cell_create_request.rb +146 -0
  230. data/lib/datadog_api_client/v1/models/notebook_cell_create_request_attributes.rb +68 -0
  231. data/lib/datadog_api_client/v1/models/notebook_cell_response_attributes.rb +1 -1
  232. data/lib/datadog_api_client/v1/models/notebook_cell_time.rb +1 -1
  233. data/lib/datadog_api_client/v1/models/notebook_cell_update_request_attributes.rb +1 -1
  234. data/lib/datadog_api_client/v1/models/notebook_global_time.rb +1 -1
  235. data/lib/datadog_api_client/v1/models/notebook_update_cell.rb +1 -1
  236. data/lib/datadog_api_client/v1/models/org_downgraded_response.rb +111 -0
  237. data/lib/datadog_api_client/v1/models/organization.rb +14 -4
  238. data/lib/datadog_api_client/v1/models/search_slo_response.rb +131 -0
  239. data/lib/datadog_api_client/v1/models/{monitor_group_search_response_counts_status_item.rb → search_slo_response_data.rb} +19 -19
  240. data/lib/datadog_api_client/v1/models/{monitor_group_search_response_counts_type_item.rb → search_slo_response_data_attributes.rb} +21 -19
  241. data/lib/datadog_api_client/v1/models/search_slo_response_data_attributes_facets.rb +197 -0
  242. data/lib/datadog_api_client/v1/models/{monitor_search_response_counts_type_item.rb → search_slo_response_data_attributes_facets_object_int.rb} +7 -7
  243. data/lib/datadog_api_client/v1/models/{monitor_search_response_counts_muted_item.rb → search_slo_response_data_attributes_facets_object_string.rb} +7 -7
  244. data/lib/datadog_api_client/v1/models/search_slo_response_links.rb +151 -0
  245. data/lib/datadog_api_client/v1/models/search_slo_response_meta.rb +111 -0
  246. data/lib/datadog_api_client/v1/models/search_slo_response_meta_page.rb +181 -0
  247. data/lib/datadog_api_client/v1/models/series.rb +2 -2
  248. data/lib/datadog_api_client/v1/models/service_level_objective.rb +3 -3
  249. data/lib/datadog_api_client/v1/models/service_level_objective_query.rb +1 -1
  250. data/lib/datadog_api_client/v1/models/service_level_objective_request.rb +3 -3
  251. data/lib/datadog_api_client/v1/models/signal_archive_reason.rb +29 -0
  252. data/lib/datadog_api_client/v1/models/signal_assignee_update_request.rb +132 -0
  253. data/lib/datadog_api_client/v1/models/signal_state_update_request.rb +152 -0
  254. data/lib/datadog_api_client/v1/models/signal_triage_state.rb +28 -0
  255. data/lib/datadog_api_client/v1/models/slo_correction_create_request_attributes.rb +1 -1
  256. data/lib/datadog_api_client/v1/models/slo_correction_response_attributes.rb +4 -4
  257. data/lib/datadog_api_client/v1/models/slo_correction_update_request_attributes.rb +1 -1
  258. data/lib/datadog_api_client/v1/models/slo_history_metrics.rb +1 -1
  259. data/lib/datadog_api_client/v1/models/slo_response_data.rb +1 -1
  260. data/lib/datadog_api_client/v1/models/successful_signal_update_response.rb +111 -0
  261. data/lib/datadog_api_client/v1/models/sunburst_widget_legend.rb +1 -1
  262. data/lib/datadog_api_client/v1/models/synthetics_api_test.rb +12 -1
  263. data/lib/datadog_api_client/v1/models/synthetics_assertion.rb +1 -1
  264. data/lib/datadog_api_client/v1/models/synthetics_assertion_type.rb +2 -0
  265. data/lib/datadog_api_client/v1/models/synthetics_basic_auth.rb +1 -1
  266. data/lib/datadog_api_client/v1/models/synthetics_browser_test.rb +11 -0
  267. data/lib/datadog_api_client/v1/models/synthetics_browser_test_rum_settings.rb +152 -0
  268. data/lib/datadog_api_client/v1/models/synthetics_core_web_vitals.rb +2 -2
  269. data/lib/datadog_api_client/v1/models/synthetics_test_ci_options.rb +111 -0
  270. data/lib/datadog_api_client/v1/models/synthetics_test_details.rb +1 -1
  271. data/lib/datadog_api_client/v1/models/synthetics_test_details_sub_type.rb +2 -1
  272. data/lib/datadog_api_client/v1/models/synthetics_test_options.rb +31 -1
  273. data/lib/datadog_api_client/v1/models/synthetics_test_request.rb +21 -1
  274. data/lib/datadog_api_client/v1/models/tree_map_color_by.rb +1 -1
  275. data/lib/datadog_api_client/v1/models/tree_map_group_by.rb +1 -1
  276. data/lib/datadog_api_client/v1/models/tree_map_size_by.rb +1 -1
  277. data/lib/datadog_api_client/v1/models/tree_map_widget_definition.rb +28 -6
  278. data/lib/datadog_api_client/v1/models/usage_attribution_body.rb +6 -2
  279. data/lib/datadog_api_client/v1/models/usage_attribution_response.rb +1 -1
  280. data/lib/datadog_api_client/v1/models/usage_attribution_sort.rb +6 -0
  281. data/lib/datadog_api_client/v1/models/usage_attribution_supported_metrics.rb +6 -0
  282. data/lib/datadog_api_client/v1/models/usage_attribution_values.rb +61 -1
  283. data/lib/datadog_api_client/v1/models/usage_billable_summary_keys.rb +474 -4
  284. data/lib/datadog_api_client/v1/models/usage_rum_sessions_hour.rb +18 -4
  285. data/lib/datadog_api_client/v1/models/usage_summary_date.rb +11 -1
  286. data/lib/datadog_api_client/v1/models/usage_summary_date_org.rb +11 -1
  287. data/lib/datadog_api_client/v1/models/usage_summary_response.rb +11 -1
  288. data/lib/datadog_api_client/v1/models/widget_definition.rb +1 -1
  289. data/lib/datadog_api_client/v2/api/audit_api.rb +11 -25
  290. data/lib/datadog_api_client/v2/api/authn_mappings_api.rb +11 -53
  291. data/lib/datadog_api_client/v2/api/cloud_workload_security_api.rb +14 -62
  292. data/lib/datadog_api_client/v2/api/dashboard_lists_api.rb +9 -41
  293. data/lib/datadog_api_client/v2/api/events_api.rb +228 -0
  294. data/lib/datadog_api_client/v2/api/incident_services_api.rb +36 -46
  295. data/lib/datadog_api_client/v2/api/incident_teams_api.rb +36 -46
  296. data/lib/datadog_api_client/v2/api/incidents_api.rb +39 -48
  297. data/lib/datadog_api_client/v2/api/key_management_api.rb +29 -141
  298. data/lib/datadog_api_client/v2/api/logs_api.rb +15 -45
  299. data/lib/datadog_api_client/v2/api/logs_archives_api.rb +21 -101
  300. data/lib/datadog_api_client/v2/api/logs_metrics_api.rb +11 -51
  301. data/lib/datadog_api_client/v2/api/metrics_api.rb +179 -94
  302. data/lib/datadog_api_client/v2/api/opsgenie_integration_api.rb +355 -0
  303. data/lib/datadog_api_client/v2/api/organizations_api.rb +3 -11
  304. data/lib/datadog_api_client/v2/api/processes_api.rb +6 -13
  305. data/lib/datadog_api_client/v2/api/roles_api.rb +27 -131
  306. data/lib/datadog_api_client/v2/api/rum_api.rb +13 -35
  307. data/lib/datadog_api_client/v2/api/security_monitoring_api.rb +247 -125
  308. data/lib/datadog_api_client/v2/api/service_accounts_api.rb +11 -51
  309. data/lib/datadog_api_client/v2/api/usage_metering_api.rb +382 -14
  310. data/lib/datadog_api_client/v2/api/users_api.rb +21 -101
  311. data/lib/datadog_api_client/v2/model_base.rb +2 -2
  312. data/lib/datadog_api_client/v2/models/api_key_response_included_item.rb +1 -1
  313. data/lib/datadog_api_client/v2/models/application_key_response_included_item.rb +1 -1
  314. data/lib/datadog_api_client/v2/models/authn_mapping.rb +1 -13
  315. data/lib/datadog_api_client/v2/models/authn_mapping_attributes.rb +1 -12
  316. data/lib/datadog_api_client/v2/models/authn_mapping_included.rb +1 -1
  317. data/lib/datadog_api_client/v2/models/authn_mapping_response.rb +16 -4
  318. data/lib/datadog_api_client/v2/models/authn_mappings_response.rb +13 -1
  319. data/lib/datadog_api_client/v2/models/chargeback_breakdown.rb +131 -0
  320. data/lib/datadog_api_client/v2/models/cost_by_org.rb +133 -0
  321. data/lib/datadog_api_client/v2/models/cost_by_org_attributes.rb +153 -0
  322. data/lib/datadog_api_client/v2/models/cost_by_org_response.rb +113 -0
  323. data/lib/datadog_api_client/v2/models/cost_by_org_type.rb +26 -0
  324. data/lib/datadog_api_client/v2/models/event.rb +141 -0
  325. data/lib/datadog_api_client/v2/models/event_attributes.rb +305 -0
  326. data/lib/datadog_api_client/v2/models/event_priority.rb +27 -0
  327. data/lib/datadog_api_client/v2/models/event_response.rb +133 -0
  328. data/lib/datadog_api_client/v2/models/event_response_attributes.rb +133 -0
  329. data/lib/datadog_api_client/v2/models/event_status_type.rb +35 -0
  330. data/lib/datadog_api_client/v2/models/event_type.rb +26 -0
  331. data/lib/datadog_api_client/v2/models/events_list_request.rb +142 -0
  332. data/lib/datadog_api_client/v2/models/events_list_response.rb +133 -0
  333. data/lib/datadog_api_client/v2/models/events_list_response_links.rb +112 -0
  334. data/lib/datadog_api_client/v2/models/events_query_filter.rb +137 -0
  335. data/lib/datadog_api_client/v2/models/events_query_options.rb +124 -0
  336. data/lib/datadog_api_client/v2/models/events_request_page.rb +134 -0
  337. data/lib/datadog_api_client/v2/models/events_response_metadata.rb +144 -0
  338. data/lib/datadog_api_client/v2/models/events_response_metadata_page.rb +112 -0
  339. data/lib/datadog_api_client/v2/models/events_sort.rb +27 -0
  340. data/lib/datadog_api_client/v2/models/events_warning.rb +131 -0
  341. data/lib/datadog_api_client/v2/models/hourly_usage.rb +133 -0
  342. data/lib/datadog_api_client/v2/models/hourly_usage_attributes.rb +163 -0
  343. data/lib/datadog_api_client/v2/models/hourly_usage_measurement.rb +122 -0
  344. data/lib/datadog_api_client/v2/models/hourly_usage_metadata.rb +111 -0
  345. data/lib/datadog_api_client/v2/models/hourly_usage_pagination.rb +112 -0
  346. data/lib/datadog_api_client/v2/models/hourly_usage_response.rb +123 -0
  347. data/lib/datadog_api_client/v2/models/hourly_usage_type.rb +2 -0
  348. data/lib/datadog_api_client/v2/models/http_log_item.rb +40 -4
  349. data/lib/datadog_api_client/v2/models/incident_field_attributes.rb +1 -1
  350. data/lib/datadog_api_client/v2/models/incident_response_included_item.rb +1 -1
  351. data/lib/datadog_api_client/v2/models/incident_service_included_items.rb +1 -1
  352. data/lib/datadog_api_client/v2/models/incident_team_included_items.rb +1 -1
  353. data/lib/datadog_api_client/v2/models/incident_timeline_cell_create_attributes.rb +1 -1
  354. data/lib/datadog_api_client/v2/models/intake_payload_accepted.rb +113 -0
  355. data/lib/datadog_api_client/v2/models/logs_aggregate_bucket_value.rb +1 -1
  356. data/lib/datadog_api_client/v2/models/logs_archive_attributes.rb +12 -1
  357. data/lib/datadog_api_client/v2/models/logs_archive_create_request_attributes.rb +12 -1
  358. data/lib/datadog_api_client/v2/models/logs_archive_create_request_destination.rb +1 -1
  359. data/lib/datadog_api_client/v2/models/logs_archive_destination.rb +1 -1
  360. data/lib/datadog_api_client/v2/models/logs_group_by_missing.rb +1 -1
  361. data/lib/datadog_api_client/v2/models/logs_group_by_total.rb +1 -1
  362. data/lib/datadog_api_client/v2/models/metric_content_encoding.rb +26 -0
  363. data/lib/datadog_api_client/v2/models/metric_estimate.rb +133 -0
  364. data/lib/datadog_api_client/v2/models/metric_estimate_attributes.rb +133 -0
  365. data/lib/datadog_api_client/v2/models/metric_estimate_resource_type.rb +26 -0
  366. data/lib/datadog_api_client/v2/models/metric_estimate_response.rb +111 -0
  367. data/lib/datadog_api_client/v2/models/metric_estimate_type.rb +28 -0
  368. data/lib/datadog_api_client/v2/models/metric_intake_type.rb +29 -0
  369. data/lib/datadog_api_client/v2/models/metric_metadata.rb +111 -0
  370. data/lib/datadog_api_client/v2/models/metric_origin.rb +170 -0
  371. data/lib/datadog_api_client/v2/models/metric_payload.rb +124 -0
  372. data/lib/datadog_api_client/v2/models/metric_point.rb +122 -0
  373. data/lib/datadog_api_client/{v1/models/monitor_search_response_counts_status_item.rb → v2/models/metric_resource.rb} +21 -21
  374. data/lib/datadog_api_client/v2/models/metric_series.rb +220 -0
  375. data/lib/datadog_api_client/v2/models/metric_tag_configuration_create_attributes.rb +0 -2
  376. data/lib/datadog_api_client/v2/models/metric_tag_configuration_update_attributes.rb +0 -2
  377. data/lib/datadog_api_client/v2/models/metric_volumes.rb +1 -1
  378. data/lib/datadog_api_client/v2/models/metrics_and_metric_tag_configurations.rb +1 -1
  379. data/lib/datadog_api_client/v2/models/monitor_type.rb +215 -0
  380. data/lib/datadog_api_client/v2/models/opsgenie_service_create_attributes.rb +174 -0
  381. data/lib/datadog_api_client/v2/models/opsgenie_service_create_data.rb +145 -0
  382. data/lib/datadog_api_client/v2/models/opsgenie_service_create_request.rb +122 -0
  383. data/lib/datadog_api_client/v2/models/opsgenie_service_region_type.rb +28 -0
  384. data/lib/datadog_api_client/v2/models/opsgenie_service_response.rb +122 -0
  385. data/lib/datadog_api_client/v2/models/opsgenie_service_response_attributes.rb +132 -0
  386. data/lib/datadog_api_client/v2/models/opsgenie_service_response_data.rb +166 -0
  387. data/lib/datadog_api_client/v2/models/opsgenie_service_type.rb +26 -0
  388. data/lib/datadog_api_client/v2/models/opsgenie_service_update_attributes.rb +142 -0
  389. data/lib/datadog_api_client/v2/models/opsgenie_service_update_data.rb +166 -0
  390. data/lib/datadog_api_client/v2/models/opsgenie_service_update_request.rb +122 -0
  391. data/lib/datadog_api_client/v2/models/opsgenie_services_response.rb +124 -0
  392. data/lib/datadog_api_client/v2/models/relationship_to_saml_assertion_attribute_data.rb +1 -5
  393. data/lib/datadog_api_client/v2/models/rum_aggregate_bucket_value.rb +1 -1
  394. data/lib/datadog_api_client/v2/models/rum_group_by_missing.rb +1 -1
  395. data/lib/datadog_api_client/v2/models/rum_group_by_total.rb +1 -1
  396. data/lib/datadog_api_client/v2/models/saml_assertion_attribute.rb +1 -5
  397. data/lib/datadog_api_client/v2/models/security_monitoring_rule_detection_method.rb +1 -0
  398. data/lib/datadog_api_client/v2/models/security_monitoring_rule_hardcoded_evaluator_type.rb +26 -0
  399. data/lib/datadog_api_client/v2/models/security_monitoring_rule_new_value_options.rb +30 -4
  400. data/lib/datadog_api_client/v2/models/security_monitoring_rule_new_value_options_learning_method.rb +27 -0
  401. data/lib/datadog_api_client/v2/models/security_monitoring_rule_new_value_options_learning_threshold.rb +27 -0
  402. data/lib/datadog_api_client/v2/models/security_monitoring_rule_options.rb +23 -1
  403. data/lib/datadog_api_client/v2/models/security_monitoring_rule_query.rb +13 -1
  404. data/lib/datadog_api_client/v2/models/security_monitoring_rule_query_create.rb +13 -1
  405. data/lib/datadog_api_client/v2/models/security_monitoring_signal_archive_reason.rb +29 -0
  406. data/lib/datadog_api_client/v2/models/security_monitoring_signal_assignee_update_attributes.rb +132 -0
  407. data/lib/datadog_api_client/v2/models/security_monitoring_signal_assignee_update_data.rb +122 -0
  408. data/lib/datadog_api_client/v2/models/security_monitoring_signal_assignee_update_request.rb +122 -0
  409. data/lib/datadog_api_client/v2/models/security_monitoring_signal_incidents_update_attributes.rb +134 -0
  410. data/lib/datadog_api_client/v2/models/security_monitoring_signal_incidents_update_data.rb +122 -0
  411. data/lib/datadog_api_client/v2/models/security_monitoring_signal_incidents_update_request.rb +122 -0
  412. data/lib/datadog_api_client/v2/models/security_monitoring_signal_state.rb +28 -0
  413. data/lib/datadog_api_client/v2/models/security_monitoring_signal_state_update_attributes.rb +152 -0
  414. data/lib/datadog_api_client/v2/models/security_monitoring_signal_state_update_data.rb +122 -0
  415. data/lib/datadog_api_client/v2/models/security_monitoring_signal_state_update_request.rb +122 -0
  416. data/lib/datadog_api_client/v2/models/security_monitoring_signal_triage_attributes.rb +248 -0
  417. data/lib/datadog_api_client/v2/models/security_monitoring_signal_triage_update_data.rb +111 -0
  418. data/lib/datadog_api_client/v2/models/security_monitoring_signal_triage_update_response.rb +122 -0
  419. data/lib/datadog_api_client/v2/models/security_monitoring_triage_user.rb +152 -0
  420. data/lib/datadog_api_client/v2/models/usage_application_security_monitoring_response.rb +113 -0
  421. data/lib/datadog_api_client/v2/models/usage_lambda_traced_invocations_response.rb +113 -0
  422. data/lib/datadog_api_client/v2/models/user_response_included_item.rb +1 -1
  423. data/lib/datadog_api_client/v2.rb +77 -0
  424. data/lib/datadog_api_client/version.rb +1 -1
  425. data/lib/datadog_api_client.rb +11 -5
  426. data/spec/{v1/api_client_spec.rb → api_client_spec.rb} +32 -32
  427. data/spec/{v1/configuration_spec.rb → configuration_spec.rb} +3 -3
  428. data/spec/spec_helper.rb +1 -3
  429. metadata +191 -28
  430. data/.dockerignore +0 -1
  431. data/.generator/src/generator/templates/api_error.j2 +0 -49
  432. data/extract-code-blocks.awk +0 -81
  433. data/extract-code-blocks.sh +0 -3
  434. data/lib/datadog_api_client/v1/api_client.rb +0 -456
  435. data/lib/datadog_api_client/v1/api_error.rb +0 -60
  436. data/lib/datadog_api_client/v1.rb +0 -789
  437. data/lib/datadog_api_client/v2/api_error.rb +0 -60
  438. data/lib/datadog_api_client/v2/configuration.rb +0 -427
  439. data/spec/v2/api_client_spec.rb +0 -210
  440. data/spec/v2/configuration_spec.rb +0 -45
@@ -12,9 +12,9 @@ MODULE_NAME = "DatadogAPIClient"
12
12
 
13
13
 
14
14
  @click.command()
15
- @click.option(
16
- "-i",
17
- "--input",
15
+ @click.argument(
16
+ "specs",
17
+ nargs=-1,
18
18
  type=click.Path(exists=True, file_okay=True, dir_okay=False, path_type=pathlib.Path),
19
19
  )
20
20
  @click.option(
@@ -22,14 +22,10 @@ MODULE_NAME = "DatadogAPIClient"
22
22
  "--output",
23
23
  type=click.Path(path_type=pathlib.Path),
24
24
  )
25
- def cli(input, output):
25
+ def cli(specs, output):
26
26
  """
27
27
  Generate a Ruby code snippet from OpenAPI specification.
28
28
  """
29
- spec = openapi.load(input)
30
-
31
- version = input.parent.name
32
-
33
29
  env = Environment(loader=FileSystemLoader(str(pathlib.Path(__file__).parent / "templates")))
34
30
 
35
31
  env.filters["accept_headers"] = openapi.accept_headers
@@ -48,8 +44,6 @@ def cli(input, output):
48
44
  env.globals["gem_name"] = GEM_NAME
49
45
  env.globals["module_name"] = MODULE_NAME
50
46
  env.globals["enumerate"] = enumerate
51
- env.globals["version"] = version
52
- env.globals["openapi"] = spec
53
47
  env.globals["get_name"] = openapi.get_name
54
48
  env.globals["type_to_ruby"] = openapi.type_to_ruby
55
49
  env.globals["get_type_for_attribute"] = openapi.get_type_for_attribute
@@ -63,38 +57,61 @@ def cli(input, output):
63
57
  package_j2 = env.get_template("package.j2")
64
58
 
65
59
  extra_files = {
66
- "api_client.rb": env.get_template("api_client.j2"),
67
- "api_error.rb": env.get_template("api_error.j2"),
68
- "configuration.rb": env.get_template("configuration.j2"),
69
60
  "model_base.rb": env.get_template("model_base.j2"),
70
61
  }
71
62
 
72
- apis = openapi.apis(spec)
73
- models = openapi.models(spec)
74
-
75
- package = output / GEM_NAME / f"{version}.rb"
76
- package.parent.mkdir(parents=True, exist_ok=True)
77
- with package.open("w") as fp:
78
- fp.write(package_j2.render(apis=apis, models=models))
79
-
80
- gem_path = output / GEM_NAME / version
81
- gem_path.mkdir(parents=True, exist_ok=True)
63
+ common_files = {
64
+ "api_client.rb": env.get_template("api_client.j2"),
65
+ "configuration.rb": env.get_template("configuration.j2"),
66
+ "inflector.rb": env.get_template("inflector.j2"),
67
+ }
82
68
 
83
- for name, template in extra_files.items():
84
- filename = gem_path / name
69
+ all_specs = {}
70
+ all_apis = {}
71
+ all_models = {}
72
+ for spec_path in specs:
73
+ version = spec_path.parent.name
74
+
75
+ spec = openapi.load(spec_path)
76
+ all_specs[version] = spec
77
+
78
+ apis = openapi.apis(spec)
79
+ all_apis[version] = apis
80
+
81
+ models = openapi.models(spec)
82
+ all_models[version] = models
83
+
84
+ env.globals["openapi"] = spec
85
+ env.globals["version"] = version
86
+
87
+ gem_path = output / GEM_NAME / version
88
+ gem_path.mkdir(parents=True, exist_ok=True)
89
+
90
+ for name, template in extra_files.items():
91
+ filename = gem_path / name
92
+ with filename.open("w") as fp:
93
+ fp.write(template.render(apis=apis, models=models))
94
+
95
+ for name, model in models.items():
96
+ filename = formatter.snake_case(name) + ".rb"
97
+ model_path = gem_path / "models" / filename
98
+ model_path.parent.mkdir(parents=True, exist_ok=True)
99
+ with model_path.open("w") as fp:
100
+ fp.write(model_j2.render(name=name, model=model))
101
+
102
+ for name, operations in apis.items():
103
+ filename = formatter.snake_case(name) + "_api.rb"
104
+ api_path = gem_path / "api" / filename
105
+ api_path.parent.mkdir(parents=True, exist_ok=True)
106
+ with api_path.open("w") as fp:
107
+ fp.write(api_j2.render(name=name, operations=operations))
108
+
109
+ models_output = output / GEM_NAME / "models.rb"
110
+ with models_output.open("w") as fp:
111
+ fp.write(package_j2.render(all_apis=all_apis, all_models=all_models))
112
+
113
+ common_output = output / GEM_NAME
114
+ for name, template in common_files.items():
115
+ filename = common_output / name
85
116
  with filename.open("w") as fp:
86
- fp.write(template.render(apis=apis, models=models))
87
-
88
- for name, model in models.items():
89
- filename = formatter.snake_case(name) + ".rb"
90
- model_path = gem_path / "models" / filename
91
- model_path.parent.mkdir(parents=True, exist_ok=True)
92
- with model_path.open("w") as fp:
93
- fp.write(model_j2.render(name=name, model=model))
94
-
95
- for name, operations in apis.items():
96
- filename = formatter.snake_case(name) + "_api.rb"
97
- api_path = gem_path / "api" / filename
98
- api_path.parent.mkdir(parents=True, exist_ok=True)
99
- with api_path.open("w") as fp:
100
- fp.write(api_j2.render(name=name, operations=operations))
117
+ fp.write(template.render(all_apis=all_apis, all_specs=all_specs, all_models=all_models))
@@ -273,6 +273,20 @@ def format_data_with_schema_list(
273
273
  ):
274
274
  name = get_name(schema)
275
275
 
276
+ if "oneOf" in schema:
277
+ for sub_schema in schema["oneOf"]:
278
+ try:
279
+ value = format_data_with_schema(
280
+ data,
281
+ sub_schema,
282
+ replace_values=replace_values,
283
+ default_name=name,
284
+ )
285
+ except (KeyError, ValueError) as e:
286
+ continue
287
+ return value
288
+ raise ValueError(f"{data} is not valid oneOf {schema}")
289
+
276
290
  parameters = ""
277
291
  for d in data:
278
292
  value = format_data_with_schema(
@@ -297,8 +311,11 @@ def format_data_with_schema_dict(
297
311
  name = get_name(schema)
298
312
 
299
313
  parameters = ""
300
- if "properties" in schema:
314
+ has_properties = schema.get("properties")
315
+ if has_properties:
301
316
  for k, v in data.items():
317
+ if k not in schema["properties"]:
318
+ continue
302
319
  value = format_data_with_schema(
303
320
  v,
304
321
  schema["properties"][k],
@@ -310,6 +327,8 @@ def format_data_with_schema_dict(
310
327
 
311
328
  if schema.get("additionalProperties"):
312
329
  for k, v in data.items():
330
+ if has_properties and k in schema["properties"]:
331
+ continue
313
332
  value = format_data_with_schema(
314
333
  v,
315
334
  schema["additionalProperties"],
@@ -32,7 +32,10 @@ def type_to_ruby(schema, alternative_name=None):
32
32
  if name:
33
33
  if "enum" in schema:
34
34
  return name
35
- if not schema.get("additionalProperties") and schema.get("type", "object") == "object":
35
+ if (
36
+ not (schema.get("additionalProperties") and not schema.get("properties"))
37
+ and schema.get("type", "object") == "object"
38
+ ):
36
39
  return name
37
40
 
38
41
  type_ = schema.get("type")
@@ -59,9 +62,9 @@ def type_to_ruby(schema, alternative_name=None):
59
62
  elif type_ == "boolean":
60
63
  return "Boolean"
61
64
  elif type_ == "array":
62
- return "Array<{}>".format(type_to_ruby(schema["items"]))
65
+ return "Array<{}>".format(type_to_ruby(schema["items"], name + "Item" if name else None))
63
66
  elif type_ == "object":
64
- if "additionalProperties" in schema:
67
+ if "additionalProperties" in schema and not schema.get("properties"):
65
68
  return "Hash<String, {}>".format(type_to_ruby(schema["additionalProperties"]))
66
69
  return (
67
70
  alternative_name
@@ -113,13 +116,13 @@ def child_models(schema, alternative_name=None, seen=None):
113
116
  if "items" in schema:
114
117
  yield from child_models(
115
118
  schema["items"],
116
- alternative_name=alternative_name + "Item" if alternative_name is not None else None,
119
+ alternative_name=name + "Item" if name is not None else None,
117
120
  seen=seen,
118
121
  )
119
122
 
120
- if (
121
- schema.get("type") == "object" or "properties" in schema or has_sub_models
122
- ) and "additionalProperties" not in schema:
123
+ if (schema.get("type") == "object" or "properties" in schema or has_sub_models) and not (
124
+ "additionalProperties" in schema and "properties" not in schema
125
+ ):
123
126
  if not has_sub_models and name is None:
124
127
  # this is a basic map object so we don't need a type
125
128
  return
@@ -458,7 +461,6 @@ def get_default(operation, attribute_path):
458
461
 
459
462
 
460
463
  def get_container(operation, attribute_path, with_type=False):
461
-
462
464
  def get_type(parameter):
463
465
  if with_type:
464
466
  return f", {get_type_for_parameter(parameter)}"
@@ -468,7 +470,11 @@ def get_container(operation, attribute_path, with_type=False):
468
470
  for name, parameter in parameters(operation):
469
471
  if name == attribute_name:
470
472
  if parameter["required"]:
471
- return '{}, "{}"{}'.format(name, ".".join(formatter.attribute_name(a) for a in attribute_path.split(".")[1:]), get_type(parameter))
473
+ return '{}, "{}"{}'.format(
474
+ name,
475
+ ".".join(formatter.attribute_name(a) for a in attribute_path.split(".")[1:]),
476
+ get_type(parameter),
477
+ )
472
478
  return f'opts, "{formatter.attribute_path(attribute_path)}"{get_type(parameter)}'
473
479
 
474
480
 
@@ -9,7 +9,7 @@ module {{ module_name }}::{{ version|upper }}
9
9
  class {{ classname }}
10
10
  attr_accessor :api_client
11
11
 
12
- def initialize(api_client = APIClient.default)
12
+ def initialize(api_client = {{ module_name }}::APIClient.default)
13
13
  @api_client = api_client
14
14
  end
15
15
 
@@ -40,15 +40,14 @@ module {{ module_name }}::{{ version|upper }}
40
40
  {%- endfor %}
41
41
  # @return [Array<({% if returnType %}{{ returnType }}{% else %}nil{% endif %}, Integer, Hash)>] {% if returnType %}{{ returnType }} data{% else %}nil{% endif %}, response status code and response headers
42
42
  def {{ operation.operationId|snake_case }}_with_http_info({% for name, parameter in operation|parameters if parameter.required %}{{ name|attribute_name }}, {% endfor %}opts = {})
43
-
44
- if @api_client.config.unstable_operations.has_key?(:{{ operation.operationId|snake_case }})
45
- unstable_enabled = @api_client.config.unstable_operations[:{{ operation.operationId|snake_case }}]
46
- if unstable_enabled
47
- @api_client.config.logger.warn format("Using unstable operation '%s'", "{{ operation.operationId|snake_case }}")
48
- else
49
- raise APIError.new(message: format("Unstable operation '%s' is disabled", "{{ operation.operationId|snake_case }}"))
50
- end
43
+ {%- if "x-unstable" in operation %}
44
+ unstable_enabled = @api_client.config.unstable_operations["{{ version }}.{{ operation.operationId|snake_case }}".to_sym]
45
+ if unstable_enabled
46
+ @api_client.config.logger.warn format("Using unstable operation '%s'", "{{ version }}.{{ operation.operationId|snake_case }}")
47
+ else
48
+ raise {{ module_name }}::APIError.new(message: format("Unstable operation '%s' is disabled", "{{ version }}.{{ operation.operationId|snake_case }}"))
51
49
  end
50
+ {%- endif %}
52
51
 
53
52
  if @api_client.config.debugging
54
53
  @api_client.config.logger.debug 'Calling API: {{classname}}.{{ operation.operationId|snake_case }} ...'
@@ -198,7 +197,8 @@ module {{ module_name }}::{{ version|upper }}
198
197
  :form_params => form_params,
199
198
  :body => post_body,
200
199
  :auth_names => auth_names,
201
- :return_type => return_type
200
+ :return_type => return_type,
201
+ :api_version => "{{ version|upper }}"
202
202
  )
203
203
 
204
204
  data, status_code, headers = @api_client.call_api(Net::HTTP::{{ httpMethod|camel_case }}, local_var_path, new_options)
@@ -218,8 +218,9 @@ module {{ module_name }}::{{ version|upper }}
218
218
  #
219
219
  # @yield [{{ get_type_at_path(operation, pagination.resultsPath) }}] Paginated items
220
220
  def {{ operation.operationId|snake_case }}_with_pagination({% for name, parameter in operation|parameters if parameter.required %}{{ name|attribute_name }}, {% endfor %}opts = {})
221
+ api_version = "{{ version|upper }}"
221
222
  page_size = @api_client.get_attribute_from_path({{ get_container(operation, pagination.limitParam) }}, {{ get_default(operation, pagination.limitParam) }})
222
- @api_client.set_attribute_from_path({{ get_container(operation, pagination.limitParam, True) }}, page_size)
223
+ @api_client.set_attribute_from_path(api_version, {{ get_container(operation, pagination.limitParam, True) }}, page_size)
223
224
  while true do
224
225
  response = {{ operation.operationId|snake_case }}({% for name, parameter in operation|parameters if parameter.required %}{{ name|attribute_name }}, {% endfor %}opts)
225
226
  @api_client.get_attribute_from_path(response, "{{ pagination.resultsPath|attribute_path }}").each { |item| yield(item) }
@@ -227,10 +228,10 @@ module {{ module_name }}::{{ version|upper }}
227
228
  break
228
229
  end
229
230
  {%- if pagination.pageOffsetParam %}
230
- @api_client.set_attribute_from_path({{ get_container(operation, pagination.pageOffsetParam, True) }}, @api_client.get_attribute_from_path({{ get_container(operation, pagination.pageOffsetParam) }}, 0) + page_size)
231
+ @api_client.set_attribute_from_path(api_version, {{ get_container(operation, pagination.pageOffsetParam, True) }}, @api_client.get_attribute_from_path({{ get_container(operation, pagination.pageOffsetParam) }}, 0) + page_size)
231
232
  {%- endif %}
232
233
  {%- if pagination.cursorParam %}
233
- @api_client.set_attribute_from_path({{ get_container(operation, pagination.cursorParam, True) }}, @api_client.get_attribute_from_path(response, "{{ pagination.cursorPath }}"))
234
+ @api_client.set_attribute_from_path(api_version, {{ get_container(operation, pagination.cursorParam, True) }}, @api_client.get_attribute_from_path(response, "{{ pagination.cursorPath }}"))
234
235
  {%- endif %}
235
236
  end
236
237
  end
@@ -8,8 +8,12 @@ require 'logger'
8
8
  require 'tempfile'
9
9
  require 'time'
10
10
  require 'httparty'
11
+ begin
12
+ require 'zstandard'
13
+ rescue LoadError
14
+ end
11
15
 
12
- module {{ module_name }}::{{ version|upper }}
16
+ module {{ module_name }}
13
17
  class APIClient
14
18
  # The Configuration object holding settings to be used in the API client.
15
19
  attr_accessor :config
@@ -25,7 +29,6 @@ module {{ module_name }}::{{ version|upper }}
25
29
  @config = config
26
30
  @user_agent = "#{{ '{' }}{{ module_name }}::USER_AGENT}"
27
31
  @default_headers = {
28
- 'Content-Type' => 'application/json',
29
32
  'User-Agent' => @user_agent
30
33
  }
31
34
  @default_headers['Accept-Encoding'] = 'gzip' if @config.compress
@@ -101,7 +104,7 @@ module {{ module_name }}::{{ version|upper }}
101
104
  end
102
105
 
103
106
  if opts[:return_type]
104
- data = deserialize(response, opts[:return_type])
107
+ data = deserialize(opts[:api_version], response, opts[:return_type])
105
108
  else
106
109
  data = nil
107
110
  end
@@ -188,6 +191,8 @@ module {{ module_name }}::{{ version|upper }}
188
191
  gzip.close
189
192
  elsif header_params['Content-Encoding'] == 'deflate'
190
193
  data = Zlib::deflate(data)
194
+ elsif header_params['Content-Encoding'] == 'zstd1'
195
+ data = Zstandard.deflate(data)
191
196
  end
192
197
  data
193
198
  end
@@ -206,9 +211,10 @@ module {{ module_name }}::{{ version|upper }}
206
211
 
207
212
  # Deserialize the response to the given return type.
208
213
  #
214
+ # @param [String] the api version
209
215
  # @param [Response] response HTTP response
210
216
  # @param [String] return_type some examples: "User", "Array<User>", "Hash<String, Integer>"
211
- def deserialize(response, return_type)
217
+ def deserialize(api_version, response, return_type)
212
218
  body = response.body
213
219
 
214
220
  # handle file downloading - return the File instance processed in request callbacks
@@ -241,14 +247,14 @@ module {{ module_name }}::{{ version|upper }}
241
247
  end
242
248
  end
243
249
 
244
- convert_to_type data, return_type
250
+ convert_to_type data, return_type, api_version
245
251
  end
246
252
 
247
253
  # Convert data to the given return type.
248
254
  # @param [Object] data Data to be converted
249
255
  # @param [String] return_type Return type
250
256
  # @return [Mixed] Data in a particular type
251
- def convert_to_type(data, return_type)
257
+ def convert_to_type(data, return_type, api_version)
252
258
  return nil if data.nil?
253
259
  case return_type
254
260
  when 'String'
@@ -271,16 +277,16 @@ module {{ module_name }}::{{ version|upper }}
271
277
  when /\AArray<(.+)>\z/
272
278
  # e.g. Array<Pet>
273
279
  sub_type = $1
274
- data.map { |item| convert_to_type(item, sub_type) }
280
+ data.map { |item| convert_to_type(item, sub_type, api_version) }
275
281
  when /\AHash\<String, (.+)\>\z/
276
282
  # e.g. Hash<String, Integer>
277
283
  sub_type = $1
278
284
  {}.tap do |hash|
279
- data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
285
+ data.each { |k, v| hash[k] = convert_to_type(v, sub_type, api_version) }
280
286
  end
281
287
  else
282
288
  # models (e.g. Pet) or oneOf
283
- klass = {{ module_name }}::{{ version|upper }}.const_get(return_type)
289
+ klass = {{ module_name }}.const_get(api_version).const_get(return_type)
284
290
  klass.respond_to?(:openapi_one_of) ? klass.build(data) : klass.build_from_hash(data)
285
291
  end
286
292
  end
@@ -297,7 +303,7 @@ module {{ module_name }}::{{ version|upper }}
297
303
  def build_request_url(path, opts = {})
298
304
  # Add leading and trailing slashes to path
299
305
  path = "/#{path}".gsub(/\/+/, '/')
300
- @config.base_url(opts[:operation]) + path
306
+ @config.base_url("#{opts[:api_version].respond_to?(:downcase) ? opts[:api_version].downcase : opts[:api_version]}.#{opts[:operation]}") + path
301
307
  end
302
308
 
303
309
  # Update header and query params based on authentication settings.
@@ -330,9 +336,7 @@ module {{ module_name }}::{{ version|upper }}
330
336
  # @return [String] the Accept header (e.g. application/json)
331
337
  def select_header_accept(accepts)
332
338
  return nil if accepts.nil? || accepts.empty?
333
- # use JSON when present, otherwise use all of the provided
334
- json_accept = accepts.find { |s| json_mime?(s) }
335
- json_accept || accepts.join(',')
339
+ accepts.join(', ')
336
340
  end
337
341
 
338
342
  # Return Content-Type header based on an array of content types provided.
@@ -414,12 +418,13 @@ module {{ module_name }}::{{ version|upper }}
414
418
 
415
419
  # Set an attribute at the given path
416
420
  #
421
+ # @param [String] api_version The api version
417
422
  # @param [Object] obj The source object
418
423
  # @param [String] attribute_path The path spefication, separated by "."
419
424
  # @param [Object] builder The class matching the top level attribute
420
425
  # @param [Object] value The value to set
421
426
  # @!visibility private
422
- def set_attribute_from_path(obj, attribute_path, builder, value)
427
+ def set_attribute_from_path(api_version, obj, attribute_path, builder, value)
423
428
  attrs = attribute_path.split(".")
424
429
  last = attrs.pop
425
430
  i = 0
@@ -430,7 +435,7 @@ module {{ module_name }}::{{ version|upper }}
430
435
  else
431
436
  obj = obj.send(attr)
432
437
  end
433
- builder = DatadogAPIClient::V2.const_get(builder.openapi_types[attr.to_sym]) if i > 0
438
+ builder = DatadogAPIClient.const_get(api_version).const_get(builder.openapi_types[attr.to_sym]) if i > 0
434
439
  obj = builder.new if obj.nil?
435
440
  i += 1
436
441
  end
@@ -442,4 +447,48 @@ module {{ module_name }}::{{ version|upper }}
442
447
  end
443
448
  end
444
449
  end
450
+
451
+ class APIError < StandardError
452
+ attr_reader :code, :response_headers, :response_body
453
+
454
+ # Usage examples:
455
+ # APIError.new
456
+ # APIError.new("message")
457
+ # APIError.new(:code => 500, :response_headers => {}, :response_body => "")
458
+ # APIError.new(:code => 404, :message => "Not Found")
459
+ def initialize(arg = nil)
460
+ if arg.is_a? Hash
461
+ if arg.key?(:message) || arg.key?('message')
462
+ super(arg[:message] || arg['message'])
463
+ else
464
+ super arg
465
+ end
466
+
467
+ arg.each do |k, v|
468
+ instance_variable_set "@#{k}", v
469
+ end
470
+ else
471
+ super arg
472
+ end
473
+ end
474
+
475
+ # Override to_s to display a friendly error message
476
+ def to_s
477
+ message
478
+ end
479
+
480
+ def message
481
+ if @message.nil?
482
+ msg = "Error message: the server returns an error"
483
+ else
484
+ msg = @message
485
+ end
486
+
487
+ msg += "\nHTTP status code: #{code}" if code
488
+ msg += "\nResponse headers: #{response_headers}" if response_headers
489
+ msg += "\nResponse body: #{response_body}" if response_body
490
+
491
+ msg
492
+ end
493
+ end
445
494
  end
@@ -2,7 +2,7 @@
2
2
  {% include "api_info.j2" %}
3
3
  =end
4
4
 
5
- module {{ module_name }}::{{ version|upper }}
5
+ module {{ module_name }}
6
6
  class Configuration
7
7
  # Defines url scheme
8
8
  attr_accessor :scheme
@@ -148,13 +148,15 @@ module {{ module_name }}::{{ version|upper }}
148
148
  @compress = true
149
149
  @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
150
150
  @unstable_operations = {
151
- {%- for path in openapi.paths.values() %}
152
- {%- for operation in path.values() %}
151
+ {%- for version, apis in all_apis.items() %}
152
+ {%- for operations in apis.values() %}
153
+ {%- for _, _, operation in operations|sort(attribute="2.operationId") %}
153
154
  {%- if "x-unstable" in operation %}
154
- {{ operation.operationId|snake_case }}: false,
155
+ "{{ version }}.{{ operation.operationId|snake_case }}": false,
155
156
  {%- endif %}
156
157
  {%- endfor %}
157
158
  {%- endfor %}
159
+ {%- endfor %}
158
160
  }
159
161
  @server_variables[:site] = ENV['DD_SITE'] if ENV.key? 'DD_SITE'
160
162
  {%- for name, schema in openapi.components.securitySchemes.items() if "x-env-name" in schema and schema.in == "header" and schema.type == "apiKey" %}
@@ -191,10 +193,10 @@ module {{ module_name }}::{{ version|upper }}
191
193
 
192
194
  # Returns base URL for specified operation based on server settings
193
195
  def base_url(operation = nil)
194
- index = server_operation_index.fetch(operation, server_index)
196
+ index = server_operation_index.fetch(operation.to_sym, server_index)
195
197
  return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
196
198
 
197
- server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
199
+ server_url(index, server_operation_variables.fetch(operation.to_sym, server_variables), operation_server_settings[operation.to_sym])
198
200
  end
199
201
 
200
202
  # Gets API key (with prefix if set).
@@ -294,11 +296,12 @@ module {{ module_name }}::{{ version|upper }}
294
296
 
295
297
  def operation_server_settings
296
298
  {
297
- {%- for path in openapi.paths.values() %}
299
+ {%- for version, spec in all_specs.items() %}
300
+ {%- for path in spec.paths.values() %}
298
301
  {%- for operation in path.values() %}
299
302
  {%- for server in operation.servers %}
300
303
  {%- if loop.first %}
301
- {{ operation.operationId|snake_case }}: [
304
+ "{{ version }}.{{ operation.operationId|snake_case }}": [
302
305
  {%- endif %}
303
306
  {{ server_configuration(server)|indent(10) }}{% if not loop.last %},{% endif %}
304
307
  {%- if loop.last %}
@@ -307,6 +310,7 @@ module {{ module_name }}::{{ version|upper }}
307
310
  {%- endfor %}
308
311
  {%- endfor %}
309
312
  {%- endfor %}
313
+ {%- endfor %}
310
314
  }
311
315
  end
312
316
 
@@ -8,7 +8,7 @@ require 'datadog_api_client'
8
8
  {%- if context._enable_operations %}
9
9
  DatadogAPIClient::V2.configure do |config|
10
10
  {%- for operation in context._enable_operations %}
11
- config.unstable_operations[:{{ operation|snake_case }}] = true
11
+ config.unstable_operations["{{ version }}.{{ operation|snake_case }}".to_sym] = true
12
12
  {%- endfor %}
13
13
  end
14
14
  {%- endif %}
@@ -0,0 +1,28 @@
1
+ require 'zeitwerk'
2
+
3
+ module {{ module_name }}
4
+ class {{ module_name }}Inflector < Zeitwerk::Inflector
5
+ def camelize(basename, abspath)
6
+ model_name = "#{abspath.match('v[0-9]')}.#{basename}"
7
+ overrides[model_name] || basename.split('_').each(&:capitalize!).join
8
+ end
9
+
10
+ def overrides
11
+ @overrides ||= {
12
+ # Models
13
+ {%- for version, models in all_models.items() %}
14
+ {%- for model in models|sort %}
15
+ "{{ version }}.{{ model|snake_case }}" => "{{ model }}",
16
+ {%- endfor %}
17
+ {%- endfor %}
18
+ # APIs
19
+ {%- for version, apis in all_apis.items() %}
20
+ {%- for api in apis|sort %}
21
+ {%- set name = api.replace(" ", "") + "API" %}
22
+ "{{ version }}.{{ api|snake_case }}_api" => "{{ name }}"{%-if not loop.last %},{% endif %}
23
+ {%- endfor %}{%-if not loop.last %},{% endif %}
24
+ {%- endfor %}
25
+ }
26
+ end
27
+ end
28
+ end
@@ -10,7 +10,7 @@ module {{ module_name }}::{{ version|upper }}
10
10
  # @!visibility private
11
11
  def build_from_hash(value)
12
12
  constantValues = self.class.constants.select { |c| self.class::const_get(c) == value }
13
- constantValues.empty? ? {{ module_name }}::{{ version|upper }}::UnparsedObject.new(value) : value
13
+ constantValues.empty? ? {{ module_name }}::UnparsedObject.new(value) : value
14
14
  end
15
15
 
16
16
  module ClassMethods
@@ -107,7 +107,7 @@ module {{ module_name }}::{{ version|upper }}
107
107
  # models (e.g. Pet) or oneOf
108
108
  klass = {{ module_name }}::{{ version|upper }}.const_get(type)
109
109
  res = klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
110
- if res.instance_of? {{ module_name }}::{{ version|upper }}::UnparsedObject
110
+ if res.instance_of? {{ module_name }}::UnparsedObject
111
111
  self._unparsed = true
112
112
  end
113
113
  res