@@ -176,6 +176,7 @@ def sort_data(data, key)
176
176
177
177
def get_hardware ( sites )
178
178
global_hash = G5K ::get_global_hash
179
+ known_devices_name = [ "sda" , "sdb" , "sdc" , "sdd" , "sde" , "sdf" , "nvme1n1" , "nvme0n1" ]
179
180
180
181
# Loop over each cluster of the site
181
182
hardware = { }
@@ -184,6 +185,11 @@ def get_hardware(sites)
184
185
site_hash [ 'clusters' ] . sort . to_h . each { |cluster_uid , cluster_hash |
185
186
hardware [ site_uid ] [ cluster_uid ] = { }
186
187
cluster_hash . fetch ( 'nodes' ) . sort . each { |node_uid , node_hash |
188
+ node_hash [ 'storage_devices' ] . map do |d |
189
+ unless known_devices_name . include? ( d [ 'device' ] )
190
+ raise "unknown device name: #{ d [ 'device' ] } , can't sort correctly"
191
+ end
192
+ end
187
193
next if node_hash [ 'status' ] == 'retired'
188
194
# map model to vendor (eg: {'SAS5484654' => 'Seagate', 'PX458' => 'Toshiba' ...}
189
195
hard = { }
@@ -206,16 +212,17 @@ def get_hardware(sites)
206
212
hard [ 'processor_description' ] = "#{ hard [ 'processor_model' ] } (#{ hard [ 'microarchitecture' ] } #{ hard [ 'processor_freq' ] ? ', ' + hard [ 'processor_freq' ] : '' } , #{ hard [ 'cpus_per_node_str' ] } , #{ hard [ 'cores_per_cpu_str' ] } )"
207
213
hard [ 'ram_size' ] = G5K . get_size ( node_hash [ 'main_memory' ] [ 'ram_size' ] )
208
214
hard [ 'pmem_size' ] = G5K . get_size ( node_hash [ 'main_memory' ] [ 'pmem_size' ] ) unless node_hash [ 'main_memory' ] [ 'pmem_size' ] . nil?
209
- storage = node_hash [ 'storage_devices' ] . map { |i | { 'size' => i [ 'size' ] , 'tech' => i [ 'storage' ] } }
215
+ storage = node_hash [ 'storage_devices' ] . sort_by! { | d | known_devices_name . index ( d [ 'device' ] ) } . map { |i | { 'size' => i [ 'size' ] , 'tech' => i [ 'storage' ] } }
210
216
hard [ 'storage' ] = storage . each_with_object ( Hash . new ( 0 ) ) { |data , counts |
211
217
counts [ data ] += 1
212
- } . to_a . sort_by { |e |
213
- e [ 0 ] [ 'size' ] . to_f
214
- } . map { |e |
215
- ( e [ 1 ] == 1 ? '' : e [ 1 ] . to_s + ' x ' ) +
216
- G5K . get_size ( e [ 0 ] [ 'size' ] , 'metric' ) +
217
- ' ' +
218
- e [ 0 ] [ 'tech' ]
218
+ } . to_a
219
+ . map . with_index { |e , i |
220
+ size = G5K . get_size ( e [ 0 ] [ 'size' ] , 'metric' )
221
+ if i . zero?
222
+ ( e [ 1 ] == 1 ? "<b>#{ size } #{ e [ 0 ] [ 'tech' ] } </b>" : "<b>1 x #{ size } #{ e [ 0 ] [ 'tech' ] } </b>" + ' + ' + ( e [ 1 ] - 1 ) . to_s + " x #{ size } #{ e [ 0 ] [ 'tech' ] } " )
223
+ else
224
+ ( e [ 1 ] == 1 ? "#{ size } #{ e [ 0 ] [ 'tech' ] } " : e [ 1 ] . to_s + " x #{ size } #{ e [ 0 ] [ 'tech' ] } " )
225
+ end
219
226
} . join ( ' + ' )
220
227
221
228
hard [ 'storage_size' ] = storage . inject ( 0 ) { |sum , v | sum + ( v [ 'size' ] . to_f / 2 **30 ) . floor } . to_s # round to GB to avoid small differences within a cluster
@@ -236,7 +243,7 @@ def get_hardware(sites)
236
243
}
237
244
end
238
245
239
- hard [ 'storage_description' ] = storage_description . map { |e |
246
+ hard [ 'storage_description' ] = storage_description . sort_by! { | d | known_devices_name . index ( d [ 'device' ] ) } . map { |e |
240
247
[
241
248
e [ 'count' ] > 1 ? "\n *" : '' ,
242
249
G5K . get_size ( e [ 'size' ] , 'metric' ) ,
@@ -245,7 +252,8 @@ def get_hardware(sites)
245
252
e [ 'vendor' ] ,
246
253
e [ 'model' ] ,
247
254
' (driver: ' + ( e [ 'driver' ] || 'MISSING' ) + ', path: ' + ( e [ 'path' ] || 'MISSING' ) + ')' ,
248
- e [ 'reservation' ] ? '[[Disk_reservation|(reservable)]]' : ''
255
+ e [ 'reservation' ] ? '[[Disk_reservation|(reservable)]]' : '' ,
256
+ e [ 'device' ] == 'sda' ? '(primary disk)' : ''
249
257
] . join ( ' ' )
250
258
} . join ( '<br />' )
251
259
0 commit comments