influxdb 0.1.9 → 0.2.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +41 -0
- data/.travis.yml +3 -2
- data/Gemfile +7 -1
- data/README.md +218 -102
- data/Rakefile +2 -6
- data/lib/influxdb.rb +15 -5
- data/lib/influxdb/client.rb +38 -433
- data/lib/influxdb/client/http.rb +123 -0
- data/lib/influxdb/config.rb +66 -0
- data/lib/influxdb/errors.rb +8 -2
- data/lib/influxdb/{logger.rb → logging.rb} +6 -5
- data/lib/influxdb/max_queue.rb +2 -1
- data/lib/influxdb/point_value.rb +27 -25
- data/lib/influxdb/query/cluster.rb +17 -0
- data/lib/influxdb/query/continuous_query.rb +22 -0
- data/lib/influxdb/query/core.rb +110 -0
- data/lib/influxdb/query/database.rb +21 -0
- data/lib/influxdb/query/retention_policy.rb +26 -0
- data/lib/influxdb/query/user.rb +41 -0
- data/lib/influxdb/version.rb +2 -2
- data/lib/influxdb/writer/async.rb +115 -0
- data/lib/influxdb/writer/udp.rb +21 -0
- data/spec/influxdb/cases/async_client_spec.rb +33 -0
- data/spec/influxdb/cases/query_cluster_spec.rb +65 -0
- data/spec/influxdb/cases/query_continuous_query_spec.rb +82 -0
- data/spec/influxdb/cases/query_core.rb +34 -0
- data/spec/influxdb/cases/query_database_spec.rb +58 -0
- data/spec/influxdb/cases/query_retention_policy_spec.rb +84 -0
- data/spec/influxdb/cases/query_series_spec.rb +50 -0
- data/spec/influxdb/cases/query_shard_space_spec.rb +105 -0
- data/spec/influxdb/cases/query_shard_spec.rb +43 -0
- data/spec/influxdb/cases/query_user_spec.rb +127 -0
- data/spec/influxdb/cases/querying_spec.rb +149 -0
- data/spec/influxdb/cases/retry_requests_spec.rb +102 -0
- data/spec/influxdb/cases/udp_client_spec.rb +21 -0
- data/spec/influxdb/cases/write_points_spec.rb +140 -0
- data/spec/influxdb/client_spec.rb +37 -810
- data/spec/influxdb/config_spec.rb +118 -0
- data/spec/influxdb/{logger_spec.rb → logging_spec.rb} +4 -8
- data/spec/influxdb/max_queue_spec.rb +29 -0
- data/spec/influxdb/point_value_spec.rb +81 -14
- data/spec/influxdb/worker_spec.rb +8 -11
- data/spec/spec_helper.rb +7 -10
- metadata +65 -30
- data/lib/influxdb/udp_client.rb +0 -16
- data/lib/influxdb/worker.rb +0 -80
- data/spec/influxdb/udp_client_spec.rb +0 -33
- data/spec/influxdb_spec.rb +0 -4
- data/spec/max_queue_spec.rb +0 -32
    
        data/lib/influxdb/udp_client.rb
    DELETED
    
    | @@ -1,16 +0,0 @@ | |
| 1 | 
            -
            require "json"
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module InfluxDB
         | 
| 4 | 
            -
              class UDPClient
         | 
| 5 | 
            -
                attr_accessor :socket
         | 
| 6 | 
            -
                def initialize(host, port)
         | 
| 7 | 
            -
                  self.socket = UDPSocket.new
         | 
| 8 | 
            -
                  self.socket.connect(host, port)
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                def send(payload)
         | 
| 12 | 
            -
                  socket.send(JSON.generate(payload), 0)
         | 
| 13 | 
            -
                rescue
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
              end
         | 
| 16 | 
            -
            end
         | 
    
        data/lib/influxdb/worker.rb
    DELETED
    
    | @@ -1,80 +0,0 @@ | |
| 1 | 
            -
            require 'thread'
         | 
| 2 | 
            -
            require "net/http"
         | 
| 3 | 
            -
            require "uri"
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            module InfluxDB
         | 
| 6 | 
            -
              class Worker
         | 
| 7 | 
            -
                attr_reader :client
         | 
| 8 | 
            -
                attr_accessor :queue
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                include InfluxDB::Logging
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                MAX_POST_POINTS = 1000
         | 
| 13 | 
            -
                NUM_WORKER_THREADS = 3
         | 
| 14 | 
            -
                SLEEP_INTERVAL = 5
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                def initialize(client)
         | 
| 17 | 
            -
                  @queue = InfluxDB::MaxQueue.new
         | 
| 18 | 
            -
                  @client = client
         | 
| 19 | 
            -
                  spawn_threads!
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  at_exit do
         | 
| 22 | 
            -
                    log :debug, "Thread exiting, flushing queue."
         | 
| 23 | 
            -
                    check_background_queue until @queue.empty?
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                def current_threads
         | 
| 28 | 
            -
                  Thread.list.select {|t| t[:influxdb] == self.object_id}
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                def current_thread_count
         | 
| 32 | 
            -
                  Thread.list.count {|t| t[:influxdb] == self.object_id}
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                def push(payload)
         | 
| 36 | 
            -
                  if payload.is_a? Array
         | 
| 37 | 
            -
                    payload.each {|p| queue.push(p) }
         | 
| 38 | 
            -
                  else
         | 
| 39 | 
            -
                    queue.push(payload)
         | 
| 40 | 
            -
                  end
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                def spawn_threads!
         | 
| 44 | 
            -
                  NUM_WORKER_THREADS.times do |thread_num|
         | 
| 45 | 
            -
                    log :debug, "Spawning background worker thread #{thread_num}."
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                    Thread.new do
         | 
| 48 | 
            -
                      Thread.current[:influxdb] = self.object_id
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                      while !client.stopped?
         | 
| 51 | 
            -
                        self.check_background_queue(thread_num)
         | 
| 52 | 
            -
                        sleep rand(SLEEP_INTERVAL)
         | 
| 53 | 
            -
                      end
         | 
| 54 | 
            -
                    end
         | 
| 55 | 
            -
                  end
         | 
| 56 | 
            -
                end
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                def check_background_queue(thread_num = 0)
         | 
| 59 | 
            -
                  log :debug, "Checking background queue on thread #{thread_num} (#{self.current_thread_count} active)"
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                  begin
         | 
| 62 | 
            -
                    data = []
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                    while data.size < MAX_POST_POINTS && !@queue.empty?
         | 
| 65 | 
            -
                      p = @queue.pop(true) rescue next;
         | 
| 66 | 
            -
                      data.push p
         | 
| 67 | 
            -
                    end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                    return if data.empty?
         | 
| 70 | 
            -
             | 
| 71 | 
            -
                    begin
         | 
| 72 | 
            -
                      log :debug, "Found data in the queue! (#{data.length} points)"
         | 
| 73 | 
            -
                      @client._write(data)
         | 
| 74 | 
            -
                    rescue => e
         | 
| 75 | 
            -
                      puts "Cannot write data: #{e.inspect}"
         | 
| 76 | 
            -
                    end
         | 
| 77 | 
            -
                  end while @queue.length > MAX_POST_POINTS
         | 
| 78 | 
            -
                end
         | 
| 79 | 
            -
              end
         | 
| 80 | 
            -
            end
         | 
| @@ -1,33 +0,0 @@ | |
| 1 | 
            -
            require "spec_helper"
         | 
| 2 | 
            -
            require "json"
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            describe InfluxDB::UDPClient do
         | 
| 5 | 
            -
              subject { described_class.new("localhost", 44444) }
         | 
| 6 | 
            -
              let(:message) { [{ "foo" => "bar" }] }
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              describe "#send" do
         | 
| 9 | 
            -
                it "sends a UPD packet" do
         | 
| 10 | 
            -
                  s = UDPSocket.new
         | 
| 11 | 
            -
                  s.bind("localhost", 44444)
         | 
| 12 | 
            -
                  subject.send(message)
         | 
| 13 | 
            -
                  rec_mesage = JSON.parse(s.recvfrom(15).first)
         | 
| 14 | 
            -
                  expect(rec_mesage).to eq message
         | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                context "it can't connect" do
         | 
| 18 | 
            -
                  before do
         | 
| 19 | 
            -
                    subject.socket = FailingSocket.new
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  it "doesn't blow up" do
         | 
| 23 | 
            -
                    expect { subject.send(message) }.to_not raise_error
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                class FailingSocket < UDPSocket
         | 
| 28 | 
            -
                  def send(*args)
         | 
| 29 | 
            -
                    fail
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
            end
         | 
    
        data/spec/influxdb_spec.rb
    DELETED
    
    
    
        data/spec/max_queue_spec.rb
    DELETED
    
    | @@ -1,32 +0,0 @@ | |
| 1 | 
            -
            require 'spec_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            describe InfluxDB::MaxQueue do
         | 
| 4 | 
            -
              it "should inherit from Queue" do
         | 
| 5 | 
            -
                InfluxDB::MaxQueue.new.should be_a(Queue)
         | 
| 6 | 
            -
              end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              context "#new" do
         | 
| 9 | 
            -
                it "should allow max_depth to be set" do
         | 
| 10 | 
            -
                  queue = InfluxDB::MaxQueue.new(500)
         | 
| 11 | 
            -
                  queue.max.should == 500
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
              context "#push" do
         | 
| 16 | 
            -
                it "should allow an item to be added if the queue is not full" do
         | 
| 17 | 
            -
                  queue = InfluxDB::MaxQueue.new(5)
         | 
| 18 | 
            -
                  queue.size.should be_zero
         | 
| 19 | 
            -
                  queue.push(1)
         | 
| 20 | 
            -
                  queue.size.should == 1
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                it "should not allow items to be added if the queue is full" do
         | 
| 24 | 
            -
                  queue = InfluxDB::MaxQueue.new(5)
         | 
| 25 | 
            -
                  queue.size.should be_zero
         | 
| 26 | 
            -
                  5.times { |n| queue.push(n) }
         | 
| 27 | 
            -
                  queue.size.should == 5
         | 
| 28 | 
            -
                  queue.push(6)
         | 
| 29 | 
            -
                  queue.size.should == 5
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
              end
         | 
| 32 | 
            -
            end
         |