q3_servers 0.1.0 → 1.0.0

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: 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: