q3_servers 0.1.0 → 1.0.0

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: f82fbeb9b327a11aedb51d1ad6f3dd98d20ff7863d5d1c108e70680cfc4f3ffb
4
- data.tar.gz: 45fa2991f473f0714823d3574a1965dc56b249fc2a7a63c1a753e15bd752bcd9
3
+ metadata.gz: 9fb8f8effc44482edebea0de3ba0a458ef03d7ebe44dabec1ecee2b2acfaa0d0
4
+ data.tar.gz: 68567822f194a905695e814fe158be591b1a2d852eff6d69b9f885eb959896e6
5
5
  SHA512:
6
- metadata.gz: 96f27480478d3f3443cd5451cd2876f036949037d2cc22731dc8c39734ec561d6f005430489fb133bdd286153b76289bf7d317f6d7330464ab40a0ded0d0d16b
7
- data.tar.gz: '01168eac86e3c2bfa307c5c323b204b154e1bab4242387660504300553f9598ee19c732c9d67365c7cda751d74dca55d447c5451c2655fba6ba18b3e1eab3fd0'
6
+ metadata.gz: f157543e7674b674c0f6bcfd98b01ceaf43a54552c2de5e03b8b116142bc8056715827ab394b41f4676f08f2f2e378af6aea268aeecac1f38bcc9167f01e9622
7
+ data.tar.gz: 59dd575a839a181cca3101a020c7e3214b9e6c6be6d98a3da47f5f9ef54340b01ecb167e6eafdbc87580ac7dfc4c5fad2ecd214500f51b42cf95b3bd525c594f
data/Gemfile.lock CHANGED
@@ -1,42 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- q3_servers (0.1.0)
4
+ q3_servers (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- ast (2.4.2)
10
9
  minitest (5.14.4)
11
- parallel (1.20.1)
12
- parser (3.0.1.1)
13
- ast (~> 2.4.1)
14
- rainbow (3.0.0)
15
10
  rake (12.3.3)
16
- regexp_parser (2.1.1)
17
- rexml (3.2.5)
18
- rubocop (1.17.0)
19
- parallel (~> 1.10)
20
- parser (>= 3.0.0.0)
21
- rainbow (>= 2.2.2, < 4.0)
22
- regexp_parser (>= 1.8, < 3.0)
23
- rexml
24
- rubocop-ast (>= 1.7.0, < 2.0)
25
- ruby-progressbar (~> 1.7)
26
- unicode-display_width (>= 1.4.0, < 3.0)
27
- rubocop-ast (1.7.0)
28
- parser (>= 3.0.1.1)
29
- ruby-progressbar (1.11.0)
30
- unicode-display_width (2.0.0)
31
11
 
32
12
  PLATFORMS
13
+ ruby
33
14
  x86_64-linux
34
15
 
35
16
  DEPENDENCIES
36
17
  minitest (~> 5.0)
37
18
  q3_servers!
38
19
  rake (~> 12.0)
39
- rubocop
40
20
 
41
21
  BUNDLED WITH
42
22
  2.2.17
data/README.md CHANGED
@@ -38,16 +38,16 @@ Or install it yourself as:
38
38
  servers = q3_urt_list.fetch_servers({})
39
39
  ```
40
40
  ##### Threads
41
- You can use use_threads keyword, for multi-threaded fetching (one for each server found!)
41
+ You can use the second argument as true, for multi-threaded fetching (one for each server found!)
42
42
  ```ruby
43
- q3_urt_list.fetch_servers({}, use_threads: true)
43
+ q3_urt_list.fetch_servers({}, true)
44
44
  ```
45
45
 
46
46
  ##### Filter
47
47
  Filter by keys from "info" attribute in Q3Servers::Server
48
48
  example:
49
49
  ```ruby
50
- q3_urt_list.fetch_servers({hostname: "Arg"})
50
+ q3_urt_list.fetch_servers({hostname: "Arg"}, false)
51
51
  ```
52
52
 
53
53
  #### And now read information from each server
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'socket'
4
4
  require 'date'
5
+ require 'logger'
5
6
 
6
7
  module Q3Servers
7
8
  class List
@@ -9,7 +10,7 @@ module Q3Servers
9
10
  MAX_LENGTH = 65_536
10
11
 
11
12
  attr_reader :master_socket, :threads, :servers, :favorites
12
- attr_accessor :cache, :timeout, :master_updated_at, :debug, :master_cache_secs, :info_cache_secs, :only_favorites,
13
+ attr_accessor :cache, :timeout, :master_updated_at, :debug, :logger, :master_cache_secs, :info_cache_secs, :only_favorites,
13
14
  :master_address, :master_port
14
15
  alias only_favorites? only_favorites
15
16
  alias cache? cache
@@ -27,9 +28,10 @@ module Q3Servers
27
28
  @master_port = 27_900
28
29
  @master_address = 'master.urbanterror.info' # 51.75.224.242
29
30
  @threads = []
31
+ @logger = Logger.new(STDOUT)
30
32
  end
31
33
 
32
- def fetch_servers(filter = {}, use_threads: false)
34
+ def fetch_servers(filter = {}, use_threads = false)
33
35
  servers_list_from_master if master_server_outdated? && !only_favorites?
34
36
  fetch_info_servers(filter, use_threads)
35
37
  end
@@ -44,11 +46,11 @@ module Q3Servers
44
46
  end
45
47
 
46
48
  def cached_info?(server)
47
- cache? && server_info?(server) && !server_info_outdated?(server)
49
+ cache? && server.info? && !server_info_outdated?(server)
48
50
  end
49
51
 
50
52
  def cached_status?(server)
51
- cache? && server_status?(server) && !server_status_outdated?(server)
53
+ cache? && server.info_status? && !server_status_outdated?(server)
52
54
  end
53
55
 
54
56
  def add_server(server)
@@ -78,14 +80,6 @@ module Q3Servers
78
80
  server.info
79
81
  end
80
82
 
81
- def server_info?(server)
82
- !server.info.empty?
83
- end
84
-
85
- def server_status?(server)
86
- server_info?(server) && !server.info_status.empty?
87
- end
88
-
89
83
  def fill_list_favorites
90
84
  favorites.each do |fav|
91
85
  add_server(fav)
@@ -142,7 +136,7 @@ module Q3Servers
142
136
  end
143
137
 
144
138
  def print_debug(info)
145
- p info if @debug
139
+ logger.info(info) if @debug
146
140
  end
147
141
 
148
142
  def to_ip(decimal)
@@ -154,15 +148,16 @@ module Q3Servers
154
148
  end
155
149
 
156
150
  def server_info_outdated?(server)
157
- (!server_info?(server) or (DateTime.now > (server.updated_at + Rational(info_cache_secs, 86_400))))
151
+ (!server.info? or (DateTime.now > (server.updated_at + Rational(info_cache_secs, 86_400))))
158
152
  end
159
153
 
160
154
  def server_status_outdated?(server)
161
- (!server_status?(server) or (DateTime.now > (server.status_updated_at + Rational(info_cache_secs, 86_400))))
155
+ (!server.info_status? or (DateTime.now > (server.status_updated_at + Rational(info_cache_secs, 86_400))))
162
156
  end
163
157
 
164
158
  def massive_read_info_status(servers, filter)
165
- massive_helper = MassiveHelper.new(servers.select(&:request_status?), self)
159
+ logger_object = debug ? logger : nil
160
+ massive_helper = MassiveHelper.new(servers.select(&:request_status?), logger_object)
166
161
  alive_servers = massive_helper.read_info_servers(2, timeout) do |server|
167
162
  server.read_info unless cached_info?(server)
168
163
  end
@@ -4,20 +4,20 @@ module Q3Servers
4
4
  class MassiveHelper
5
5
  attr_accessor :sockets, :servers
6
6
 
7
- def initialize(servers, context)
8
- @context = context
7
+ def initialize(servers, logger)
8
+ @logger = logger
9
9
  @servers = servers.each_with_object({}) do |server, hsh|
10
10
  hsh[server.unique_index] = server
11
11
  end
12
12
  end
13
13
 
14
14
  def read_info_servers(max_retries, timeout, &block)
15
- puts '======== Read Info servers ========'
15
+ @logger.info '======== Read Info servers ========' if @logger
16
16
  read_info(servers.map { |_unique_index, server| server.socket }, max_retries, timeout, &Proc.new)
17
17
  end
18
18
 
19
19
  def read_status_servers(servers, max_retries, timeout)
20
- puts '======== Read Status servers ========'
20
+ @logger.info '======== Read Status servers ========' if @logger
21
21
  read_info(servers.map(&:socket), max_retries, timeout, &Proc.new)
22
22
  end
23
23
 
@@ -39,7 +39,7 @@ module Q3Servers
39
39
  end
40
40
  else
41
41
  retries += 1
42
- puts "Retry n #{retries}"
42
+ @logger.info "Retry n #{retries}" if @logger
43
43
  end
44
44
  end
45
45
  servers_with_info
@@ -95,6 +95,14 @@ module Q3Servers
95
95
  define_method("#{status}_status?") { self.status == status }
96
96
  end
97
97
 
98
+ def info?
99
+ !info.empty?
100
+ end
101
+
102
+ def info_status?
103
+ info? && !info_status.empty?
104
+ end
105
+
98
106
  private
99
107
 
100
108
  def touch!
@@ -1,3 +1,3 @@
1
1
  module Q3Servers
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: q3_servers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Pablo Garritano
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-22 00:00:00.000000000 Z
11
+ date: 2021-08-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: