implement usage and fan speed monitoring (#728)

This commit is contained in:
chestm007 2019-04-12 22:12:14 +10:00 committed by GitHub
parent 25fba049d0
commit d3317c0664
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 333 additions and 12 deletions

11
.idea/i3pystatus.iml generated Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.7" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

4
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/i3pystatus.iml" filepath="$PROJECT_DIR$/.idea/i3pystatus.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

268
.idea/workspace.xml generated Normal file
View File

@ -0,0 +1,268 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="848840fa-bdfb-4c27-8cdc-2934df369f91" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/i3pystatus/calendar/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/i3pystatus/calendar/__init__.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/i3pystatus/calendar/google.py" beforeDir="false" afterPath="$PROJECT_DIR$/i3pystatus/calendar/google.py" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/i3pystatus/battery.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="5115">
<caret line="341" column="9" selection-start-line="341" selection-start-column="9" selection-end-line="341" selection-end-column="9" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/i3pystatus/core/util.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="7575">
<caret line="513" column="12" selection-start-line="513" selection-start-column="12" selection-end-line="513" selection-end-column="12" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/i3pystatus/spaceapi.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="35" column="10" selection-start-line="35" selection-start-column="10" selection-end-line="35" selection-end-column="10" />
<folding>
<element signature="e#0#11#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/i3pystatus/calendar/google.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="550">
<caret line="113" column="57" selection-start-line="113" selection-start-column="57" selection-end-line="113" selection-end-column="57" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/i3pystatus/calendar/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1815">
<caret line="205" column="32" selection-start-line="205" selection-start-column="32" selection-end-line="205" selection-end-column="32" />
<folding>
<element signature="e#0#14#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/ci-build.sh">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="375">
<caret line="25" selection-start-line="25" selection-end-line="25" />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/i3pystatus/battery.py" />
<option value="$PROJECT_DIR$/i3pystatus/core/util.py" />
<option value="$PROJECT_DIR$/i3pystatus/spaceapi.py" />
<option value="$PROJECT_DIR$/i3pystatus/calendar/google.py" />
<option value="$PROJECT_DIR$/i3pystatus/calendar/__init__.py" />
</list>
</option>
</component>
<component name="ProjectConfigurationFiles">
<option name="files">
<list>
<option value="$PROJECT_DIR$/.idea/i3pystatus.iml" />
<option value="$PROJECT_DIR$/.idea/misc.xml" />
<option value="$PROJECT_DIR$/.idea/modules.xml" />
<option value="$PROJECT_DIR$/.idea/vcs.xml" />
<option value="$PROJECT_DIR$/.idea/i3pystatus.iml" />
<option value="$PROJECT_DIR$/.idea/misc.xml" />
<option value="$PROJECT_DIR$/.idea/modules.xml" />
<option value="$PROJECT_DIR$/.idea/vcs.xml" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="3214" />
<option name="y" value="970" />
<option name="width" value="1572" />
<option name="height" value="1153" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="i3pystatus" type="b2602c69:ProjectViewProjectNode" />
<item name="i3pystatus" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="i3pystatus" type="b2602c69:ProjectViewProjectNode" />
<item name="i3pystatus" type="462c0819:PsiDirectoryNode" />
<item name="ci-build" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="i3pystatus" type="b2602c69:ProjectViewProjectNode" />
<item name="i3pystatus" type="462c0819:PsiDirectoryNode" />
<item name="i3pystatus" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="i3pystatus" type="b2602c69:ProjectViewProjectNode" />
<item name="i3pystatus" type="462c0819:PsiDirectoryNode" />
<item name="i3pystatus" type="462c0819:PsiDirectoryNode" />
<item name="calendar" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="i3pystatus" type="b2602c69:ProjectViewProjectNode" />
<item name="i3pystatus" type="462c0819:PsiDirectoryNode" />
<item name="tests" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="848840fa-bdfb-4c27-8cdc-2934df369f91" name="Default Changelist" comment="" />
<created>1552567658841</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1552567658841</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="3214" y="970" width="1572" height="1153" extended-state="6" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24951519" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Project Explorer" order="2" />
<window_info id="Job Explorer" order="3" />
<window_info id="Favorites" order="4" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Console" order="7" />
<window_info anchor="bottom" id="Terminal" order="8" />
<window_info anchor="bottom" id="Python Console" order="9" />
<window_info anchor="bottom" id="Version Control" order="10" />
<window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
</layout>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/i3pystatus/battery.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="5115">
<caret line="341" column="9" selection-start-line="341" selection-start-column="9" selection-end-line="341" selection-end-column="9" />
<folding>
<element signature="e#0#13#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/i3pystatus/core/util.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="7575">
<caret line="513" column="12" selection-start-line="513" selection-start-column="12" selection-end-line="513" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ci-build.sh">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="375">
<caret line="25" selection-start-line="25" selection-end-line="25" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/i3pystatus/spaceapi.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="35" column="10" selection-start-line="35" selection-start-column="10" selection-end-line="35" selection-end-column="10" />
<folding>
<element signature="e#0#11#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/i3pystatus/calendar/google.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="550">
<caret line="113" column="57" selection-start-line="113" selection-start-column="57" selection-end-line="113" selection-end-column="57" />
<folding>
<element signature="e#0#15#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/i3pystatus/calendar/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1815">
<caret line="205" column="32" selection-start-line="205" selection-start-column="32" selection-end-line="205" selection-end-column="32" />
<folding>
<element signature="e#0#14#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
</project>

View File

@ -10,8 +10,10 @@ class Amdgpu(IntervalModule):
.. rubric :: Available formatters
* `{temp}`
* `{sclk}` - Gpu clock speed
* `{mclk}` - Memory clock speed
* `{sclk}` - Gpu clock speed
* `{mclk}` - Memory clock speed
* `{fan_speed}` - Fan speed
* `{gpu_usage}` - Gpu Usage percent
"""
settings = (
@ -23,19 +25,33 @@ class Amdgpu(IntervalModule):
format = '{temp} {mclk} {sclk}'
def init(self):
self.info_gatherers = []
self.dev_path = '/sys/class/drm/card{}/device/'.format(self.card)
self.detect_hwmon()
if 'sclk' in self.format:
self.info_gatherers.append(self.get_sclk)
if 'mclk' in self.format:
self.info_gatherers.append(self.get_mclk)
if 'temp' in self.format:
self.info_gatherers.append(self.get_temp)
if 'fan_speed' in self.format:
self.info_gatherers.append(self.get_fan_speed)
if 'gpu_usage' in self.format:
self.info_gatherers.append(self.get_gpu_usage)
def detect_hwmon(self):
hwmon_base = self.dev_path + 'hwmon/'
self.hwmmon_path = hwmon_base + os.listdir(hwmon_base)[0] + '/'
self.hwmon_path = hwmon_base + os.listdir(hwmon_base)[0] + '/'
def run(self):
self.data = dict(
sclk=self.get_sclk(),
mclk=self.get_mclk(),
temp=self.get_temp()
)
self.data = dict()
for gatherer in self.info_gatherers:
gatherer()
self.output = {
'full_text': self.format.format(**self.data)
@ -49,12 +65,20 @@ class Amdgpu(IntervalModule):
def get_mclk(self):
with open(self.dev_path + 'pp_dpm_mclk') as f:
return self.parse_clk_reading(f.read())
self.data['mclk'] = self.parse_clk_reading(f.read())
def get_sclk(self):
with open(self.dev_path + 'pp_dpm_sclk') as f:
return self.parse_clk_reading(f.read())
self.data['sclk'] = self.parse_clk_reading(f.read())
def get_temp(self):
with open(self.hwmmon_path + 'temp1_input') as f:
return float(f.read()) / 1000
with open(self.hwmon_path + 'temp1_input') as f:
self.data['temp'] = float(f.read()) / 1000
def get_fan_speed(self):
with open(self.hwmon_path + 'fan1_input') as f:
self.data['fan_speed'] = f.read().strip()
def get_gpu_usage(self):
with open(self.dev_path + 'gpu_busy_percent') as f:
self.data['gpu_usage'] = f.read().strip()