logstash-output-clickhouse 0.1.3 → 0.1.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: 05f2b2d96799587dc5678cd80a6ef5d0c62a103797a298dfbe86acb1dbe09b89
4
- data.tar.gz: ffeb98ddb2e27497ff54e9304180a2a44e88d093ce33755f842409a2101d4153
3
+ metadata.gz: 34905df0e9293b2ff6471b904e018e8fe3d2d2f1bc372196422d5fa30107d50e
4
+ data.tar.gz: a20ec2301377b218b8395f6664be86f4b978e6ad72c42280fa2bfc0c889c0569
5
5
  SHA512:
6
- metadata.gz: 1c6d244d35441f46a0b49b79d1f278004e634334349d3949ec8d49e96fb02e31c942d13f8be72e7ddcd9996687acf81f1378b3587cbab6c6a9a9f93eb6634a6a
7
- data.tar.gz: 530b73e05f582bf9b9af8a3be95aa1139fd0b21c3a75b411635453fa9c5e4bc538f8fb8477ab2388fad2560570c92a3623d614c97e69f103850ef6e54d45a23a
6
+ metadata.gz: ccbd71994f6b705088616315a3340312381fce0ccae1dc4f97b793d417041d987ede5962c6f256111d6a78620bed275997153c9fa37bc86ca4770c4642469726
7
+ data.tar.gz: e0b00ed0a0b0f1e8a664698cd0c1258d48d67bf872afe983b26d9134ddead047852bfecebaa7d9fa7668400c94de76d0e1bd1475b074f11308d0b87a7f3a6284
data/README.md CHANGED
@@ -1,4 +1,7 @@
1
1
  # Logstash Plugin
2
+ [![Gem Version](https://badge.fury.io/rb/logstash-output-clickhouse.svg)](https://badge.fury.io/rb/logstash-output-clickhouse)
3
+
4
+ This repo forked from [here](https://github.com/funcmike/logstash-output-clickhouse).
2
5
 
3
6
  This plugin is a modified version of the Lucidworks logstash json_batch. That plugin is available [here](https://github.com/lucidworks/logstash-output-json_batch).
4
7
 
@@ -2,7 +2,6 @@
2
2
  require "logstash/outputs/base"
3
3
  require "logstash/namespace"
4
4
  require "logstash/json"
5
- require "logstash/util/shortname_resolver"
6
5
  require "uri"
7
6
  require "stud/buffer"
8
7
  require "logstash/plugin_mixins/http_client"
@@ -59,7 +58,6 @@ class LogStash::Outputs::ClickHouse < LogStash::Outputs::Base
59
58
  :idle_flush_time => @idle_flush_time,
60
59
  :request_tokens => @pool_max,
61
60
  :http_hosts => @http_hosts,
62
- :http_query => @http_query,
63
61
  :headers => request_headers)
64
62
  end
65
63
 
@@ -75,12 +73,7 @@ class LogStash::Outputs::ClickHouse < LogStash::Outputs::Base
75
73
  @pool_max.times { |t| @request_tokens << true }
76
74
  @requests = Array.new
77
75
 
78
- params = { "query" => "INSERT INTO #{table} FORMAT JSONEachRow" }.merge(@extra_params)
79
- @http_query = "?#{URI.encode_www_form(params)}"
80
-
81
- @hostnames_pool =
82
- parse_http_hosts(http_hosts,
83
- ShortNameResolver.new(ttl: @host_resolve_ttl_sec, logger: @logger))
76
+ @table_name = table
84
77
 
85
78
  buffer_initialize(
86
79
  :max_items => @flush_size,
@@ -91,42 +84,18 @@ class LogStash::Outputs::ClickHouse < LogStash::Outputs::Base
91
84
  print_plugin_info()
92
85
  end # def register
93
86
 
94
- private
95
-
96
- def parse_http_hosts(hosts, resolver)
97
- ip_re = /^[\d]+\.[\d]+\.[\d]+\.[\d]+$/
98
-
99
- lambda {
100
- hosts.flat_map { |h|
101
- scheme = URI(h).scheme
102
- host = URI(h).host
103
- port = URI(h).port
104
- path = URI(h).path
105
-
106
- if ip_re !~ host
107
- resolver.get_addresses(host).map { |ip|
108
- "#{scheme}://#{ip}:#{port}#{path}"
109
- }
110
- else
111
- [h]
112
- end
113
- }
114
- }
87
+ # This module currently does not support parallel requests as that would circumvent the batching
88
+ def receive(event)
89
+ buffer_receive(event)
115
90
  end
116
91
 
117
- private
118
-
119
- def get_host_addresses()
120
- begin
121
- @hostnames_pool.call
122
- rescue Exception => ex
123
- @logger.error("Error while resolving host", :error => ex.to_s)
124
- end
92
+ def generate_table_name(event)
93
+ event.sprintf(@table_name)
125
94
  end
126
95
 
127
- # This module currently does not support parallel requests as that would circumvent the batching
128
- def receive(event)
129
- buffer_receive(event)
96
+ def generate_http_query(table_name)
97
+ params = { "query" => "INSERT INTO #{table_name} FORMAT JSONEachRow" }.merge(@extra_params)
98
+ return "?#{URI.encode_www_form(params)}"
130
99
  end
131
100
 
132
101
  def mutate(src)
@@ -153,15 +122,19 @@ class LogStash::Outputs::ClickHouse < LogStash::Outputs::Base
153
122
  public
154
123
 
155
124
  def flush(events, close = false)
156
- documents = "" #this is the string of hashes that we push to Fusion as documents
125
+ documents = {}
157
126
 
158
127
  events.each do |event|
159
- documents << LogStash::Json.dump(mutate(event.to_hash())) << "\n"
128
+ table_name = generate_table_name(event)
129
+ documents[table_name] ||= ""
130
+ documents[table_name] << LogStash::Json.dump(mutate(event.to_hash())) << "\n"
160
131
  end
161
132
 
162
- hosts = get_host_addresses()
133
+ hosts = @http_hosts.clone
163
134
 
164
- make_request(documents, hosts, @http_query, 1, 1, hosts.sample)
135
+ documents.each do |table_name, document|
136
+ make_request(document, hosts, generate_http_query(table_name), 1, 1, hosts.sample)
137
+ end
165
138
  end
166
139
 
167
140
  private
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "logstash-output-clickhouse"
3
- s.version = "0.1.3"
3
+ s.version = "0.1.5"
4
4
  s.licenses = ["Apache-2.0"]
5
5
  s.summary = "This output lets you `POST` messages as JSON in a batched fashion to ClickHouse HTTP endpoint"
6
6
  s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-clickhouse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - kmajk
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-07-15 00:00:00.000000000 Z
12
+ date: 2023-05-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: logstash-core-plugin-api
@@ -125,7 +125,6 @@ files:
125
125
  - LICENSE
126
126
  - README.md
127
127
  - lib/logstash/outputs/clickhouse.rb
128
- - lib/logstash/util/shortname_resolver.rb
129
128
  - logstash-output-clickhouse.gemspec
130
129
  homepage: https://github.com/maltoze/logstash-output-clickhouse
131
130
  licenses:
@@ -1,40 +0,0 @@
1
- require 'resolv'
2
- require 'mini_cache'
3
-
4
- class ShortNameResolver
5
- def initialize(ttl:, logger:)
6
- @ttl = ttl
7
- @store = MiniCache::Store.new
8
- @logger = logger
9
- end
10
-
11
- private
12
- def resolve_cached(shortname)
13
- @store.get_or_set(shortname) do
14
- addresses = resolve(shortname)
15
- raise "Bad shortname '#{shortname}'" if addresses.empty?
16
- MiniCache::Data.new(addresses, expires_in: @ttl)
17
- end
18
- end
19
-
20
- private
21
- def resolve(shortname)
22
- addresses = Resolv::DNS.open do |dns|
23
- dns.getaddresses(shortname).map { |r| r.to_s }
24
- end
25
-
26
- @logger.info("Resolved shortname '#{shortname}' to addresses #{addresses}")
27
-
28
- return addresses
29
- end
30
-
31
- public
32
- def get_address(shortname)
33
- return resolve_cached(shortname).sample
34
- end
35
-
36
- public
37
- def get_addresses(shortname)
38
- return resolve_cached(shortname)
39
- end
40
- end