# frozen_string_literal: true require 'json' require 'rest-client' require 'uri' require 'stringio' require_relative 'utility' class DatadogMetrics def initialize(apikey, url) @apikey = apikey @url = url end def add_custom_data(ddtags, record) if ddtags.length() > 0 record_series = record['series'] data_array = [] record_series.each do |interim_data| interim_data['tags'] ||= [] interim_data['tags'].push(*ddtags) data_array << interim_data end record['series'] = data_array return record end return record end def send_metrics(ddtags, record, http_proxy, verify_ssl, request_timeout, gzip_compression, logger) # Get the current local timestamp logger.info("Additional tags to be added to metrics are:", ddtags) metrics_data = add_custom_data(ddtags, record) logger.info("Sending received metrics data") if http_proxy RestClient.proxy = URI.parse(http_proxy) logger.info("Using http_proxy param to set proxy for request. Proxy url: #{RestClient.proxy}") elsif ENV['HTTP_PROXY'] RestClient.proxy = ENV['HTTP_PROXY'] logger.info("Using 'HTTP_PROXY' environment variable to set proxy for request. Proxy url: #{RestClient.proxy}") elsif ENV['http_proxy'] RestClient.proxy = ENV['http_proxy'] logger.info("Using 'http_proxy' environment variable to set proxy for request. Proxy url: #{RestClient.proxy}") elsif ENV['https_proxy'] RestClient.proxy = ENV['https_proxy'] logger.info("Using 'https_proxy' environment variable to set proxy for request. Proxy url: #{RestClient.proxy}") end headers = { 'DD-API-KEY': @apikey, content_type: :json } payload = metrics_data.to_json if gzip_compression payload = Utility.compress_payload(metrics_data, logger) headers[:'Content-Encoding'] = 'gzip' end request = RestClient::Request.new( method: :post, url: @url, payload: payload, headers: headers, verify_ssl: verify_ssl, timeout: request_timeout ) request.execute do |response, request, result| case response.code when 202 logger.info("Metrics were successfully sent to DataDog") return response.body else logger.info("Cannot send metrics to DataDog url: %s. Received response code: %d, Response body: %s" % [@url, response.code, response.body]) end end end end