Class: AmdgpuFanCli

Inherits:
Thor
  • Object
show all
Defined in:
lib/amdgpu_fan_cli.rb

Overview

The main class

Instance Method Summary collapse

Instance Method Details

#autoObject



8
9
10
11
# File 'lib/amdgpu_fan_cli.rb', line 8

def auto
  amdgpu_service.set_fan_mode! :auto
  puts fan_status
end

#connectorsObject



14
15
16
17
18
# File 'lib/amdgpu_fan_cli.rb', line 14

def connectors
  amdgpu_service.connectors_status.each do |connector,status|
    puts "#{connector}: #{status}"
  end
end

#set(percentage) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/amdgpu_fan_cli.rb', line 21

def set(percentage)
  return puts "Invalid percentage" unless (0..100).cover?(percentage.to_i)

  amdgpu_service.set_fan_manual_speed! percent: percentage
  puts fan_status
rescue AmdgpuService::Error
  puts 'Invalid fan speed provided. The percentage should be between 1 and 100'
  exit 1
end

#statusObject



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/amdgpu_fan_cli.rb', line 32

def status
  puts ,
       "📺\tGPU:   #{amdgpu_service.name}",
       "📄\tvBIOS: #{amdgpu_service.vbios_version}",
       clock_status,
       fan_status,
       "🌡\tTemp:  #{amdgpu_service.temperature}°C",
       "⚡\tPower: #{amdgpu_service.power_dpm_state} mode using " \
        "#{amdgpu_service.power_draw} / #{amdgpu_service.power_max} Watts",
       "⚖\tLoad: #{percent_meter amdgpu_service.busy_percent, 20}"
end

#watch(seconds = 1) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/amdgpu_fan_cli.rb', line 46

def watch(seconds=1)
  return puts "Seconds must be from 1 to 600" unless (1..600).cover?(seconds.to_i)

  puts "Watching #{amdgpu_service.name} every #{seconds} second(s)...",
       '  <Press Ctrl-C to exit>'

  trap "SIGINT" do
    puts "\nAnd now the watch is ended."
    exit 0
  end

  loop do
    puts "#{Time.now.strftime("%F %T")} - " \
         "Clock: #{amdgpu_service.core_clock} Core, #{amdgpu_service.memory_clock} Memory,\t" \
         "Fan: #{amdgpu_service.fan_speed_rpm} rpm #{percent_meter amdgpu_service.fan_speed_percent},\t" \
         "Load: #{percent_meter amdgpu_service.busy_percent},\t" \
         "Power: #{amdgpu_service.power_draw} W,\t" \
         "Temp: #{amdgpu_service.temperature}°C "
    sleep seconds.to_i
  end
end

#watch_csv(seconds = 1) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/amdgpu_fan_cli.rb', line 70

def watch_csv(seconds=1)
  return puts "Seconds must be from 1 to 600" unless (1..600).cover?(seconds.to_i)

  puts 'Timestamp, Core Clock (Mhz),Memory Clock (Mhz),Fan speed (rpm), '\
       'Load (%),Power (Watts),Temp (°C)'

  trap "SIGINT" do
    exit 0
  end

  loop do
    puts [Time.now.strftime("%F %T"),
          amdgpu_service.core_clock,
          amdgpu_service.memory_clock,
          amdgpu_service.fan_speed_rpm,
          amdgpu_service.busy_percent,
          amdgpu_service.power_draw,
          amdgpu_service.temperature].join(',')
    sleep seconds.to_i
  end
end