persistence-providers 0.0.2.4 → 0.0.2.5

Sign up to get free protection for your applications and to get access to all the features.
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: []