expedition 0.2.0 → 0.3.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/lib/expedition/client.rb +18 -6
- data/lib/expedition/version.rb +1 -1
- data/spec/expedition/client_spec.rb +201 -0
- data/spec/spec_helper.rb +9 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b469b07e45e60d178dbfa91fa63c46c7d3d0f3ea
|
4
|
+
data.tar.gz: 88fdd81ad47d6d705cf314c72a6b66f0d4dacffe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 263182dee4dc4eaf432fb2bd3e1df358d9f90345f8203965e144b27665f354944af9e735ea0c0253c3eeeab4559a852863679f2bb312af54ab261d3b37b6d7e2
|
7
|
+
data.tar.gz: 05b339be299f3f259dbd023e5899d97c817795d77d2aee47f27ed8addacbbabc6a8197df5a3b7f2d63e8b8e2ef379e00b485d14a22cb26c611eafead42773ddd
|
data/lib/expedition/client.rb
CHANGED
@@ -41,12 +41,7 @@ module Expedition
|
|
41
41
|
|
42
42
|
def metrics
|
43
43
|
send(:devs) do |body|
|
44
|
-
body[:devs].collect
|
45
|
-
attrs.merge(
|
46
|
-
enabled: attrs[:enabled] == 'Y',
|
47
|
-
status: attrs[:status].downcase
|
48
|
-
)
|
49
|
-
}
|
44
|
+
body[:devs].collect(&method(:parse_metrics))
|
50
45
|
end
|
51
46
|
end
|
52
47
|
|
@@ -85,5 +80,22 @@ module Expedition
|
|
85
80
|
def command_json(command, *parameters)
|
86
81
|
MultiJson.dump(command: command, parameter: parameters.join(','))
|
87
82
|
end
|
83
|
+
|
84
|
+
def parse_metrics(attrs)
|
85
|
+
attrs.merge!(
|
86
|
+
enabled: attrs[:enabled] == 'Y',
|
87
|
+
status: attrs[:status].downcase,
|
88
|
+
last_share_time: (Time.at(attrs[:last_share_time]) rescue attrs[:last_share_time]),
|
89
|
+
last_valid_work: (Time.at(attrs[:last_valid_work]) rescue attrs[:last_valid_work])
|
90
|
+
)
|
91
|
+
|
92
|
+
interval = attrs.keys.detect { |k| k =~ /^mhs_\d+s$/ }[/\d+s$/]
|
93
|
+
|
94
|
+
# Remove the `_Ns` suffix from hash rate fields.
|
95
|
+
attrs.merge!(
|
96
|
+
mhs: attrs.delete("mhs_#{interval}"),
|
97
|
+
khs: attrs.delete("khs_#{interval}")
|
98
|
+
)
|
99
|
+
end
|
88
100
|
end # Client
|
89
101
|
end # Expedition
|
data/lib/expedition/version.rb
CHANGED
@@ -61,4 +61,205 @@ describe Expedition::Client do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
describe '#devices' do
|
66
|
+
|
67
|
+
subject(:devices) do
|
68
|
+
client.devices
|
69
|
+
end
|
70
|
+
|
71
|
+
let(:client) do
|
72
|
+
described_class.new
|
73
|
+
end
|
74
|
+
|
75
|
+
let(:socket) do
|
76
|
+
double(TCPSocket)
|
77
|
+
end
|
78
|
+
|
79
|
+
let(:response) do
|
80
|
+
{
|
81
|
+
'STATUS' => [
|
82
|
+
{
|
83
|
+
'STATUS' => 'S',
|
84
|
+
'When' => 1399577859,
|
85
|
+
'Code' => 69,
|
86
|
+
'Msg' => 'Device Details',
|
87
|
+
'Description' => 'sgminer 4.1.153'
|
88
|
+
}
|
89
|
+
],
|
90
|
+
'DEVDETAILS' => [
|
91
|
+
{
|
92
|
+
'DEVDETAILS' => 0,
|
93
|
+
'Name' => 'GPU',
|
94
|
+
'ID' => 0,
|
95
|
+
'Driver' => 'opencl',
|
96
|
+
'Kernel' => 'ckolivas',
|
97
|
+
'Model' => 'AMD Radeon R9 200 Series',
|
98
|
+
'Device Path' => ''
|
99
|
+
},
|
100
|
+
{
|
101
|
+
'DEVDETAILS' => 1,
|
102
|
+
'Name' => 'GPU',
|
103
|
+
'ID' => 1,
|
104
|
+
'Driver' => 'opencl',
|
105
|
+
'Kernel' => 'ckolivas',
|
106
|
+
'Model' => 'AMD Radeon R9 200 Series',
|
107
|
+
'Device Path' => ''
|
108
|
+
},
|
109
|
+
{
|
110
|
+
'DEVDETAILS' => 2,
|
111
|
+
'Name' => 'GPU',
|
112
|
+
'ID' => 2,
|
113
|
+
'Driver' => 'opencl',
|
114
|
+
'Kernel' => 'ckolivas',
|
115
|
+
'Model' => 'AMD Radeon R9 200 Series',
|
116
|
+
'Device Path' => ''
|
117
|
+
}
|
118
|
+
],
|
119
|
+
'id' => 1
|
120
|
+
}.to_json
|
121
|
+
end
|
122
|
+
|
123
|
+
before do
|
124
|
+
allow(TCPSocket).to receive(:new).with(client.host, client.port).and_return(socket)
|
125
|
+
allow(socket).to receive(:puts)
|
126
|
+
allow(socket).to receive(:gets).and_return(response)
|
127
|
+
end
|
128
|
+
|
129
|
+
specify do
|
130
|
+
expect(devices.body).to eq([
|
131
|
+
{
|
132
|
+
'device_path' => '',
|
133
|
+
'driver' => 'opencl',
|
134
|
+
'id' => 0,
|
135
|
+
'kernel' => 'ckolivas',
|
136
|
+
'model' => 'AMD Radeon R9 200 Series',
|
137
|
+
'variant' => 'gpu'
|
138
|
+
},
|
139
|
+
{
|
140
|
+
'device_path' => '',
|
141
|
+
'driver' => 'opencl',
|
142
|
+
'id' => 1,
|
143
|
+
'kernel' => 'ckolivas',
|
144
|
+
'model' => 'AMD Radeon R9 200 Series',
|
145
|
+
'variant' => 'gpu'
|
146
|
+
},
|
147
|
+
{
|
148
|
+
'device_path' => '',
|
149
|
+
'driver' => 'opencl',
|
150
|
+
'id' => 2,
|
151
|
+
'kernel' => 'ckolivas',
|
152
|
+
'model' => 'AMD Radeon R9 200 Series',
|
153
|
+
'variant' => 'gpu'
|
154
|
+
}
|
155
|
+
])
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '#metrics' do
|
160
|
+
|
161
|
+
subject(:metrics) do
|
162
|
+
client.metrics
|
163
|
+
end
|
164
|
+
|
165
|
+
let(:client) do
|
166
|
+
described_class.new
|
167
|
+
end
|
168
|
+
|
169
|
+
let(:socket) do
|
170
|
+
double(TCPSocket)
|
171
|
+
end
|
172
|
+
|
173
|
+
let(:response) do
|
174
|
+
{
|
175
|
+
'STATUS' => [
|
176
|
+
{
|
177
|
+
'STATUS' => 'S',
|
178
|
+
'When' => 1399419744,
|
179
|
+
'Code' => 9,
|
180
|
+
'Msg' => '3 GPU(s)',
|
181
|
+
'Description' => 'sgminer 4.1.153'
|
182
|
+
}
|
183
|
+
],
|
184
|
+
'DEVS' => [
|
185
|
+
{
|
186
|
+
'Accepted' => 2,
|
187
|
+
'Device Elapsed' => 11,
|
188
|
+
'Device Hardware%' => 0.0,
|
189
|
+
'Device Rejected%' => 0.0,
|
190
|
+
'Diff1 Work' => 158,
|
191
|
+
'Difficulty Accepted' => 256.0,
|
192
|
+
'Difficulty Rejected' => 0.0,
|
193
|
+
'Enabled' => 'Y',
|
194
|
+
'Fan Percent' => 50,
|
195
|
+
'Fan Speed' => -1,
|
196
|
+
'GPU Activity' => 100,
|
197
|
+
'GPU Clock' => 944,
|
198
|
+
'GPU Voltage' => 0.0,
|
199
|
+
'GPU' => 0,
|
200
|
+
'Hardware Errors' => 0,
|
201
|
+
'Intensity' => '0',
|
202
|
+
'KHS 1s' => 923,
|
203
|
+
'KHS av' => 915,
|
204
|
+
'Last Share Difficulty' => 128.0,
|
205
|
+
'Last Share Pool' => 0,
|
206
|
+
'Last Share Time' => 1399419741,
|
207
|
+
'Last Valid Work' => 1399419743,
|
208
|
+
'MHS 1s' => 0.923,
|
209
|
+
'MHS av' => 0.9148,
|
210
|
+
'Memory Clock' => 1500,
|
211
|
+
'Powertune' => 30,
|
212
|
+
'Rejected' => 0,
|
213
|
+
'Status' => 'Alive',
|
214
|
+
'Temperature' => 68.0,
|
215
|
+
'Total MH' => 10.1489,
|
216
|
+
'Utility' => 10.8166
|
217
|
+
}
|
218
|
+
],
|
219
|
+
'id' => 1
|
220
|
+
}.to_json
|
221
|
+
end
|
222
|
+
|
223
|
+
before do
|
224
|
+
allow(TCPSocket).to receive(:new).with(client.host, client.port).and_return(socket)
|
225
|
+
allow(socket).to receive(:puts)
|
226
|
+
allow(socket).to receive(:gets).and_return(response)
|
227
|
+
end
|
228
|
+
|
229
|
+
specify do
|
230
|
+
expect(metrics.body).to eq([
|
231
|
+
'accepted' => 2,
|
232
|
+
'device_elapsed' => 11,
|
233
|
+
'device_hardware_percent' => 0.0,
|
234
|
+
'device_rejected_percent' => 0.0,
|
235
|
+
'diff1_work' => 158,
|
236
|
+
'difficulty_accepted' => 256.0,
|
237
|
+
'difficulty_rejected' => 0.0,
|
238
|
+
'enabled' => true,
|
239
|
+
'fan_percent' => 50,
|
240
|
+
'fan_speed' => -1,
|
241
|
+
'gpu' => 0,
|
242
|
+
'gpu_activity' => 100,
|
243
|
+
'gpu_clock' => 944,
|
244
|
+
'gpu_voltage' => 0.0,
|
245
|
+
'hardware_errors' => 0,
|
246
|
+
'intensity' => '0',
|
247
|
+
'khs' => 923,
|
248
|
+
'khs_av' => 915,
|
249
|
+
'last_share_difficulty' => 128.0,
|
250
|
+
'last_share_pool' => 0,
|
251
|
+
'last_share_time' => Time.utc(2014, 05, 06, 23, 42, 21),
|
252
|
+
'last_valid_work' => Time.utc(2014, 05, 06, 23, 42, 23),
|
253
|
+
'memory_clock' => 1500,
|
254
|
+
'mhs' => 0.923,
|
255
|
+
'mhs_av' => 0.9148,
|
256
|
+
'powertune' => 30,
|
257
|
+
'rejected' => 0,
|
258
|
+
'status' => 'alive',
|
259
|
+
'temperature' => 68.0,
|
260
|
+
'total_mh' => 10.1489,
|
261
|
+
'utility' => 10.8166
|
262
|
+
])
|
263
|
+
end
|
264
|
+
end
|
64
265
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -19,6 +19,15 @@ RSpec.configure do |config|
|
|
19
19
|
config.order = 'random'
|
20
20
|
config.run_all_when_everything_filtered = true
|
21
21
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
22
|
+
|
23
|
+
config.before(:suite) do
|
24
|
+
@time_zone = ENV['TZ']
|
25
|
+
ENV['TZ'] = 'UTC'
|
26
|
+
end
|
27
|
+
|
28
|
+
config.after(:suite) do
|
29
|
+
ENV['TZ'] = @time_zone
|
30
|
+
end
|
22
31
|
end
|
23
32
|
|
24
33
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expedition
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabe Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|