From e0abb3a0725b7b41bc751d87d857ba04ab3e58d8 Mon Sep 17 00:00:00 2001 From: Mario de la Ossa Date: Mon, 21 Aug 2023 18:02:46 -0600 Subject: [PATCH] Support influxdbv2 in custom metric drain (#323) * Support influxdbv2 in custom metric drain * Compatibility with newer ruby 2.x --- .travis.yml | 4 +++ README.md | 1 + aptible-cli.gemspec | 1 + cleanup_bundler | 14 +++++++++ lib/aptible/cli/subcommands/metric_drain.rb | 29 +++++++++++++++++++ .../cli/subcommands/metric_drain_spec.rb | 28 +++++++++++++++++- 6 files changed, 76 insertions(+), 1 deletion(-) create mode 100755 cleanup_bundler diff --git a/.travis.yml b/.travis.yml index 8c4f849e..c7e43a49 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,11 @@ rvm: - "2.4" - "2.5" - "2.6" + - "2.7" +before_install: + - ./cleanup_bundler + - gem install bundler -v '< 2' script: - bundle exec rake - bundle exec script/sync-readme-usage diff --git a/README.md b/README.md index 9d38dfae..ec869b99 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ Commands: aptible metric_drain:create:datadog HANDLE --api_key DATADOG_API_KEY --site DATADOG_SITE --environment ENVIRONMENT # Create a Datadog Metric Drain aptible metric_drain:create:influxdb HANDLE --db DATABASE_HANDLE --environment ENVIRONMENT # Create an InfluxDB Metric Drain aptible metric_drain:create:influxdb:custom HANDLE --username USERNAME --password PASSWORD --url URL_INCLUDING_PORT --db INFLUX_DATABASE_NAME --environment ENVIRONMENT # Create an InfluxDB Metric Drain + aptible metric_drain:create:influxdb:customv2 HANDLE --org ORGANIZATION --token INFLUX_TOKEN --url URL_INCLUDING_PORT --bucket INFLUX_BUCKET_NAME --environment ENVIRONMENT # Create an InfluxDB v2 Metric Drain aptible metric_drain:deprovision HANDLE --environment ENVIRONMENT # Deprovisions a Metric Drain aptible metric_drain:list # List all Metric Drains aptible operation:cancel OPERATION_ID # Cancel a running operation diff --git a/aptible-cli.gemspec b/aptible-cli.gemspec index e39ffeeb..c560a1e1 100644 --- a/aptible-cli.gemspec +++ b/aptible-cli.gemspec @@ -30,6 +30,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'chronic_duration', '~> 0.10.6' spec.add_dependency 'cbor' spec.add_dependency 'aws-sdk', '~> 2.0' + spec.add_dependency 'bigdecimal', '~> 1.3.5' # https://github.com/ruby/bigdecimal#which-version-should-you-select # Temporarily pin ffi until https://github.com/ffi/ffi/issues/868 is fixed spec.add_dependency 'ffi', '<= 1.14.1' if Gem.win_platform? diff --git a/cleanup_bundler b/cleanup_bundler new file mode 100755 index 00000000..88aa0bf2 --- /dev/null +++ b/cleanup_bundler @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby + +# Newer rubies have Bundler 2.x installed as default so it can't be deleted +# We need Bundler 1.x + +gempaths = `gem env gempath`.split(':') +gempaths.each do |gempath| + # lookup bundler-*.gemspec files and delete them + # this is the only way to completely cleanup default bundler + # Note: the bundler gemspecs' paths are different for CRuby and JRuby + Dir.glob(gempath.strip + '/specifications/**/bundler-*.gemspec').each do |p| + File.delete(p) + end +end diff --git a/lib/aptible/cli/subcommands/metric_drain.rb b/lib/aptible/cli/subcommands/metric_drain.rb index 940b068c..f8a8653b 100644 --- a/lib/aptible/cli/subcommands/metric_drain.rb +++ b/lib/aptible/cli/subcommands/metric_drain.rb @@ -85,6 +85,35 @@ def self.included(thor) create_metric_drain(account, opts) end + desc 'metric_drain:create:influxdb:customv2 HANDLE '\ + '--org ORGANIZATION --token INFLUX_TOKEN ' \ + '--url URL_INCLUDING_PORT ' \ + '--bucket INFLUX_BUCKET_NAME ' \ + '--environment ENVIRONMENT', + 'Create an InfluxDB v2 Metric Drain' + option :bucket, type: :string + option :org, type: :string + option :token, type: :string + option :url, type: :string + option :environment + define_method 'metric_drain:create:influxdb:customv2' do |handle| + account = ensure_environment(options) + + config = { + address: options[:url], + org: options[:org], + authToken: options[:token], + bucket: options[:bucket] + } + opts = { + handle: handle, + drain_configuration: config, + drain_type: :influxdb2 + } + + create_metric_drain(account, opts) + end + desc 'metric_drain:create:datadog HANDLE '\ '--api_key DATADOG_API_KEY '\ '--site DATADOG_SITE ' \ diff --git a/spec/aptible/cli/subcommands/metric_drain_spec.rb b/spec/aptible/cli/subcommands/metric_drain_spec.rb index fe771e0e..d13903e1 100644 --- a/spec/aptible/cli/subcommands/metric_drain_spec.rb +++ b/spec/aptible/cli/subcommands/metric_drain_spec.rb @@ -86,7 +86,7 @@ def expect_provision_metric_drain(create_opts, provision_opts = {}) end context 'influxdb:custom' do - it 'creates a new InfluxDB metric drain' do + it 'creates a new InfluxDB v1 metric drain' do opts = { handle: 'test-influxdb-custom', drain_type: :influxdb, @@ -111,6 +111,32 @@ def expect_provision_metric_drain(create_opts, provision_opts = {}) end end + context 'influxdb:customv2' do + it 'creates a new InfluxDB v2 metric drain' do + opts = { + handle: 'test-influxdb2-custom', + drain_type: :influxdb2, + drain_configuration: { + address: 'https://test.foo.com:443', + org: 'foobar', + authToken: 'bar', + bucket: 'foo' + } + } + expect_provision_metric_drain(opts) + + subject.options = { + environment: account.handle, + bucket: 'foo', + token: 'bar', + org: 'foobar', + url: 'https://test.foo.com:443' + } + subject.send('metric_drain:create:influxdb:customv2', + 'test-influxdb2-custom') + end + end + context 'datadog' do it 'creates a new Datadog metric drain' do opts = {