amdgpu_fan 0.8.0 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1fb09354467c6ffeb603c4cbc72b131c626e83d4403148ebeb5fac342222ac29
4
- data.tar.gz: b62420cbf660f704682f34565128c749216bb5605b3d57b843f4bc85671aa09c
3
+ metadata.gz: c56a24ac7feceacab33c70e7a59e6126653f9a8507f468a3ea948e2372b24ec1
4
+ data.tar.gz: 4c5b6634b9d805d0bcf5de22346b6865aae9d54aea515f75c25ff5476916de6b
5
5
  SHA512:
6
- metadata.gz: f9a94891e8024c9e2c58c46feb4b7654e69978a9215278d9588065db177e8df447670cad9be726f608f16bd77f4a26e2a05fe16c536ce42bce0c9242489d2b43
7
- data.tar.gz: 8046858789272ed17ce75304f53ee3915973193bc81bd301335448456c99bd8d4d774962668b2b98388a24301e158d4cffb18a65a28d27c7fd45c130c639740d
6
+ metadata.gz: 5fb3898d03b55097970f1cbffb1a9fe813e463564e905fa23025161aa783e73dfd9b03e0cd6842c2b69fc1552fbbd11cebcc8318a139e33d5868cc41a30023a8
7
+ data.tar.gz: 6b8417efa976498f35d2fdc5eb4c8360f38a8a645c0b5b1586a5b6f190cacbb07360c2da76be56123cf49838ae483e760eeebaefe84e38d9d44eda1ba03de5ac
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # amdgpu_fan
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/amdgpu_fan.svg)](https://badge.fury.io/rb/amdgpu_fan)
4
- [![Build Status](https://travis-ci.org/HarlemSquirrel/amdgpu-fan-rb.svg?branch=master)](https://travis-ci.org/HarlemSquirrel/amdgpu-fan-rb) [![Maintainability](https://api.codeclimate.com/v1/badges/27233cee17ef6a2c14fd/maintainability)](https://codeclimate.com/github/HarlemSquirrel/amdgpu-fan-rb/maintainability)
4
+ [![Verify](https://github.com/HarlemSquirrel/amdgpu-fan-rb/actions/workflows/verify.yml/badge.svg)](https://github.com/HarlemSquirrel/amdgpu-fan-rb/actions/workflows/verify.yml)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/27233cee17ef6a2c14fd/maintainability)](https://codeclimate.com/github/HarlemSquirrel/amdgpu-fan-rb/maintainability)
5
6
 
6
7
  A Ruby CLI to read and set fan speed, power profiles, and more for AMD Radeon graphics cards running on the AMDGPU Linux driver.
7
8
 
data/config/icons.yml CHANGED
@@ -3,8 +3,8 @@ clock: ⏰
3
3
  display: 📺
4
4
  fan: 🌀
5
5
  gpu: 👾
6
- load: ""
6
+ load: "🚚"
7
7
  memory: 💾
8
8
  power: ⚡
9
- temp: "🌡 "
9
+ temp: "🧯"
10
10
  vbios: 📄
@@ -9,10 +9,14 @@ module AmdgpuFan
9
9
  class Cli < Thor
10
10
  include CliOutputFormat
11
11
 
12
- ICONS = YAML.safe_load(File.read(File.join(__dir__, '../../config/icons.yml')))
12
+ ICONS = YAML.safe_load_file(File.join(__dir__, '../../config/icons.yml'))
13
13
  .transform_keys(&:to_sym).freeze
14
14
  WATCH_FIELD_SEPARATOR = ' | '
15
15
 
16
+ def self.exit_on_failure?
17
+ true
18
+ end
19
+
16
20
  desc 'connectors', 'View the status of the display connectors.'
17
21
  def connectors
18
22
  amdgpu_service.connectors.each do |connector|
@@ -58,19 +62,19 @@ module AmdgpuFan
58
62
  desc 'status [--logo]', 'View device info, current fan speed, and temperature.'
59
63
  def status(option = nil)
60
64
  puts radeon_logo if option == '--logo'
61
- puts ICONS[:gpu] + ' GPU:'.ljust(9) + amdgpu_service.name
62
- puts ICONS[:vbios] + ' vBIOS:'.ljust(9) + amdgpu_service.vbios_version
63
- puts "#{ICONS[:display]} Displays:#{amdgpu_service.display_names.join(', ')}"
64
- puts ICONS[:clock] + ' Clocks:'.ljust(9) + clock_status
65
- puts ICONS[:memory] + ' Memory:'.ljust(9) + mem_total_mibibyes
66
- puts ICONS[:fan] + ' Fan:'.ljust(9) + fan_status
67
- puts ICONS[:temp] + ' Temp:'.ljust(9) + "#{amdgpu_service.temperature}°C"
68
- puts ICONS[:power] + ' Power:'.ljust(9) +
65
+ puts ICONS[:gpu] + ' GPU:'.ljust(11) + amdgpu_service.name
66
+ puts ICONS[:vbios] + ' vBIOS:'.ljust(11) + amdgpu_service.vbios_version
67
+ puts "#{ICONS[:display]} Displays: #{amdgpu_service.display_names.join(', ')}"
68
+ puts ICONS[:clock] + ' Clocks:'.ljust(11) + clock_status
69
+ puts ICONS[:memory] + ' Memory:'.ljust(11) + mem_total_mibibyes
70
+ puts ICONS[:fan] + ' Fan:'.ljust(11) + fan_status
71
+ puts ICONS[:temp] + ' Temp:'.ljust(11) + "#{amdgpu_service.temperature}°C"
72
+ puts ICONS[:power] + ' Power:'.ljust(11) +
69
73
  "#{amdgpu_service.profile_mode} profile in " \
70
74
  "#{amdgpu_service.power_dpm_state} mode using " \
71
- "#{amdgpu_service.power_draw} / #{amdgpu_service.power_max} Watts "\
75
+ "#{amdgpu_service.power_draw} / #{amdgpu_service.power_max} Watts " \
72
76
  "(#{amdgpu_service.power_draw_percent}%)"
73
- puts ICONS[:load] + ' Load:'.ljust(9) + percent_meter(amdgpu_service.busy_percent)
77
+ puts ICONS[:load] + ' Load:'.ljust(11) + percent_meter(amdgpu_service.busy_percent, 12)
74
78
  end
75
79
 
76
80
  desc 'version', 'Print the application version.'
@@ -121,9 +125,10 @@ module AmdgpuFan
121
125
 
122
126
  loop do
123
127
  watcher.measure
124
- 5.times { print "\033[K\033[A" } # move up a line and clear to end of line
128
+ 6.times { print "\033[K\033[A" } # move up a line and clear to end of line
125
129
 
126
- puts "#{ICONS[:clock]} Core clock #{watcher.core_clock}",
130
+ puts "#{ICONS[:load]} Load #{watcher.busy_percent}",
131
+ "#{ICONS[:clock]} Core clock #{watcher.core_clock}",
127
132
  "#{ICONS[:memory]} Memory clk #{watcher.memory_clock}",
128
133
  "#{ICONS[:fan]} Fan speed #{watcher.fan_speed_rpm}",
129
134
  "#{ICONS[:power]} Power usage #{watcher.power_draw}",
@@ -137,7 +142,7 @@ module AmdgpuFan
137
142
  def watch_csv(seconds = 1)
138
143
  return puts 'Seconds must be from 1 to 600' unless (1..600).cover?(seconds.to_i)
139
144
 
140
- puts 'Timestamp,Core Clock (Mhz),Memory Clock (Mhz),Fan speed (rpm),'\
145
+ puts 'Timestamp,Core Clock (Mhz),Memory Clock (Mhz),Fan speed (rpm),' \
141
146
  'Load (%),Power (Watts),Temp (°C)'
142
147
 
143
148
  trap 'SIGINT' do
@@ -165,6 +170,7 @@ module AmdgpuFan
165
170
  private
166
171
 
167
172
  def amdgpu_service
173
+ # Right now we're only looking at the first card.
168
174
  @amdgpu_service ||= AmdgpuFan::Service.new
169
175
  end
170
176
 
@@ -186,7 +192,7 @@ module AmdgpuFan
186
192
  end
187
193
 
188
194
  def summary_clock
189
- "Core: #{amdgpu_service.core_clock.to_s.rjust(7)}#{WATCH_FIELD_SEPARATOR}"\
195
+ "Core: #{amdgpu_service.core_clock.to_s.rjust(7)}#{WATCH_FIELD_SEPARATOR}" \
190
196
  "Memory: #{amdgpu_service.memory_clock.to_s.rjust(7)}"
191
197
  end
192
198
 
@@ -200,8 +206,8 @@ module AmdgpuFan
200
206
  end
201
207
 
202
208
  def summary_power
203
- "Power: #{format('%<num>0.02f', num: amdgpu_service.power_draw).rjust(power_max.length)} W" \
204
- " #{percent_meter amdgpu_service.power_draw_percent}"
209
+ "Power: #{format('%<num>0.02f', num: amdgpu_service.power_draw).rjust(power_max.length)} W " \
210
+ "#{percent_meter amdgpu_service.power_draw_percent}"
205
211
  end
206
212
 
207
213
  def summary_temp
@@ -22,12 +22,16 @@ module AmdgpuFan
22
22
 
23
23
  class Error < StandardError; end
24
24
 
25
- def initialize(card_num: 0)
26
- @card_num = card_num
25
+ def self.card_numbers
26
+ Dir["#{BASE_FOLDER}/card*"].filter_map { |path| path.split('/').last.slice(/(?<=card)\d+\Z/) }
27
+ end
28
+
29
+ def initialize(card_num: nil)
30
+ @card_num = card_num || self.class.card_numbers.first
27
31
  end
28
32
 
29
33
  def busy_percent
30
- File.read("#{base_card_dir}/gpu_busy_percent").strip
34
+ File.read("#{base_card_dir}/gpu_busy_percent").strip.to_i
31
35
  end
32
36
 
33
37
  def connectors
@@ -12,7 +12,7 @@ module AmdgpuFan
12
12
  end
13
13
 
14
14
  def stats
15
- { min: min, avg: avg, max: max, now: now }
15
+ { min:, avg:, max:, now: }
16
16
  end
17
17
 
18
18
  ##
@@ -2,5 +2,5 @@
2
2
 
3
3
  module AmdgpuFan
4
4
  # Current version of RSpec Core, in semantic versioning format.
5
- VERSION = '0.8.0'
5
+ VERSION = '0.9.0'
6
6
  end
@@ -7,8 +7,8 @@ require_relative 'stat_set'
7
7
  module AmdgpuFan
8
8
  # Keep track of stats over time.
9
9
  class Watcher
10
- attr_reader :core_clock, :fan_speed_rpm, :num_measurements, :memory_clock, :power_draw,
11
- :temperature
10
+ attr_reader :core_clock, :fan_speed_rpm, :busy_percent, :num_measurements, :memory_clock,
11
+ :power_draw, :temperature
12
12
 
13
13
  def initialize(amdgpu_service)
14
14
  @amdgpu_service = amdgpu_service
@@ -17,6 +17,7 @@ module AmdgpuFan
17
17
  @core_clock = StatSet.new 'MHz'
18
18
  @memory_clock = StatSet.new 'MHz'
19
19
  @fan_speed_rpm = StatSet.new 'RPM'
20
+ @busy_percent = StatSet.new '%'
20
21
  @power_draw = StatSet.new 'W'
21
22
  @temperature = StatSet.new '°C'
22
23
  end
@@ -28,7 +29,7 @@ module AmdgpuFan
28
29
  @num_measurements += 1
29
30
 
30
31
  Async do |task|
31
- %i[core_clock fan_speed_rpm memory_clock power_draw temperature].each do |stat|
32
+ %i[busy_percent core_clock fan_speed_rpm memory_clock power_draw temperature].each do |stat|
32
33
  task.async do
33
34
  send(stat).now = amdgpu_service.send(stat)
34
35
  calculate_stats(send(stat))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amdgpu_fan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McCormack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-04 00:00:00.000000000 Z
11
+ date: 2023-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -30,70 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: '1.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.0'
41
- - !ruby/object:Gem::Dependency
42
- name: pry
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.8'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.8'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-rspec
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '2.1'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '2.1'
40
+ version: '1.2'
97
41
  description: A CLI for interacting with the amdgpu Linux driver
98
42
  email: harlemsquirrel@gmail.com
99
43
  executables:
@@ -136,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
80
  - !ruby/object:Gem::Version
137
81
  version: '0'
138
82
  requirements: []
139
- rubygems_version: 3.3.3
83
+ rubygems_version: 3.4.10
140
84
  signing_key:
141
85
  specification_version: 4
142
86
  summary: A CLI to view and set fan speeds for AMD graphics cards running on the open