amdgpu_fan 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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