base on Ruby client for the Datadog API # datadog-api-client-ruby
This repository contains a Ruby API client for the [Datadog API](https://docs.datadoghq.com/api/).
The code is generated using [`generator`](https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator) package.
## Requirements
Installing and using the API client library requires:
1. Ruby 2.6+
## Installation
The following steps will help you quickly start interacting with Datadog APIs using Ruby client.
### Install published Ruby gem
1. Add the `datadog_api_client` gem to you Gemfile:
```ruby
source 'https://rubygems.org'
gem 'datadog_api_client'
```
2. Install the gem with `bundle install`
3. (optional) You can configure site and [authentication](#authentication) using environment variables or code block:
```ruby
DatadogAPIClient.configure do |config|
config.server_variables[:site] = 'datadoghq.eu'
end
```
### Build a gem
1. Build the Ruby code into a gem:
```shell
gem build datadog_api_client.gemspec
```
2. Install the gem locally:
```shell
gem install ./datadog_api_client-*.gem
```
### Install from Git
1. Add the following in the Gemfile:
```ruby
gem 'datadog_api_client', :git => 'https://github.com/DataDog/datadog-api-client-ruby.git'
```
2. Install the gem with `bundle install`
### Include the Ruby code directly
1. Create `example.rb` script (find inspiration on https://docs.datadoghq.com/api/)
2. Include the Ruby code directly using `-I` as follows:
```shell
ruby -Ilib example.rb
```
## Getting Started
Please follow the [installation](#installation) instruction and execute the following Ruby code:
```ruby
require 'datadog_api_client'
api_instance = DatadogAPIClient::V1::IPRangesAPI.new
begin
result = api_instance.get_ip_ranges
p result
rescue DatadogAPIClient::APIError => e
puts "Error when calling IPRangesAPI->get_ip_ranges: #{e}"
end
```
### Authentication
Authenticate with the API by providing your API and Application keys in the configuration:
```ruby
DatadogAPIClient.configure do |config|
config.api_key = ENV['NON_STANDARD_NAME_FOR_DD_API_KEY']
config.application_key = ENV['NON_STANDARD_NAME_FOR_DD_APP_KEY']
end
```
### Unstable (Beta) Endpoints
This client includes access to Datadog API endpoints while they are in an unstable state and may undergo breaking changes. An extra configuration step is required to enable these endpoints:
```ruby
DatadogAPIClient.configure do |config|
config.unstable_operations[:'<api_version>.<unstable_operation_id>'] = true
end
```
where `<unstable_operation_id>` is the name of the method used to interact with that endpoint. For example: `list_log_indexes`, or `get_logs_index`
### Changing Server
When talking to a different server, like the `eu` instance, change the `server_variables` on your configuration object:
```ruby
config = DatadogAPIClient::Configuration.new
config.server_variables[:site] = "datadoghq.eu"
client = DatadogAPIClient::APIClient.new(config)
```
### Disable compressed payloads
If you want to disable GZIP compressed responses, set the `compress` flag
on your configuration object:
```ruby
config = DatadogAPIClient::Configuration.new
config.compress = false
client = DatadogAPIClient::APIClient.new(config)
```
### Enable requests logging
If you want to enable requests logging, set the `debugging` flag
on your configuration object:
```ruby
config = DatadogAPIClient::Configuration.new
config.debugging = true
client = DatadogAPIClient::APIClient.new(config)
```
### Configure proxy
You can configure the client to use proxy by setting `http_proxyaddr` and `http_proxyport` keys on configuration object:
```ruby
config = DatadogAPIClient::Configuration.new
config.http_proxyaddr = '127.0.0.1'
config.http_proxyport = '3128'
client = DatadogAPIClient::APIClient.new(config)
```
### Pagination
Several listing operations have a pagination method to help consume all the items available.
For example, to retrieve all your incidents:
```ruby
require "datadog_api_client"
DatadogAPIClient.configure do |config|
config.unstable_operations[:'v2.list_incidents'] = true
end
api_instance = DatadogAPIClient::V2::IncidentsAPI.new
api_instance.list_incidents_with_pagination() do |incident|
p incident.id
end
```
### Retry
To enable the client to retry when rate limited (status 429) or status 500 and above:
```ruby
config = DatadogAPIClient::Configuration.new
config.enable_retry = true
client = DatadogAPIClient::APIClient.new(config)
```
The interval between 2 retry attempts will be the value of the `x-ratelimit-reset` response header when available.
If not, it will be :
```ruby
(config.backoffMultiplier ** current_retry_count) * config.backoffBase
```
The maximum number of retry attempts is `3` by default and can be modified with
```ruby
config.maxRetries
```
## Documentation
If you are interested in general documentation for all public Datadog API endpoints, checkout the [general documentation site][api docs].
Developer documentation for supported endpoints and models is available in [Github pages][github pages].
For contributing, checkout the [development guide][development docs].
## Author
[email protected]
[api docs]: https://docs.datadoghq.com/api/
[github pages]: https://datadoghq.dev/datadog-api-client-ruby/
[development docs]: https://github.com/DataDog/datadog-api-client-ruby/blob/master/DEVELOPMENT.md
", Assign "at most 3 tags" to the expected json: {"id":"2599","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"