diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000000000000000000000000000000000000..02e5f2d4c097e7bf6992ca9542caebc155ea07b1 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,149 @@ +GIT + remote: git://github.com/karn18/influxdb-client-ruby.git + revision: f68a9cea5e88219db71b230438d843ccd329e438 + specs: + influxdb-client (1.16.0) + +PATH + remote: . + specs: + latias-influxdb (0.1.0) + rails (~> 6.1.4) + +GEM + remote: https://rubygems.org/ + specs: + actioncable (6.1.4) + actionpack (= 6.1.4) + activesupport (= 6.1.4) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailbox (6.1.4) + actionpack (= 6.1.4) + activejob (= 6.1.4) + activerecord (= 6.1.4) + activestorage (= 6.1.4) + activesupport (= 6.1.4) + mail (>= 2.7.1) + actionmailer (6.1.4) + actionpack (= 6.1.4) + actionview (= 6.1.4) + activejob (= 6.1.4) + activesupport (= 6.1.4) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (6.1.4) + actionview (= 6.1.4) + activesupport (= 6.1.4) + rack (~> 2.0, >= 2.0.9) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (6.1.4) + actionpack (= 6.1.4) + activerecord (= 6.1.4) + activestorage (= 6.1.4) + activesupport (= 6.1.4) + nokogiri (>= 1.8.5) + actionview (6.1.4) + activesupport (= 6.1.4) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activejob (6.1.4) + activesupport (= 6.1.4) + globalid (>= 0.3.6) + activemodel (6.1.4) + activesupport (= 6.1.4) + activerecord (6.1.4) + activemodel (= 6.1.4) + activesupport (= 6.1.4) + activestorage (6.1.4) + actionpack (= 6.1.4) + activejob (= 6.1.4) + activerecord (= 6.1.4) + activesupport (= 6.1.4) + marcel (~> 1.0.0) + mini_mime (>= 1.1.0) + activesupport (6.1.4) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + builder (3.2.4) + concurrent-ruby (1.1.9) + crass (1.0.6) + erubi (1.10.0) + globalid (0.4.2) + activesupport (>= 4.2.0) + i18n (1.8.10) + concurrent-ruby (~> 1.0) + loofah (2.10.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + mail (2.7.1) + mini_mime (>= 0.1.1) + marcel (1.0.1) + method_source (1.0.0) + mini_mime (1.1.0) + minitest (5.14.4) + nio4r (2.5.7) + nokogiri (1.11.7-x86_64-darwin) + racc (~> 1.4) + racc (1.5.2) + rack (2.2.3) + rack-test (1.1.0) + rack (>= 1.0, < 3) + rails (6.1.4) + actioncable (= 6.1.4) + actionmailbox (= 6.1.4) + actionmailer (= 6.1.4) + actionpack (= 6.1.4) + actiontext (= 6.1.4) + actionview (= 6.1.4) + activejob (= 6.1.4) + activemodel (= 6.1.4) + activerecord (= 6.1.4) + activestorage (= 6.1.4) + activesupport (= 6.1.4) + bundler (>= 1.15.0) + railties (= 6.1.4) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.3.0) + loofah (~> 2.3) + railties (6.1.4) + actionpack (= 6.1.4) + activesupport (= 6.1.4) + method_source + rake (>= 0.13) + thor (~> 1.0) + rake (13.0.4) + sprockets (4.0.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.2) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + thor (1.1.0) + tzinfo (2.0.4) + concurrent-ruby (~> 1.0) + websocket-driver (0.7.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + zeitwerk (2.4.2) + +PLATFORMS + x86_64-darwin-19 + +DEPENDENCIES + influxdb-client! + latias-influxdb! + +BUNDLED WITH + 2.2.17 diff --git a/README.md b/README.md index 508b09fc03ff7bddacce63220cdb3f2f90657812..bf60d14df8196709c7a9fc7030fa0a995379b6f4 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,30 @@ # Latias::Influxdb -Short description and motivation. + +Ruby lib for use influxdb version 2 on Ruby language ## Usage -How to use my plugin. + +```ruby +class MdbEnergyBucket < Latias::Influxdb::Bucket + def initialize + @url = 'http://localhost:8086' + @token = 'your token' + @bucket = 'MDBEnergy' + @org = 'MDBEnergy' + @use_ssl = false + @verify_mode = OpenSSL::SSL::VERIFY_NONE + @precision = InfluxDB2::WritePrecision::NANOSECOND + @client = client + end +end + +mdb_energy_bucket = MdbEnergyBucket.new +mdb_energy_bucket.range('start: -1m').filter('fn: (r) => r["_measurement"] == "cpu"') +mdb_energy_bucket.call +``` ## Installation + Add this line to your application's Gemfile: ```ruby @@ -12,17 +32,21 @@ gem 'latias-influxdb' ``` And then execute: + ```bash $ bundle ``` Or install it yourself as: + ```bash $ gem install latias-influxdb ``` ## Contributing + Contribution directions go here. ## License + The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT). diff --git a/lib/latias/influxdb.rb b/lib/latias/influxdb.rb index 558a49b3cca8b0808c0b86e6e243f3e881513326..ac94642742848fe6f51a4a1d7940f1e518e101d7 100644 --- a/lib/latias/influxdb.rb +++ b/lib/latias/influxdb.rb @@ -1,7 +1,11 @@ -require "latias/influxdb/version" -require "latias/influxdb/engine" +# frozen_string_literal: true + +require 'latias/influxdb/bucket' +require 'latias/influxdb/version' +require 'latias/influxdb/engine' module Latias + # Influxdb module Influxdb # Your code goes here... end diff --git a/lib/latias/influxdb/bucket.rb b/lib/latias/influxdb/bucket.rb new file mode 100644 index 0000000000000000000000000000000000000000..cdd792926253b82e099cca27f20817432fe9465a --- /dev/null +++ b/lib/latias/influxdb/bucket.rb @@ -0,0 +1,81 @@ +# frozen_string_literal: true + +require 'influxdb-client' + +module Latias + # Influxdb + module Influxdb + # Bucket + class Bucket + attr_reader :url, :token, :bucket, :org, :use_ssl, :verify_mode, :precision + + def initialize + @query = '' + @url = 'http://localhost:8086' + @token = 'token' + @bucket = 'bucket' + @org = 'org' + @use_ssl = false + @verify_mode = OpenSSL::SSL::VERIFY_NONE + end + + def call + all_query = "from(bucket: \"#{@bucket}\") #{@query}" + @query = '' + @client.create_query_api.query(query: all_query, org: @org) + end + + # old code + # def call + # all_query = "from(bucket: \"#{@bucket}\")" \ + # '|> range(start: -1m) + # |> filter(fn: (r) => r["_measurement"] == "cpu") + # |> filter(fn: (r) => r["_field"] == "usage_user") + # |> filter(fn: (r) => r["cpu"] == "cpu-total" or r["cpu"] == "cpu0" or r["cpu"] == "cpu1") + # |> yield(name: "sum")' + + # @client.create_query_api.query(query: all_query, org: @org) + # end + + def yield(query) + @query += yield_format(query) + self + end + + def range(query) + @query += range_format(query) + self + end + + def filter(query) + @query += filter_format(query) + self + end + + private + + def yield_format(query) + "#{new_command} yield(#{query})" + end + + def range_format(query) + "#{new_command} range(#{query})" + end + + def filter_format(query) + "#{new_command} filter(#{query})" + end + + def new_command + '|> ' + end + + def client + @client = InfluxDB2::Client.new(@url, @token, + use_ssl: @use_ssl, + verify_mode: @verify_mode.present? ? @verify_mode : OpenSSL::SSL::VERIFY_NONE, + precision: InfluxDB2::WritePrecision::NANOSECOND) + end + end + end +end diff --git a/lib/latias/influxdb/configuration.rb b/lib/latias/influxdb/configuration.rb new file mode 100644 index 0000000000000000000000000000000000000000..158b0449cf4295b4b8d2736bd2d1022c42ade82b --- /dev/null +++ b/lib/latias/influxdb/configuration.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +module Latias + # Influxdb + module Influxdb + # Configuration + class Configuration + attr_accessor :async + + def initialize + @async = true + end + end + + # Borrow syntax from Clearance: https://github.com/thoughtbot/clearance/blob/master/lib/clearance/configuration.rb + def self.configuration + @configuration ||= Configuration.new + end + + def self.configuration=(config) + @configuration = config + end + + def self.configure + yield configuration + end + end +end diff --git a/lib/latias/influxdb/engine.rb b/lib/latias/influxdb/engine.rb index 181e8c53aee66692ac5796e62b6924fde4dcea31..80995120b1f6cbc1ab8933a94136a61c7c5ec063 100644 --- a/lib/latias/influxdb/engine.rb +++ b/lib/latias/influxdb/engine.rb @@ -1,5 +1,8 @@ +# frozen_string_literal: true + module Latias module Influxdb + # Engine class Engine < ::Rails::Engine isolate_namespace Latias::Influxdb end diff --git a/lib/latias/influxdb/version.rb b/lib/latias/influxdb/version.rb index 5099f256450f9d81cbe8fc4995c63296f8370e97..d48dada4c29b14a0a1db73ea5044c2e2e9ad7483 100644 --- a/lib/latias/influxdb/version.rb +++ b/lib/latias/influxdb/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Latias module Influxdb VERSION = '0.1.0'