datadog_proxy 0.0.3 → 0.0.4
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.
- checksums.yaml +4 -4
 - data/datadog_proxy.gemspec +1 -0
 - data/lib/datadog_proxy/app.rb +17 -4
 - data/lib/datadog_proxy/datadog_client.rb +25 -7
 - data/lib/datadog_proxy/version.rb +1 -1
 - metadata +15 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: d3eb27154e8cc8f437356761bcd3b4ead2f4662c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: fe6c1e54b4decfadd4eddb5c6b612486d996d419
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9727e86e1191f043f8bd59ab69427442b013ad973521f06aea83c9b68b92d1812a97d380a8c8e515f3b8e30563918322bd9ac53b19ec6358ed6568ea24ec5795
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: fc8064c5c1dd47c182619fe5229d30f8ef136764aae823f30c536ce3c32032f52f7ed1cd0c669baadc4cb2af22b4fdbf54adf62eba92294c41ea9e9f2923ad64
         
     | 
    
        data/datadog_proxy.gemspec
    CHANGED
    
    | 
         @@ -20,6 +20,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       20 
20 
     | 
    
         
             
              spec.add_dependency 'sinatra', '~> 1.4.5'
         
     | 
| 
       21 
21 
     | 
    
         
             
              spec.add_dependency 'dogapi', '~> 1.10.0'
         
     | 
| 
       22 
22 
     | 
    
         
             
              spec.add_dependency 'dotenv', '~> 0.11.1'
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_dependency 'chronic', '~> 0.10.2'
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.6"
         
     | 
| 
       25 
26 
     | 
    
         
             
              spec.add_development_dependency "rake"
         
     | 
    
        data/lib/datadog_proxy/app.rb
    CHANGED
    
    | 
         @@ -1,14 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'datadog_proxy'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'sinatra'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'chronic'
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            module DatadogProxy
         
     | 
| 
       5 
6 
     | 
    
         
             
              class App < Sinatra::Application
         
     | 
| 
      
 7 
     | 
    
         
            +
                class Error < StandardError; end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       6 
9 
     | 
    
         
             
                def initialize(*args)
         
     | 
| 
       7 
10 
     | 
    
         
             
                  super(*args)
         
     | 
| 
       8 
11 
     | 
    
         
             
                end
         
     | 
| 
       9 
12 
     | 
    
         | 
| 
       10 
13 
     | 
    
         
             
                def client
         
     | 
| 
       11 
     | 
    
         
            -
                  p :hello
         
     | 
| 
       12 
14 
     | 
    
         
             
                  @_client ||= DatadogClient.new(ENV['DATADOG_API_KEY'], ENV['DATADOG_APP_KEY'])
         
     | 
| 
       13 
15 
     | 
    
         
             
                end
         
     | 
| 
       14 
16 
     | 
    
         | 
| 
         @@ -28,14 +30,25 @@ module DatadogProxy 
     | 
|
| 
       28 
30 
     | 
    
         
             
                get '/graphs/snapshot' do
         
     | 
| 
       29 
31 
     | 
    
         
             
                  options = {}
         
     | 
| 
       30 
32 
     | 
    
         
             
                  options[:query] = params[:query]
         
     | 
| 
       31 
     | 
    
         
            -
                  options[:start] =  
     | 
| 
       32 
     | 
    
         
            -
                  options[:end] =  
     | 
| 
      
 33 
     | 
    
         
            +
                  options[:start] = _parse_time(params[:start]) if params[:start]
         
     | 
| 
      
 34 
     | 
    
         
            +
                  options[:end] = _parse_time(params[:end]) if params[:end]
         
     | 
| 
       33 
35 
     | 
    
         
             
                  options[:duration] = params[:duration].to_i if params[:duration]
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
            p options
         
     | 
| 
       35 
37 
     | 
    
         
             
                  url = client.graph_snapshot_url(options)
         
     | 
| 
       36 
38 
     | 
    
         | 
| 
       37 
39 
     | 
    
         
             
                  redirect url, 302
         
     | 
| 
       38 
40 
     | 
    
         
             
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                private
         
     | 
| 
      
 43 
     | 
    
         
            +
                def _parse_time(str)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  if /^\d+$/ =~ str
         
     | 
| 
      
 45 
     | 
    
         
            +
                    Time.at(str.to_i)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  else
         
     | 
| 
      
 47 
     | 
    
         
            +
                    time = Chronic.parse(str)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    return time if time
         
     | 
| 
      
 49 
     | 
    
         
            +
                    raise Error, "Cannot parse time (#{str})"
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
       39 
52 
     | 
    
         
             
              end
         
     | 
| 
       40 
53 
     | 
    
         
             
            end
         
     | 
| 
       41 
54 
     | 
    
         | 
| 
         @@ -1,5 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'datadog_proxy'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'dogapi'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'timeout'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'net/https'
         
     | 
| 
       3 
5 
     | 
    
         | 
| 
       4 
6 
     | 
    
         
             
            module DatadogProxy
         
     | 
| 
       5 
7 
     | 
    
         
             
              class DatadogClient
         
     | 
| 
         @@ -7,15 +9,10 @@ module DatadogProxy 
     | 
|
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
                def initialize(api_key, app_key)
         
     | 
| 
       9 
11 
     | 
    
         
             
                  @client = Dogapi::Client.new(api_key, app_key)
         
     | 
| 
       10 
     | 
    
         
            -
                  @graph_snapshot_url_cache = {}
         
     | 
| 
       11 
12 
     | 
    
         
             
                end
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
                def graph_snapshot_url(options)
         
     | 
| 
       14 
     | 
    
         
            -
                   
     | 
| 
       15 
     | 
    
         
            -
                  @graph_snapshot_url_cache[options.hash] ||= _graph_snapshot_url(options)
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  # Append time to avoid the graph is cached.
         
     | 
| 
       18 
     | 
    
         
            -
                  "#{@graph_snapshot_url_cache[options.hash]}?#{Time.now.to_i}"
         
     | 
| 
      
 15 
     | 
    
         
            +
                  _graph_snapshot_url(options)
         
     | 
| 
       19 
16 
     | 
    
         
             
                end
         
     | 
| 
       20 
17 
     | 
    
         | 
| 
       21 
18 
     | 
    
         
             
                private
         
     | 
| 
         @@ -47,7 +44,28 @@ module DatadogProxy 
     | 
|
| 
       47 
44 
     | 
    
         
             
                    raise Error, "Failed to get a snapshot."
         
     | 
| 
       48 
45 
     | 
    
         
             
                  end
         
     | 
| 
       49 
46 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                  response[1]['snapshot_url']
         
     | 
| 
      
 47 
     | 
    
         
            +
                  snapshot_url = response[1]['snapshot_url']
         
     | 
| 
      
 48 
     | 
    
         
            +
                  timeout(10) do
         
     | 
| 
      
 49 
     | 
    
         
            +
                    _wait_for_generating(snapshot_url)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  snapshot_url
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def _wait_for_generating(url)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  while true
         
     | 
| 
      
 57 
     | 
    
         
            +
                    uri = URI.parse(url)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    req = Net::HTTP::Head.new(uri.path)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    http = Net::HTTP.new(uri.host, uri.port)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    http.use_ssl = true
         
     | 
| 
      
 61 
     | 
    
         
            +
                    res = http.start do
         
     | 
| 
      
 62 
     | 
    
         
            +
                      http.request(req)
         
     | 
| 
      
 63 
     | 
    
         
            +
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
                    if res.code == '200' && res["Content-Length"].to_i > 1024
         
     | 
| 
      
 65 
     | 
    
         
            +
                      return
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    sleep 1
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
       51 
69 
     | 
    
         
             
                end
         
     | 
| 
       52 
70 
     | 
    
         
             
              end
         
     | 
| 
       53 
71 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: datadog_proxy
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Ryota Arai
         
     | 
| 
         @@ -52,6 +52,20 @@ dependencies: 
     | 
|
| 
       52 
52 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
54 
     | 
    
         
             
                    version: 0.11.1
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: chronic
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: 0.10.2
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: 0.10.2
         
     | 
| 
       55 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
70 
     | 
    
         
             
              name: bundler
         
     | 
| 
       57 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     |