File: client.rb

package info (click to toggle)
ruby-influxdb 0.8.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 424 kB
  • sloc: ruby: 3,530; sh: 61; makefile: 7
file content (95 lines) | stat: -rw-r--r-- 2,560 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
require 'json'

module InfluxDB
  # InfluxDB client class
  class Client
    attr_reader :config, :writer

    include InfluxDB::Logging
    include InfluxDB::HTTP
    include InfluxDB::Query::Core
    include InfluxDB::Query::Cluster
    include InfluxDB::Query::Database
    include InfluxDB::Query::User
    include InfluxDB::Query::ContinuousQuery
    include InfluxDB::Query::RetentionPolicy
    include InfluxDB::Query::Series
    include InfluxDB::Query::Measurement

    # Initializes a new InfluxDB client
    #
    # === Examples:
    #
    #  # connect to localhost using root/root
    #  # as the credentials and doesn't connect to a db
    #
    #  InfluxDB::Client.new
    #
    #  # connect to localhost using root/root
    #  # as the credentials and 'db' as the db name
    #
    #  InfluxDB::Client.new 'db'
    #
    #  # override username, other defaults remain unchanged
    #
    #  InfluxDB::Client.new username: 'username'
    #
    #  # override username, use 'db' as the db name
    #  Influxdb::Client.new 'db', username: 'username'
    #
    # === Valid options in hash
    #
    # +:host+:: the hostname to connect to
    # +:port+:: the port to connect to
    # +:prefix+:: the specified path prefix when building the url e.g.: /prefix/db/dbname...
    # +:username+:: the username to use when executing commands
    # +:password+:: the password associated with the username
    # +:use_ssl+:: use ssl to connect
    # +:verify_ssl+:: verify ssl server certificate?
    # +:ssl_ca_cert+:: ssl CA certificate, chainfile or CA path.
    #                  The system CA path is automatically included
    # +:retry+:: number of times a failed request should be retried. Defaults to infinite.
    def initialize(database = nil, **opts)
      opts[:database] = database if database.is_a? String
      @config = InfluxDB::Config.new(**opts)
      @stopped = false
      @writer = find_writer

      at_exit { stop! }
    end

    def stop!
      if @writer == self
        @stopped = true
      else
        @writer.stop!
      end
    end

    def stopped?
      if @writer == self
        @stopped
      else
        @writer.stopped?
      end
    end

    def now
      InfluxDB.now(config.time_precision)
    end

    private

    def find_writer
      if config.async?
        InfluxDB::Writer::Async.new(self, config.async)
      elsif config.udp.is_a?(Hash)
        InfluxDB::Writer::UDP.new(self, **config.udp)
      elsif config.udp?
        InfluxDB::Writer::UDP.new(self)
      else
        self
      end
    end
  end
end