persistence-providers 0.0.2.4 → 0.0.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 660dab58980e91237fcf7f0d6ce5bb54a7ce6dd7e9fa3cebc7863a7313007bba
4
- data.tar.gz: 2c88433473a7bcf024a18819d8027f2ff21dfabb3ccb98db5093ed42f7e6747d
3
+ metadata.gz: 9b6d9600d71e5dbb6af778bdb092ded254b6870f7eed368c1e98a0841f0524b4
4
+ data.tar.gz: 65b02da0199b1aa48306ac1b5e319365e0948564a000ebfb10f476bbe2e74853
5
5
  SHA512:
6
- metadata.gz: '0081a8eb82ab1c9aa999c8dbf34ac4b54835e712f51a9bcc8ba7d2b17579f6334b9bb25f0faf1d9831c7bc551367f6dfd9f87c4cdfe8eec6f5af137204ec95d0'
7
- data.tar.gz: 772e78be6305a28ff88719dbd9bc8d4d40c5f7a20687cfe87c2a983e01399760715e805532487c84a76099d64b633d5626fe8fd67845db0bfba7f2f0297052da
6
+ metadata.gz: 7382b3e4b134717176e85030b125b34bcf4b7cc1c04366288f363d5e710de989fd22fe26a50d79adb8e7e4d88bb7975dcc6c84a0eeeecc92a42ef7927c8adcda
7
+ data.tar.gz: cb984101e69c340129b7fefc7fc033306608121b106c973968d61363be0eaab840e587095a5affd1260d5880990456a68a75a09e4042ea21f43b13152db9bbf2
@@ -7,13 +7,20 @@ module DTK::State
7
7
  attr_reader :client, :measurement
8
8
 
9
9
  def initialize(measurement_name)
10
- @client = Influxdb::Client.new('dtk')
10
+ @client = Influxdb::Client.new
11
11
  @measurement = @client.measurement_helper(measurement_name)
12
12
  end
13
13
 
14
14
  def get(namespace, crd_component_name, component_instance_name, attribute_name, opts = {})
15
15
  required_tags = get_required_tags(namespace, crd_component_name, component_instance_name, attribute_name)
16
- last_point = measurement.get_last_point(required_tags)
16
+ if opts[:provider] == "correlation"
17
+ errors = client.measurement_helper(:errors)
18
+ required_tags.merge!({ correlator_type: opts[:entrypoint].split("/").last.split(".")[0] })
19
+ errors.get_last_point(required_tags)
20
+ elsif
21
+ last_value = measurement.get_last_point(required_tags)
22
+ last_value
23
+ end
17
24
  end
18
25
 
19
26
  def write(namespace, crd_component_name, component_instance_name, attribute_name, value, opts = {}, timestamp = nil)
@@ -1,22 +1,34 @@
1
- require 'influxdb'
2
1
  require 'resolv-replace'
2
+ require 'influxdb2/client'
3
3
  module DTK::State
4
4
  class Component::Attribute::Influxdb
5
5
  class Client
6
6
  INFLUXDB_SECRET_DIR = '/app/influxdb/'
7
- def initialize(database)
8
- @database = database
7
+ def initialize
9
8
  @connection_parameters = return_connection_parameters
10
- @connection = return_connection(@database, @connection_parameters)
11
- create_database?
9
+ @connection = return_connection(@connection_parameters)
12
10
  end
13
11
 
14
12
  def query(query_expression)
15
- self.connection.query(query_expression)
13
+ query_api = self.connection.create_query_api
14
+ query_api.query(query_expression)
16
15
  end
17
16
 
18
- def write_point(name, data)
19
- self.connection.write_point(name.to_s, data)
17
+ def return_line_protocol_data(data)
18
+ protocol_string = ''
19
+ protocol_string += data[:name].to_s + ','
20
+ data[:tags].each_pair { |key,value| protocol_string+="#{key}=#{value},"}
21
+ protocol_string.delete_suffix!(',')
22
+ protocol_string += ' '
23
+ data[:fields].each_pair { |key,value| protocol_string+="#{key}=\"#{value.gsub!(/"/, '\"')},\"" }
24
+ protocol_string.delete_suffix!(',')
25
+ protocol_string += " #{data[:time].to_s}"
26
+ end
27
+
28
+ def write_point(data)
29
+ data = return_line_protocol_data(data)
30
+ write_api = self.connection.create_write_api
31
+ write_api.write(data: data)
20
32
  end
21
33
 
22
34
  def measurement_helper(measurement_name)
@@ -28,36 +40,36 @@ module DTK::State
28
40
  end
29
41
  end
30
42
 
31
- attr_reader :database, :connection_parameters, :connection
43
+ attr_reader :connection_parameters, :connection
32
44
 
33
45
  private
34
46
 
35
47
  def return_connection_parameters
36
48
  params = {}
37
49
  Dir.children(INFLUXDB_SECRET_DIR).each do |file|
38
- if (file == 'username' || file == 'password' || file == 'url')
50
+ if (file == 'url' || file == 'token' || file == 'org' || file == 'bucket')
39
51
  params[file.to_sym] = File.read("#{INFLUXDB_SECRET_DIR}#{file}")
40
52
  end
41
53
  end
42
54
  {
43
- url: params[:url] + "?retry=3",
44
- username: params[:username],
45
- password: params[:password],
46
- time_precision: 'ms'
55
+ url: params[:url],
56
+ token: params[:token],
57
+ org: params[:org],
58
+ bucket: params[:bucket]
47
59
  }
48
60
  end
49
61
 
50
- def return_connection(database, connection_parameters)
62
+ def return_connection(connection_parameters)
51
63
  begin
52
- ::InfluxDB::Client.new(database, connection_parameters)
64
+ InfluxDB2::Client.new(connection_parameters[:url], connection_parameters[:token],
65
+ bucket: connection_parameters[:bucket],
66
+ org: connection_parameters[:org],
67
+ precision: InfluxDB2::WritePrecision::MILLISECOND,
68
+ use_ssl: false)
53
69
  rescue => error
54
70
  fail "Error: #{error}"
55
71
  end
56
72
  end
57
-
58
- def create_database?
59
- self.connection.query("CREATE DATABASE #{database}")
60
- end
61
73
  end
62
74
  end
63
75
  end
@@ -11,16 +11,22 @@ module DTK::State
11
11
  @client = client
12
12
  end
13
13
 
14
- def get_last_point(params_hash = {})
14
+ def flux_filter(params_hash)
15
+ filter = ''
16
+ params_hash.each_pair do |key,value|
17
+ filter += "|> filter(fn: (r) => r.#{key} == \"#{value}\")"
18
+ end
19
+ filter
20
+ end
15
21
 
22
+ def get_last_point(params_hash = {})
16
23
  begin
17
24
  check_params_hash(params_hash)
18
- influxdb_encoding = influxdb_encoding(params_hash, Time.new)
19
- last_point = self.client.query("select last(*) from #{influxdb_encoding.measurement_name} WHERE #{where_clause(influxdb_encoding)}")
20
- fail "No data points in measurement #{name} for parameters:\n#{JSON.pretty_generate(params_hash)}" if last_point.empty?
21
- last_point[0]["values"][0]
25
+ flux_query = 'from(bucket:"' + client.connection_parameters[:bucket] + '") |> range(start:-5) |> filter(fn: (r) => r._measurement == "' + name.to_s + '")' + flux_filter(params_hash) + ' |> last()' + '|> drop(columns: ["_start", "_stop", "_field", "_measurement", "attribute_name", "component_instance_name", "task_id", "crd_component_name", "namespace"])'
26
+ result = self.client.query(flux_query)
27
+ result.values.map(&:records).flatten.map(&:values)
22
28
  rescue => error
23
- puts error
29
+ fail error
24
30
  end
25
31
  end
26
32
 
@@ -35,15 +41,19 @@ module DTK::State
35
41
  def write_point(value, params_hash = {}, timestamp)
36
42
  # The encode function we allow us to use different mappings of name, params_hash
37
43
  # to the influxdb actual measurement name and tags.
38
- influxdb_encoding = influxdb_encoding(params_hash, timestamp)
39
- timestamp = timestamp.nil? ? Time.now : timestamp
40
-
41
- data = {
42
- values: { value: value },
43
- tags: influxdb_encoding.tags,
44
- timestamp: (timestamp.to_f * 1000).to_i
45
- }
46
- self.client.write_point(influxdb_encoding.measurement_name, data)
44
+ begin
45
+ influxdb_encoding = influxdb_encoding(params_hash, timestamp)
46
+ timestamp = timestamp.nil? ? Time.now : timestamp
47
+ data = {
48
+ name: name,
49
+ tags: influxdb_encoding.tags,
50
+ fields: { value: value },
51
+ time: (timestamp.to_f * 1000).to_i
52
+ }
53
+ self.client.write_point(data)
54
+ rescue => error
55
+ fail "write_point error: #{error}"
56
+ end
47
57
  end
48
58
 
49
59
  def check_params_hash(params_hash = {})
@@ -65,25 +75,6 @@ module DTK::State
65
75
  InfluxdbEncoding.new(self.name, params_hash, timestamp)
66
76
  end
67
77
 
68
- def where_clause(influxdb_encoding)
69
- ret = ''
70
- influxdb_encoding.tags.each_pair do |name, value|
71
- unless value.nil?
72
- if ret.empty?
73
- ret += where_clause_term(name, value)
74
- else
75
- ret += " AND #{where_clause_term(name, value)}"
76
- end
77
- end
78
- end
79
- ret
80
- end
81
-
82
- def where_clause_term(name, value)
83
- fail_if_illegal_tag_value(name, value)
84
- "#{name} ='#{value}'"
85
- end
86
-
87
78
  LEGAL_TAG_CLASSES = [::String, ::Symbol, ::Integer]
88
79
 
89
80
  def fail_if_illegal_tag_value(name, value)
@@ -4,8 +4,8 @@ module DTK::State
4
4
  class Errors < self
5
5
 
6
6
  def write(value, params_hash = {}, timestamp)
7
- checked_params_hash = check_params_hash(params_hash)
8
- write_point(value, checked_params_hash, timestamp)
7
+ checked_params_hash = check_params_hash(params_hash)
8
+ write_point(value, checked_params_hash, timestamp)
9
9
  end
10
10
 
11
11
  protected
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'persistence-providers'
3
- spec.version = '0.0.2.4'
3
+ spec.version = '0.0.2.5'
4
4
  spec.author = 'Reactor8'
5
5
  spec.email = 'support@reactor8.com'
6
6
  spec.description = %q{Persistence providers plugin}
@@ -15,5 +15,5 @@ Gem::Specification.new do |spec|
15
15
 
16
16
  spec.add_dependency 'kubeclient'
17
17
  spec.add_dependency 'celluloid-io'
18
- spec.add_dependency 'influxdb', '0.8.0'
18
+ spec.add_dependency 'influxdb-client', '1.2.0'
19
19
  end
@@ -1,8 +1,8 @@
1
1
  require_relative 'lib/persistence_providers'
2
2
 
3
- influxdb = DTK::State::Component::Attribute::Influxdb.new
3
+ influxdb = DTK::State::Component::Attribute::Influxdb.new(:attributes)
4
4
 
5
- something = influxdb.get('default', 'ccn', 'cin', 'an')
6
- influxdb.write('default', 'ccn', 'cin', 'an', 'some', {}, Time.new('2045', '12'))
7
- something = influxdb.get('default', 'ccn', 'cin', 'an')
5
+ influxdb.write('namespace', 'comp_full_name', 'assembly_name', 'attribute_name', 'something', { }, Time.new)
6
+
7
+ something = influxdb.get('namespace', 'comp_full_name', 'assembly_name', 'attribute_name', { })
8
8
  puts something
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: persistence-providers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.4
4
+ version: 0.0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reactor8
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-08 00:00:00.000000000 Z
11
+ date: 2020-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kubeclient
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: influxdb
42
+ name: influxdb-client
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.8.0
47
+ version: 1.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.8.0
54
+ version: 1.2.0
55
55
  description: Persistence providers plugin
56
56
  email: support@reactor8.com
57
57
  executables: []