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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +41 -0
  4. data/.travis.yml +3 -2
  5. data/Gemfile +7 -1
  6. data/README.md +218 -102
  7. data/Rakefile +2 -6
  8. data/lib/influxdb.rb +15 -5
  9. data/lib/influxdb/client.rb +38 -433
  10. data/lib/influxdb/client/http.rb +123 -0
  11. data/lib/influxdb/config.rb +66 -0
  12. data/lib/influxdb/errors.rb +8 -2
  13. data/lib/influxdb/{logger.rb → logging.rb} +6 -5
  14. data/lib/influxdb/max_queue.rb +2 -1
  15. data/lib/influxdb/point_value.rb +27 -25
  16. data/lib/influxdb/query/cluster.rb +17 -0
  17. data/lib/influxdb/query/continuous_query.rb +22 -0
  18. data/lib/influxdb/query/core.rb +110 -0
  19. data/lib/influxdb/query/database.rb +21 -0
  20. data/lib/influxdb/query/retention_policy.rb +26 -0
  21. data/lib/influxdb/query/user.rb +41 -0
  22. data/lib/influxdb/version.rb +2 -2
  23. data/lib/influxdb/writer/async.rb +115 -0
  24. data/lib/influxdb/writer/udp.rb +21 -0
  25. data/spec/influxdb/cases/async_client_spec.rb +33 -0
  26. data/spec/influxdb/cases/query_cluster_spec.rb +65 -0
  27. data/spec/influxdb/cases/query_continuous_query_spec.rb +82 -0
  28. data/spec/influxdb/cases/query_core.rb +34 -0
  29. data/spec/influxdb/cases/query_database_spec.rb +58 -0
  30. data/spec/influxdb/cases/query_retention_policy_spec.rb +84 -0
  31. data/spec/influxdb/cases/query_series_spec.rb +50 -0
  32. data/spec/influxdb/cases/query_shard_space_spec.rb +105 -0
  33. data/spec/influxdb/cases/query_shard_spec.rb +43 -0
  34. data/spec/influxdb/cases/query_user_spec.rb +127 -0
  35. data/spec/influxdb/cases/querying_spec.rb +149 -0
  36. data/spec/influxdb/cases/retry_requests_spec.rb +102 -0
  37. data/spec/influxdb/cases/udp_client_spec.rb +21 -0
  38. data/spec/influxdb/cases/write_points_spec.rb +140 -0
  39. data/spec/influxdb/client_spec.rb +37 -810
  40. data/spec/influxdb/config_spec.rb +118 -0
  41. data/spec/influxdb/{logger_spec.rb → logging_spec.rb} +4 -8
  42. data/spec/influxdb/max_queue_spec.rb +29 -0
  43. data/spec/influxdb/point_value_spec.rb +81 -14
  44. data/spec/influxdb/worker_spec.rb +8 -11
  45. data/spec/spec_helper.rb +7 -10
  46. metadata +65 -30
  47. data/lib/influxdb/udp_client.rb +0 -16
  48. data/lib/influxdb/worker.rb +0 -80
  49. data/spec/influxdb/udp_client_spec.rb +0 -33
  50. data/spec/influxdb_spec.rb +0 -4
  51. data/spec/max_queue_spec.rb +0 -32
@@ -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
@@ -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
@@ -1,4 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe InfluxDB do
4
- end
@@ -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