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 +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: []
|