radfish-ami 0.1.12 → 0.1.15
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/radfish/ami/version.rb +1 -1
- data/lib/radfish/ami_adapter.rb +57 -14
- 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: b7fbc8a153c2cab4049f4f939fb0256b56e9e0c707a0a38414c676a08abe3e41
|
|
4
|
+
data.tar.gz: 9b1308064a87ba306e31af4c36a130289797bffeafa416a8664445dbbd87efad
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 64c904e52a386179cccaf4ae1ccf063947424a3edf1544da07e3fad7dc466b72011638d8095960eb62a8127d70a2dff2877288a771a05d8e0386f4c6eb419a39
|
|
7
|
+
data.tar.gz: 646f1c49b11e8627520e2f4444a13b60686ff92828cf483f1091329e4604319d064ac70514bbba7b3163aa5ff902f9144bf2e60c2a0c9f92896840513ff22db1
|
data/lib/radfish/ami/version.rb
CHANGED
data/lib/radfish/ami_adapter.rb
CHANGED
|
@@ -241,9 +241,13 @@ module Radfish
|
|
|
241
241
|
OpenStruct.new(
|
|
242
242
|
name: fan["Name"] || fan["MemberId"],
|
|
243
243
|
rpm: fan["Reading"],
|
|
244
|
+
reading_units: fan["ReadingUnits"] || "RPM",
|
|
244
245
|
status: fan.dig("Status", "Health") || "OK",
|
|
246
|
+
state: fan.dig("Status", "State") || "Unknown",
|
|
247
|
+
lower_threshold_critical: fan["LowerThresholdNonCritical"],
|
|
245
248
|
min_rpm: fan["MinReadingRange"],
|
|
246
|
-
max_rpm: fan["MaxReadingRange"]
|
|
249
|
+
max_rpm: fan["MaxReadingRange"],
|
|
250
|
+
physical_context: fan["PhysicalContext"]
|
|
247
251
|
)
|
|
248
252
|
end
|
|
249
253
|
end
|
|
@@ -262,18 +266,57 @@ module Radfish
|
|
|
262
266
|
end
|
|
263
267
|
|
|
264
268
|
def psus
|
|
269
|
+
# AMI BMC reports power sensors in the Power endpoint
|
|
270
|
+
# Format: { name: "PSU1", model: "...", serial: "...",
|
|
271
|
+
# voltage: 208, voltage_human: "AC240V", watts: 320, status: "OK" }
|
|
265
272
|
power_data = get_power_data
|
|
266
|
-
|
|
273
|
+
all_sensors = power_data["PowerSupplies"] || []
|
|
274
|
+
|
|
275
|
+
# Filter for actual PSU sensors (PIN = input, POUT = output)
|
|
276
|
+
psu_sensors = all_sensors.select do |sensor|
|
|
277
|
+
name = sensor["Name"] || ""
|
|
278
|
+
name.include?("PSU")
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# Group by PSU number and merge input/output readings
|
|
282
|
+
psu_groups = {}
|
|
283
|
+
psu_sensors.each do |sensor|
|
|
284
|
+
name = sensor["Name"] || ""
|
|
285
|
+
# Extract PSU number from names like "PWR_PSU3_PIN" or "PWR_PSU2_POUT"
|
|
286
|
+
match = name.match(/PSU(\d+)/)
|
|
287
|
+
next unless match
|
|
288
|
+
|
|
289
|
+
psu_num = match[1]
|
|
290
|
+
psu_groups[psu_num] ||= { watts: nil, status: nil }
|
|
291
|
+
|
|
292
|
+
# Use PIN (input) watts as the primary wattage reading
|
|
293
|
+
if name.include?("PIN") && sensor["PowerInputWatts"]
|
|
294
|
+
psu_groups[psu_num][:watts] = sensor["PowerInputWatts"]
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# Track status - prefer non-Absent
|
|
298
|
+
sensor_state = sensor.dig("Status", "State")
|
|
299
|
+
sensor_health = sensor.dig("Status", "Health")
|
|
300
|
+
|
|
301
|
+
if sensor_state != "Absent"
|
|
302
|
+
psu_groups[psu_num][:status] = sensor_health || "OK"
|
|
303
|
+
elsif psu_groups[psu_num][:status].nil?
|
|
304
|
+
psu_groups[psu_num][:status] = "Absent"
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# Convert to OpenStruct array matching expected format
|
|
309
|
+
psu_groups.map do |psu_num, data|
|
|
267
310
|
OpenStruct.new(
|
|
268
|
-
name:
|
|
269
|
-
model:
|
|
270
|
-
serial:
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
status:
|
|
311
|
+
name: "PSU#{psu_num}",
|
|
312
|
+
model: nil, # AMI doesn't provide model info
|
|
313
|
+
serial: nil, # AMI doesn't provide serial info
|
|
314
|
+
voltage: nil, # AMI doesn't provide voltage info
|
|
315
|
+
voltage_human: nil, # AMI doesn't provide voltage type
|
|
316
|
+
watts: data[:watts],
|
|
317
|
+
status: data[:status] || "Unknown"
|
|
275
318
|
)
|
|
276
|
-
end
|
|
319
|
+
end.sort_by { |psu| psu.name }
|
|
277
320
|
end
|
|
278
321
|
|
|
279
322
|
def power_consumption
|
|
@@ -757,11 +800,11 @@ module Radfish
|
|
|
757
800
|
|
|
758
801
|
def jobs_summary
|
|
759
802
|
all_jobs = jobs
|
|
803
|
+
completed = all_jobs.count { |j| j["TaskState"] == "Completed" }
|
|
760
804
|
{
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
failed: all_jobs.count { |j| %w[Exception Killed Cancelled].include?(j["TaskState"]) }
|
|
805
|
+
'completed_count' => completed,
|
|
806
|
+
'incomplete_count' => all_jobs.size - completed,
|
|
807
|
+
'total_count' => all_jobs.size
|
|
765
808
|
}
|
|
766
809
|
end
|
|
767
810
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: radfish-ami
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.15
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jonathan Siegel
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-12-
|
|
11
|
+
date: 2025-12-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: radfish
|