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 +4 -4
- data/lib/state/component/providers/influxdb.rb +9 -2
- data/lib/state/component/providers/influxdb/client.rb +32 -20
- data/lib/state/component/providers/influxdb/measurement.rb +25 -34
- data/lib/state/component/providers/influxdb/measurement/errors.rb +2 -2
- data/persistence-providers.gemspec +2 -2
- data/test-influxdb.rb +4 -4
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b6d9600d71e5dbb6af778bdb092ded254b6870f7eed368c1e98a0841f0524b4
|
4
|
+
data.tar.gz: 65b02da0199b1aa48306ac1b5e319365e0948564a000ebfb10f476bbe2e74853
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
-
|
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
|
8
|
-
@database = database
|
7
|
+
def initialize
|
9
8
|
@connection_parameters = return_connection_parameters
|
10
|
-
@connection = return_connection(@
|
11
|
-
create_database?
|
9
|
+
@connection = return_connection(@connection_parameters)
|
12
10
|
end
|
13
11
|
|
14
12
|
def query(query_expression)
|
15
|
-
self.connection.
|
13
|
+
query_api = self.connection.create_query_api
|
14
|
+
query_api.query(query_expression)
|
16
15
|
end
|
17
16
|
|
18
|
-
def
|
19
|
-
|
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 :
|
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 == '
|
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]
|
44
|
-
|
45
|
-
|
46
|
-
|
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(
|
62
|
+
def return_connection(connection_parameters)
|
51
63
|
begin
|
52
|
-
::
|
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
|
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
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
-
|
8
|
-
|
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.
|
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', '
|
18
|
+
spec.add_dependency 'influxdb-client', '1.2.0'
|
19
19
|
end
|
data/test-influxdb.rb
CHANGED
@@ -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
|
-
|
6
|
-
|
7
|
-
something = influxdb.get('
|
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
|
+
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-
|
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:
|
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:
|
54
|
+
version: 1.2.0
|
55
55
|
description: Persistence providers plugin
|
56
56
|
email: support@reactor8.com
|
57
57
|
executables: []
|