130 lines
4.0 KiB
Python
130 lines
4.0 KiB
Python
# -*- coding:utf-8 -*-
|
|
#############################################################################
|
|
# Copyright (c) 2020 Huawei Technologies Co.,Ltd.
|
|
#
|
|
# openGauss is licensed under Mulan PSL v2.
|
|
# You can use this software according to the terms
|
|
# and conditions of the Mulan PSL v2.
|
|
# You may obtain a copy of Mulan PSL v2 at:
|
|
#
|
|
# http://license.coscl.org.cn/MulanPSL2
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OF ANY KIND,
|
|
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
# See the Mulan PSL v2 for more details.
|
|
# ----------------------------------------------------------------------------
|
|
# Description : memory.py is a utility to do something for memory information.
|
|
#############################################################################
|
|
try:
|
|
import sys
|
|
import psutil
|
|
sys.path.append(sys.path[0] + "/../../")
|
|
from base_utils.os.cmd_util import CmdUtil
|
|
from gspylib.common.ErrorCode import ErrorCode
|
|
except ImportError as e:
|
|
sys.exit("[GAUSS-52200] : Unable to import module: %s." % str(e))
|
|
|
|
|
|
class MemoryUtil(object):
|
|
"""
|
|
function: Init the MemInfo options
|
|
"""
|
|
|
|
MEM_INFO_FILE = '/proc/meminfo'
|
|
|
|
@staticmethod
|
|
def getMemTotalSize():
|
|
"""
|
|
function : Get system virtual memory total size
|
|
input : null
|
|
output : total virtual memory(byte)
|
|
"""
|
|
try:
|
|
return psutil.virtual_memory().total
|
|
except Exception as excep:
|
|
raise Exception(ErrorCode.GAUSS_505["GAUSS_50502"] %
|
|
"system memory usage" + "Error: %s" % str(excep))
|
|
|
|
@staticmethod
|
|
def getMemAvailableSize():
|
|
"""
|
|
function : Get system virtual memory available size
|
|
input : null
|
|
output : available virtual memory(byte)
|
|
"""
|
|
try:
|
|
return psutil.virtual_memory().available
|
|
except Exception as excep:
|
|
raise Exception(ErrorCode.GAUSS_505["GAUSS_50502"] %
|
|
"system memory usage" + "Error: %s" % str(excep))
|
|
|
|
@staticmethod
|
|
def getMemUsage():
|
|
"""
|
|
function : Get system virtual memory usage
|
|
input : null
|
|
output : memory usage
|
|
"""
|
|
try:
|
|
return psutil.virtual_memory().percent
|
|
except Exception as excep:
|
|
raise Exception(ErrorCode.GAUSS_505["GAUSS_50502"] %
|
|
"system memory usage" + "Error: %s" % str(excep))
|
|
|
|
@staticmethod
|
|
def selectMemInfo(attr=None):
|
|
"""
|
|
|
|
:param attr:
|
|
:return:
|
|
"""
|
|
if attr is None:
|
|
output = CmdUtil.execCmd(f'{CmdUtil.getCatCmd()} {MemoryUtil.MEM_INFO_FILE}')
|
|
res = {}
|
|
for line in output.split('\n'):
|
|
kv = line.split(':')
|
|
res[kv[0].strip()] = kv[1].strip()
|
|
return res
|
|
|
|
cmd = "%s %s | %s '%s' | %s '{print $2}'" % (
|
|
CmdUtil.getCatCmd(),
|
|
MemoryUtil.MEM_INFO_FILE,
|
|
CmdUtil.getGrepCmd(),
|
|
attr,
|
|
CmdUtil.getAwkCmd()
|
|
)
|
|
output = CmdUtil.execCmd(cmd)
|
|
return output
|
|
|
|
@staticmethod
|
|
def getPhysicalMemTotalSize():
|
|
"""
|
|
function : Get system physical memory total size
|
|
input : null
|
|
output : total physical memory(byte)
|
|
"""
|
|
cmd = "%s | %s Mem | %s '{print $2}'" % (
|
|
CmdUtil.findCmdInPath('free'),
|
|
CmdUtil.getGrepCmd(),
|
|
CmdUtil.getAwkCmd()
|
|
)
|
|
output = CmdUtil.execCmd(cmd)
|
|
return int(output)
|
|
|
|
@staticmethod
|
|
def getPhysicalMemUsedSize():
|
|
"""
|
|
function : Get system physical memory total size
|
|
input : null
|
|
output : total physical memory(byte)
|
|
"""
|
|
cmd = "%s | %s Mem | %s '{print $3}'" % (
|
|
CmdUtil.findCmdInPath('free'),
|
|
CmdUtil.getGrepCmd(),
|
|
CmdUtil.getAwkCmd()
|
|
)
|
|
output = CmdUtil.execCmd(cmd)
|
|
return int(output)
|