net-knocker 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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: