leela_client 0.0.5 → 1.0.0
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.
- data/lib/leela_client.rb +0 -2
- data/lib/leela_client/api.rb +2 -3
- data/lib/leela_client/metrics.rb +7 -2
- data/lib/leela_client/transport.rb +64 -4
- data/lib/leela_client/version.rb +4 -1
- metadata +7 -7
    
        data/lib/leela_client.rb
    CHANGED
    
    
    
        data/lib/leela_client/api.rb
    CHANGED
    
    | @@ -24,11 +24,10 @@ module LeelaClient | |
| 24 24 |  | 
| 25 25 | 
             
                def transport(servers)
         | 
| 26 26 | 
             
                  servers = servers.map do |addr|
         | 
| 27 | 
            -
                     | 
| 28 | 
            -
                    [Resolv.getaddress(host), (port || 6968).to_i]
         | 
| 27 | 
            +
                    [Resolv.getaddress(addr), addr]
         | 
| 29 28 | 
             
                  end
         | 
| 30 29 |  | 
| 31 | 
            -
                   | 
| 30 | 
            +
                  Transport.new(MD5Ring.from_list(servers))
         | 
| 32 31 | 
             
                end
         | 
| 33 32 | 
             
              end
         | 
| 34 33 | 
             
            end
         | 
    
        data/lib/leela_client/metrics.rb
    CHANGED
    
    | @@ -23,7 +23,7 @@ module LeelaClient | |
| 23 23 |  | 
| 24 24 | 
             
                def serialize
         | 
| 25 25 | 
             
                  size  = @key.size
         | 
| 26 | 
            -
                   | 
| 26 | 
            +
                  time  = @timestamp.to_f.to_s
         | 
| 27 27 | 
             
                  if (@value.integer?)
         | 
| 28 28 | 
             
                    value = @value.to_f.to_s
         | 
| 29 29 | 
             
                  elsif (@value.nan?)
         | 
| @@ -36,7 +36,12 @@ module LeelaClient | |
| 36 36 | 
             
                    value = @value.to_s
         | 
| 37 37 | 
             
                  end
         | 
| 38 38 |  | 
| 39 | 
            -
                  "#{@type} #{size}|#{@key} #{value} #{ | 
| 39 | 
            +
                  "#{@type} #{size}|#{@key} #{value} #{time};"
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def serialize_json
         | 
| 43 | 
            +
                  time = @timestamp.to_f.to_s
         | 
| 44 | 
            +
                  {:name => @key, :type => @type, :value => @value, :timestamp => time}
         | 
| 40 45 | 
             
                end
         | 
| 41 46 |  | 
| 42 47 | 
             
                def size
         | 
| @@ -14,12 +14,70 @@ | |
| 14 14 | 
             
            #    See the License for the specific language governing permissions and
         | 
| 15 15 | 
             
            #    limitations under the License.
         | 
| 16 16 |  | 
| 17 | 
            +
            require "cgi"
         | 
| 18 | 
            +
            require "net/http"
         | 
| 19 | 
            +
            require "json"
         | 
| 20 | 
            +
             | 
| 17 21 | 
             
            module LeelaClient
         | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 22 | 
            +
             | 
| 23 | 
            +
              class Transport
         | 
| 20 24 |  | 
| 21 25 | 
             
                def initialize(ring)
         | 
| 22 26 | 
             
                  @ring = ring
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                def send(metrics, opts={:method => :udp})
         | 
| 30 | 
            +
                  if (opts[:method] == :http)
         | 
| 31 | 
            +
                    HTTPTransport.new(@ring, opts).send(metrics)
         | 
| 32 | 
            +
                  elsif (opts[:method] == :udp)
         | 
| 33 | 
            +
                    UDPTransport.new(@ring, opts).send(metrics)
         | 
| 34 | 
            +
                  else
         | 
| 35 | 
            +
                    raise(RuntimeError.new "unknown method: #{opts[:method]}")
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              class HTTPTransport
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def initialize(ring, opts)
         | 
| 43 | 
            +
                  @ring = ring
         | 
| 44 | 
            +
                  @opts = opts
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def send(metrics)
         | 
| 48 | 
            +
                  sent  = 0
         | 
| 49 | 
            +
                  proto = @opts[:ssl] ? "https" : "http"
         | 
| 50 | 
            +
                  port  = @opts[:port] || (opts[:ssl] ? 443 : 80)
         | 
| 51 | 
            +
                  LeelaClient::LoadBalancer.group(@ring, metrics).each do |addr, ms|
         | 
| 52 | 
            +
                    ms.each do |m|
         | 
| 53 | 
            +
                      uri = URI("#{proto}://#{addr[1]}:#{port}/v1/" + ::CGI::escape(m.key))
         | 
| 54 | 
            +
                      res = ::Net::HTTP.start(addr[1],
         | 
| 55 | 
            +
                                              uri.port,
         | 
| 56 | 
            +
                                              :use_ssl      => uri.scheme == "https",
         | 
| 57 | 
            +
                                              :open_timeout => @opts[:timeout] || 5,
         | 
| 58 | 
            +
                                              :read_timeout => @opts[:timeout] || 5,
         | 
| 59 | 
            +
                                              :ssl_timeout  => @opts[:timeout] || 5) do |http|
         | 
| 60 | 
            +
                        req              = ::Net::HTTP::Post.new(uri.path)
         | 
| 61 | 
            +
                        req.body         = ::JSON::dump(m.serialize_json)
         | 
| 62 | 
            +
                        req.content_type = "application/json"
         | 
| 63 | 
            +
                        http.request(req)
         | 
| 64 | 
            +
                      end
         | 
| 65 | 
            +
                      if (res.code.to_i == 201)
         | 
| 66 | 
            +
                        sent += 1
         | 
| 67 | 
            +
                      end
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
                  return(sent)
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              class UDPTransport
         | 
| 75 | 
            +
                MAXPAYLOAD   = 1472
         | 
| 76 | 
            +
                DEFAULT_PORT = 6968
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                def initialize(ring, opts)
         | 
| 79 | 
            +
                  @ring = ring
         | 
| 80 | 
            +
                  @opts = opts
         | 
| 23 81 | 
             
                  @sock = UDPSocket.new
         | 
| 24 82 | 
             
                end
         | 
| 25 83 |  | 
| @@ -28,12 +86,14 @@ module LeelaClient | |
| 28 86 | 
             
                end
         | 
| 29 87 |  | 
| 30 88 | 
             
                def send(metrics)
         | 
| 89 | 
            +
                  sent = 0
         | 
| 31 90 | 
             
                  LeelaClient::LoadBalancer.group_limit(@ring, metrics, MAXPAYLOAD).each do |addr, mms|
         | 
| 32 91 | 
             
                    mms.each do |ms|
         | 
| 33 | 
            -
                       | 
| 34 | 
            -
                       | 
| 92 | 
            +
                      @sock.send(serialize_list(ms), 0, addr[0], @opts[:port] || DEFAULT_PORT)
         | 
| 93 | 
            +
                      sent += ms.size # yeah, hopefully!
         | 
| 35 94 | 
             
                    end
         | 
| 36 95 | 
             
                  end
         | 
| 96 | 
            +
                  return(sent)
         | 
| 37 97 | 
             
                end
         | 
| 38 98 | 
             
              end
         | 
| 39 99 | 
             
            end
         | 
    
        data/lib/leela_client/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: leela_client
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2013- | 
| 13 | 
            +
            date: 2013-05-08 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies: []
         | 
| 15 15 | 
             
            description: A client for leela server
         | 
| 16 16 | 
             
            email:
         | 
| @@ -20,13 +20,13 @@ executables: [] | |
| 20 20 | 
             
            extensions: []
         | 
| 21 21 | 
             
            extra_rdoc_files: []
         | 
| 22 22 | 
             
            files:
         | 
| 23 | 
            +
            - ./lib/leela_client.rb
         | 
| 24 | 
            +
            - ./lib/leela_client/metrics.rb
         | 
| 25 | 
            +
            - ./lib/leela_client/ring.rb
         | 
| 26 | 
            +
            - ./lib/leela_client/api.rb
         | 
| 23 27 | 
             
            - ./lib/leela_client/version.rb
         | 
| 24 28 | 
             
            - ./lib/leela_client/transport.rb
         | 
| 25 | 
            -
            - ./lib/leela_client/api.rb
         | 
| 26 | 
            -
            - ./lib/leela_client/ring.rb
         | 
| 27 29 | 
             
            - ./lib/leela_client/lb.rb
         | 
| 28 | 
            -
            - ./lib/leela_client/metrics.rb
         | 
| 29 | 
            -
            - ./lib/leela_client.rb
         | 
| 30 30 | 
             
            homepage: https://github.com/locaweb/leela-client
         | 
| 31 31 | 
             
            licenses: []
         | 
| 32 32 | 
             
            post_install_message: 
         | 
| @@ -47,7 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 47 47 | 
             
                  version: '0'
         | 
| 48 48 | 
             
            requirements: []
         | 
| 49 49 | 
             
            rubyforge_project: 
         | 
| 50 | 
            -
            rubygems_version: 1.8. | 
| 50 | 
            +
            rubygems_version: 1.8.24
         | 
| 51 51 | 
             
            signing_key: 
         | 
| 52 52 | 
             
            specification_version: 3
         | 
| 53 53 | 
             
            summary: A client for leela server
         |