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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5eece6126f4c0d048e1aedcaa23d466e77c33dd4b69595bc6b53016815c7cec
4
- data.tar.gz: 9da097025394a758dc0fa4a2347ce90993113d4d0086f985534580104a2298b3
3
+ metadata.gz: b7fbc8a153c2cab4049f4f939fb0256b56e9e0c707a0a38414c676a08abe3e41
4
+ data.tar.gz: 9b1308064a87ba306e31af4c36a130289797bffeafa416a8664445dbbd87efad
5
5
  SHA512:
6
- metadata.gz: 3ec9ee1430c502c6e0364a9d345d16c67d9d459ee3ce226d8d92bafb0c1151a9bf714cb5cd94d4490da9a950ff50550d773a9062a45782b4cf6d3af8a91b8a53
7
- data.tar.gz: 2a347044b3101aff4f31e47aaabf4d3bf68e752aea0e48864920b38b2a8a9df1c140fd97fd91fd6938cf9e148d75af36503069bcb10ae6471b28d9438b867add
6
+ metadata.gz: 64c904e52a386179cccaf4ae1ccf063947424a3edf1544da07e3fad7dc466b72011638d8095960eb62a8127d70a2dff2877288a771a05d8e0386f4c6eb419a39
7
+ data.tar.gz: 646f1c49b11e8627520e2f4444a13b60686ff92828cf483f1091329e4604319d064ac70514bbba7b3163aa5ff902f9144bf2e60c2a0c9f92896840513ff22db1
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Radfish
4
4
  module Ami
5
- VERSION = "0.1.12"
5
+ VERSION = "0.1.15"
6
6
  end
7
7
  end
@@ -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
- (power_data["PowerSupplies"] || []).map do |psu|
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: psu["Name"] || psu["MemberId"],
269
- model: psu["Model"],
270
- serial: psu["SerialNumber"],
271
- watts: psu["PowerCapacityWatts"],
272
- voltage: psu.dig("InputRanges", 0, "NominalVoltageVolts"),
273
- voltage_human: psu.dig("InputRanges", 0, "InputType"),
274
- status: psu.dig("Status", "Health") || "OK"
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
- total: all_jobs.size,
762
- running: all_jobs.count { |j| j["TaskState"] == "Running" },
763
- completed: all_jobs.count { |j| j["TaskState"] == "Completed" },
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.12
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-20 00:00:00.000000000 Z
11
+ date: 2025-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: radfish