Source code for insights.parsers.repquota

"""
Repquota - command ``repquota``
===============================

Parser contains in this module is:

RepquotaAGNPUV - command ``repquota -agnpuv``
---------------------------------------------

"""
from insights.core import CommandParser
from insights.core.exceptions import SkipComponent
from insights.core.plugins import parser
from insights.specs import Specs


[docs] @parser(Specs.repquota_agnpuv) class RepquotaAGNPUV(CommandParser): """ `repquota -agnpuv` prints a summary of the disc usage and quotas information for the specified file systems. Typical content looks like:: *** Report for user quotas on device /dev/sdb Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- #0 -- 5120 0 0 0 4 0 0 0 #1009 +- 61440 51200 102400 1679983770 1 0 0 0 #1010 -- 0 51200 102400 0 0 0 0 0 #1011 +- 107520 51200 307200 1680640819 2 0 0 0 #1012 -- 51200 0 0 0 1 0 0 0 #1013 -- 0 51200 102400 0 0 0 0 0 *** Status for user quotas on device /dev/sdb Accounting: ON; Enforcement: ON Inode: #131 (2 blocks, 2 extents) *** Report for group quotas on device /dev/sdb Block grace time: 7days; Inode grace time: 7days Block limits File limits Group used soft hard grace used soft hard grace ---------------------------------------------------------------------- #0 -- 5120 0 0 0 4 0 0 0 #1004 -- 61440 0 0 0 1 0 0 0 #1005 -- 51200 972800 1048576 0 1 0 0 0 #1011 -- 107520 0 0 0 2 0 0 0 *** Status for group quotas on device /dev/sdb Accounting: ON; Enforcement: ON Inode: #132 (2 blocks, 2 extents) Examples: >>> type(repquota) <class 'insights.parsers.repquota.RepquotaAGNPUV'> >>> 'enforcement' in repquota.user_quota['/dev/sdb'] True >>> repquota.group_quota['/dev/sdb']['quota_info'][0] == {'group': '0', 'status': '--', 'block_used': '5120', 'block_soft': '0', 'block_hard': '0', 'block_grace': '0', 'file_used': '4', 'file_soft': '0', 'file_hard': '0', 'file_grace': '0'} True Raises: insights.core.exceptions.SkipComponent: if the output of the ``repquota -agnpuv`` command is empty. """
[docs] def parse_content(self, content): self.user_quota = {} self.group_quota = {} data = device = heading = quota_list = None for line in content: if not line.strip(): continue if line.startswith(('*** Report for', '*** Status for')): device = line.split()[-1] heading = ['group', 'block_used', 'block_soft', 'block_hard', 'block_grace', 'file_used', 'file_soft', 'file_hard', 'file_grace'] data = self.group_quota if ' user ' in line: heading[0] = 'user' data = self.user_quota data[device] = data.get(device, dict(quota_info=[])) quota_list = data.get(device).get('quota_info') elif device and line.startswith('#'): line_sp = line.strip('#').split() info = dict(status=line_sp.pop(1)) info.update(zip(heading, line_sp)) quota_list.append(info) elif device and 'Accounting' in line and 'Enforcement' in line: data[device].update(enforcement='Enforcement: ON' in line, accounting='Accounting: ON' in line) if not self.user_quota and not self.group_quota: raise SkipComponent("Empty result")