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 +4 -4
- data/Gemfile.lock +2 -22
- data/README.md +3 -3
- data/lib/q3_servers/list.rb +11 -16
- data/lib/q3_servers/massive_helper.rb +5 -5
- data/lib/q3_servers/server.rb +8 -0
- data/lib/q3_servers/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fb8f8effc44482edebea0de3ba0a458ef03d7ebe44dabec1ecee2b2acfaa0d0
|
4
|
+
data.tar.gz: 68567822f194a905695e814fe158be591b1a2d852eff6d69b9f885eb959896e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 (
|
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
|
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({},
|
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
|
data/lib/q3_servers/list.rb
CHANGED
@@ -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
|
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? &&
|
49
|
+
cache? && server.info? && !server_info_outdated?(server)
|
48
50
|
end
|
49
51
|
|
50
52
|
def cached_status?(server)
|
51
|
-
cache? &&
|
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
|
-
|
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
|
-
(!
|
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
|
-
(!
|
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
|
-
|
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,
|
8
|
-
@
|
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
|
-
|
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
|
-
|
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
|
-
|
42
|
+
@logger.info "Retry n #{retries}" if @logger
|
43
43
|
end
|
44
44
|
end
|
45
45
|
servers_with_info
|
data/lib/q3_servers/server.rb
CHANGED
data/lib/q3_servers/version.rb
CHANGED
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:
|
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-
|
11
|
+
date: 2021-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|