infield 0.1.4 → 0.1.6
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/.ruby-version +1 -1
- data/lib/infield/deprecation_warning.rb +34 -23
- data/lib/infield/version.rb +1 -1
- data/lib/infield.rb +2 -2
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e38ea40e467d3cbeb1bdffa874079e8e239b5848a0b29c92950af25e29be7cc
|
4
|
+
data.tar.gz: fe0209155165140aa4b0b00c42522fa17140e9b16c0b11a5934efd88e174a0e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 851bfaa811aa0420cb11e538849e96799f2ea806620c918ee4b883d708a95343ebc4f94845d008d163d788a925037a98c4577bbaa79fd2a5c737b5740979c455
|
7
|
+
data.tar.gz: 883a1530b0d8b9924d2c11d9103e6ac8b0aebcd93586f5a5fd40bbff4451b6f79658c0229d448190acf9795ea3e3c81fbd2ed23a8a8836b51b8daa7df3c9bcdc
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.3
|
1
|
+
3.2.3
|
@@ -1,35 +1,53 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'thread'
|
4
|
+
require 'json'
|
5
5
|
require 'net/http'
|
6
6
|
|
7
7
|
module Infield
|
8
|
+
# Takes in new deprecation warnings and sends them to the Infield API
|
9
|
+
# in batches
|
8
10
|
module DeprecationWarning
|
9
11
|
Task = Struct.new(:message, :callstack)
|
10
12
|
|
13
|
+
# Handles spinning up a thread to process work
|
11
14
|
module Runner
|
12
15
|
class << self
|
13
|
-
|
14
|
-
@event ||= Concurrent::Event.new
|
15
|
-
end
|
16
|
+
attr_reader :queue
|
16
17
|
|
17
|
-
def
|
18
|
-
@
|
18
|
+
def enqueue(message)
|
19
|
+
return if @queue.size >= @queue_limit
|
20
|
+
@queue << message
|
19
21
|
end
|
20
22
|
|
21
|
-
def run
|
23
|
+
def run(sleep_interval: 5, batch_size: 10, queue_limit: 30)
|
24
|
+
@queue ||= Queue.new
|
25
|
+
@sleep_interval = sleep_interval
|
26
|
+
# Queue cannot be larger than this. If more than this number of messages come in
|
27
|
+
# before the next wake interval any extra are dropped
|
28
|
+
@queue_limit = queue_limit
|
29
|
+
@batch_size = batch_size # send up to 20 messages to API at once
|
30
|
+
|
22
31
|
Thread.new do
|
23
32
|
loop do
|
24
|
-
|
25
|
-
|
26
|
-
|
33
|
+
sleep(@sleep_interval)
|
34
|
+
next if @queue.empty?
|
35
|
+
|
36
|
+
process_queue
|
27
37
|
end
|
28
38
|
end
|
29
39
|
end
|
30
40
|
|
31
41
|
private
|
32
42
|
|
43
|
+
def process_queue
|
44
|
+
messages = []
|
45
|
+
messages << @queue.pop until @queue.empty?
|
46
|
+
messages.each_slice(@batch_size) do |batch|
|
47
|
+
post_deprecation_warnings(batch)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
33
51
|
def default_api_params
|
34
52
|
{ repo_environment_id: Infield.repo_environment_id,
|
35
53
|
environment: Infield.environment }
|
@@ -39,34 +57,27 @@ module Infield
|
|
39
57
|
URI.parse(Infield.infield_api_url)
|
40
58
|
end
|
41
59
|
|
42
|
-
def
|
60
|
+
def post_deprecation_warnings(tasks)
|
61
|
+
messages = tasks.map { |w| { message: w.message } }
|
43
62
|
uri = infield_api_uri
|
44
63
|
Net::HTTP.start(uri.host, uri.port, use_ssl: (uri.scheme == 'https')) do |http|
|
45
64
|
http.post('/api/raw_deprecation_warnings',
|
46
|
-
default_api_params.merge(
|
65
|
+
default_api_params.merge(messages: messages).to_json,
|
47
66
|
{ 'Content-Type' => 'application/json', 'Authorization' => "bearer #{Infield.api_key}" })
|
48
67
|
end
|
49
68
|
end
|
50
|
-
|
51
|
-
def deliver
|
52
|
-
while (task = tasks.shift)
|
53
|
-
upload_message(task)
|
54
|
-
end
|
55
|
-
end
|
56
69
|
end
|
57
70
|
end
|
58
71
|
|
59
72
|
class << self
|
60
73
|
def log(*messages, callstack: nil, validated: false)
|
61
74
|
messages = messages.select(&method(:valid_message)) unless validated
|
62
|
-
messages.each { |message|
|
63
|
-
|
75
|
+
messages.each { |message| Runner.enqueue(Task.new(message, callstack)) }
|
76
|
+
true
|
64
77
|
end
|
65
78
|
|
66
79
|
private
|
67
80
|
|
68
|
-
delegate :tasks, to: 'Infield::DeprecationWarning::Runner'
|
69
|
-
|
70
81
|
def valid_message(message)
|
71
82
|
message =~ /(?:^|\W)deprecated(?:$|\W)/i
|
72
83
|
end
|
data/lib/infield/version.rb
CHANGED
data/lib/infield.rb
CHANGED
@@ -13,7 +13,7 @@ module Infield
|
|
13
13
|
class << self
|
14
14
|
attr_accessor :api_key, :repo_environment_id, :environment, :infield_api_url
|
15
15
|
|
16
|
-
def run(api_key: nil, repo_environment_id: nil, environment: nil)
|
16
|
+
def run(api_key: nil, repo_environment_id: nil, environment: nil, sleep_interval: 5, batch_size: 10, queue_limit: 30)
|
17
17
|
@api_key = api_key || ENV['INFIELD_API_KEY']
|
18
18
|
@repo_environment_id = repo_environment_id
|
19
19
|
@infield_api_url = ENV['INFIELD_API_URL'] || 'https://app.infield.ai'
|
@@ -21,7 +21,7 @@ module Infield
|
|
21
21
|
raise 'repo_environment_id is required' unless @repo_environment_id
|
22
22
|
|
23
23
|
@environment = environment || defined?(Rails) ? Rails.env : nil
|
24
|
-
DeprecationWarning::Runner.run
|
24
|
+
DeprecationWarning::Runner.run(sleep_interval: sleep_interval, batch_size: batch_size, queue_limit: queue_limit)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: infield
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Infield
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-09-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: concurrent-ruby
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.0'
|
11
|
+
date: 2024-09-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
27
13
|
description:
|
28
14
|
email:
|
29
15
|
- support@infield.ai
|