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