net-knocker 0.0.3 → 0.0.4

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: 3a06a05f3713cda7540c42ceb9d72543471b226bd9874d6d83fc1c1156e8d923
4
- data.tar.gz: 55310cefb6bfa19cbaac755de7611fc6ceb320b00cfb60c96f16c9cb1f78f63e
3
+ metadata.gz: d2b9e2759985d6e60c6ff108157155b7862d703c2e1836284f89f2786e58d199
4
+ data.tar.gz: dce4cd990ad60f354628f15e83bb2fe9cadfd7d1bb1ea973e7211447711107a7
5
5
  SHA512:
6
- metadata.gz: 29d2ae81c2db18ff5e7619ff817d1dfd8cad4fffdf0a0d410afecf74ceddde6ba9f614240f8a672fa689774f89666a9995d248073d3d256d03ab5595c846eb63
7
- data.tar.gz: 636c3fd921b0a223bad6ab2359559043fd767a6f535e0af0fd2dc55faa407d6532891819b46f03d25d0faf9a5fef9b7f2a93588797cbf9f5bfa41ca696fbe805
6
+ metadata.gz: 43ae20154a32b3a730952bec81a0b0c5a2159c7038b9d1276e4ff11fbf8edbcfb07ae8b6bfc6021c0d892ec47b797a6db14f2a13a7f496fe221c2bcc5540114b
7
+ data.tar.gz: 3b3783e2c1d6a7d7b842f6e93f07ad4b0ca2dbe1e759b94e39ea7942c085d3f2b35a7532bbbff77ee8f74bd6fd24b64dfd6bb74ee242089d4ac4337a94f642fa
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'logger'
4
+ require 'net/https'
5
+ require 'uri'
6
+
3
7
  module Net
4
8
  class Knocker
5
9
  module Env
@@ -36,6 +40,23 @@ module Net
36
40
  end
37
41
  end
38
42
 
43
+ def info(method = :info, msg)
44
+ tags = [self.class.name, Process.pid, method.to_s.upcase].join('][')
45
+ log.send(method, "[#{tags}] #{msg}")
46
+ end
47
+
48
+ def error(msg)
49
+ info(__method__, msg)
50
+ end
51
+
52
+ def warn(msg)
53
+ info(__method__, msg)
54
+ end
55
+
56
+ def debug(msg)
57
+ info(__method__, msg)
58
+ end
59
+
39
60
  def ssl_certificate
40
61
  @ssl_certificate ||= OpenSSL::X509::Certificate.new(env_secret)
41
62
  end
@@ -45,13 +66,13 @@ module Net
45
66
  end
46
67
 
47
68
  def log
48
- @log ||= if (defined? logger) && (logger.respond_to? :debug)
49
- logger
50
- elsif (defined? Rails.logger) && (Rails.logger.respond_to? :debug)
51
- Rails.logger
52
- else
53
- ::Logger.new($stderr)
54
- end
69
+ @log ||= if (defined? logger) && (logger.respond_to? :debug)
70
+ logger
71
+ elsif (defined? Rails.logger) && (Rails.logger.respond_to? :debug)
72
+ Rails.logger
73
+ else
74
+ ::Logger.new($stderr)
75
+ end
55
76
  end
56
77
  end
57
78
  end
@@ -3,25 +3,40 @@
3
3
  module Net
4
4
  class Knocker
5
5
  class Peer
6
- def self.any?
7
- return unless ENV
8
-
9
- Dir['/proc/*/environ']
10
- .select { |path| File.readable_real? path }
11
- .grep_v(self_patterns)
12
- .select do |path|
13
- content = File.read(path)
14
- env_var_patterns.any? { |pattern| content.include? pattern }
15
- end
16
- .any?
17
- end
18
-
19
6
  def self.env_var_patterns
20
7
  @env_var_patterns ||= %W[NET_KNOCKER_URL NET_KNOCKER_SECRET #{ENV['NET_KNOCKER_URL']}].freeze
21
8
  end
22
9
 
10
+ # filter out /proc/self/environ, /proc/thread-self/environ, /proc/<PID>/environ" and "/proc/1/environ"
23
11
  def self.self_patterns
24
- @self_patterns ||= %r{proc/((?:thread-)?self|#{Process.pid})/environ}.freeze
12
+ @self_patterns ||= %r{proc/((?:thread-)?self|#{Process.pid}|1)/environ}.freeze
13
+ end
14
+
15
+ def self.environ_paths
16
+ Dir['/proc/*/environ'].grep_v(self_patterns)
17
+ .map { |p| Pathname.new(p) }
18
+ .compact
19
+ end
20
+
21
+ def self.pid_with_content
22
+ environ_paths.map do |path|
23
+ content = begin
24
+ path.binread
25
+ .split("\0")
26
+ .select { |e| env_var_patterns.any? { |p| e.include? p } }
27
+ .compact
28
+ rescue StandardError
29
+ next
30
+ end
31
+ pid = path.to_s.split('/').third.to_s
32
+ [pid, content] unless content.empty? || pid.empty?
33
+ end
34
+ .compact
35
+ .to_h
36
+ end
37
+
38
+ def self.any?(&block)
39
+ pid_with_content.any?(&block)
25
40
  end
26
41
  end
27
42
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Net
4
4
  class Knocker
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.4'
6
6
  end
7
7
  end
data/lib/net/knocker.rb CHANGED
@@ -3,9 +3,6 @@
3
3
  require_relative './knocker/version'
4
4
  require_relative './knocker/env'
5
5
  require_relative './knocker/peer'
6
- require 'logger'
7
- require 'net/https'
8
- require 'uri'
9
6
 
10
7
  module Net
11
8
  class Knocker
@@ -23,8 +20,13 @@ module Net
23
20
  send_request 'PUT'
24
21
  end
25
22
 
23
+ def msg_end
24
+ "to #{url}" unless url.to_s.empty?
25
+ end
26
+
26
27
  def out
27
- return log.info("[#{self.class}:#{Process.pid}] omitting to send a request") if Peer.any?
28
+ return debug("not sending DELETE request #{msg_end})") if should_omit?
29
+ return info("sending DELETE request is blocked by PID(s) #{Peer.pid_with_content.keys.join(',')}") if Peer.any?
28
30
 
29
31
  send_request 'DELETE'
30
32
  end
@@ -32,10 +34,10 @@ module Net
32
34
  private
33
35
 
34
36
  def send_request(http_method)
35
- return log.info("[#{self.class}:#{Process.pid}] omitting to send a request") if should_omit?
37
+ return debug("not sending #{http_method} request #{msg_end}") if should_omit?
36
38
 
37
39
  http_client.send_request(http_method, '/') do |response|
38
- log.debug("[#{self.class}][#{__method__}] Public IP: #{response.body} ")
40
+ debug("[#{self.class}][#{__method__}] Public IP: #{response.body} ")
39
41
  end
40
42
  end
41
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-knocker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tio Teath
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-12 00:00:00.000000000 Z
11
+ date: 2022-04-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: