mirror of
https://github.com/nicolargo/glances.git
synced 2024-12-23 17:22:46 +03:00
Fill in all of nvidia plugin except actual stats collection.
This commit is contained in:
parent
5a721bf406
commit
74ae507f13
116
glances/plugins/glances_nvidia.py
Normal file
116
glances/plugins/glances_nvidia.py
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# This file is part of Glances.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2015 Kirby Banman <kirby.banman@gmail.com>
|
||||||
|
#
|
||||||
|
# Glances is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Glances is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""NVIDIA plugin."""
|
||||||
|
|
||||||
|
from glances.plugins.glances_plugin import GlancesPlugin
|
||||||
|
|
||||||
|
try:
|
||||||
|
from pynvml import *
|
||||||
|
except ImportError:
|
||||||
|
logger.info("Could not import pynvml. NVIDIA stats will not be collected.")
|
||||||
|
|
||||||
|
class NvidiaPlugin(GlancesPlugin):
|
||||||
|
|
||||||
|
"""Glances NVIDIA plugin.
|
||||||
|
|
||||||
|
stats is a list of dictionaries with one entry per GPU
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, args=None):
|
||||||
|
"""Init the plugin"""
|
||||||
|
super(NvidiaPlugin, self).__init__(args=args)
|
||||||
|
|
||||||
|
try:
|
||||||
|
nvmlInit()
|
||||||
|
self.nvmlReady = true
|
||||||
|
self.deviceHandles = self.getDeviceHandles()
|
||||||
|
self.devicesReady
|
||||||
|
except Exception:
|
||||||
|
logger.info("pynvml could not be initialized.")
|
||||||
|
self.nvmlReady = false
|
||||||
|
|
||||||
|
self.display_curse = false
|
||||||
|
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
if self.input_method == 'local':
|
||||||
|
# Update stats
|
||||||
|
self.stats = self.getStats()
|
||||||
|
|
||||||
|
elif self.input_method == 'snmp':
|
||||||
|
# Update stats using SNMP
|
||||||
|
# Not avalaible
|
||||||
|
pass
|
||||||
|
|
||||||
|
return self.stats
|
||||||
|
|
||||||
|
def get_key(self):
|
||||||
|
"""Return the key of the list."""
|
||||||
|
return 'device_id'
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
"""Reset/init the stats."""
|
||||||
|
self.stats = []
|
||||||
|
|
||||||
|
def getDeviceHandles(self):
|
||||||
|
"""
|
||||||
|
Returns a list of NVML device handles, one per device. Can throw NVMLError.
|
||||||
|
"""
|
||||||
|
return [nvmlDeviceGetHandleByIndex(i) for i in range(0, nvmlDeviceGetCount())]
|
||||||
|
|
||||||
|
@GlancesPlugin._log_result_decorator
|
||||||
|
def update(self):
|
||||||
|
"""Update the GPU stats"""
|
||||||
|
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
if not self.devicesReady:
|
||||||
|
return self.stats
|
||||||
|
|
||||||
|
if self.input_method == 'local':
|
||||||
|
# TODO loop over devices and put the stats in self.stats.
|
||||||
|
# I think each list item needs a key/value pair corresponding to
|
||||||
|
# get_key(). Each device's unique identifier, I'm guessing.
|
||||||
|
# for each device, stats.append {
|
||||||
|
# 'key': name + idx
|
||||||
|
# 'memUsed': ...
|
||||||
|
# 'processorUsed': ...
|
||||||
|
# 'memTotal': ...
|
||||||
|
# '...': ...
|
||||||
|
# }
|
||||||
|
# Only put in what you need. Don't compute derived stats on the view.
|
||||||
|
# Redundancy is fine. If you need mem%, just put it right in here as
|
||||||
|
# an int between 0 and 99.
|
||||||
|
elif self.input_method == 'snmp':
|
||||||
|
# not available
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Update the view
|
||||||
|
self.update_views()
|
||||||
|
|
||||||
|
return self.stats
|
||||||
|
|
||||||
|
def exit(self):
|
||||||
|
super(NvidiaPlugin, self).exit(args=args)
|
||||||
|
if self.nvmlReady:
|
||||||
|
try:
|
||||||
|
nvmlShutdown()
|
||||||
|
except Exception:
|
||||||
|
logger.warn("pynvml failed to shut down correctly.")
|
Loading…
Reference in New Issue
Block a user