datadog_api_client 1.9.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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