Source code for insights.parsers.ceph_cmd_json_parsing

"""
Ceph status commands
====================

This module provides processing for the output of the following ceph related
commands with ``-f json-pretty`` parameter.

CephOsdDump - command ``ceph osd dump -f json-pretty``
------------------------------------------------------

CephOsdDf - command ``ceph osd df -f json-pretty``
--------------------------------------------------

CephS - command ``ceph -s -f json-pretty``
------------------------------------------

CephDfDetail - command ``ceph df detail -f json-pretty``
--------------------------------------------------------

CephHealthDetail - command ``ceph health detail -f json-pretty``
--------------------------------------------------------------------------

CephECProfileGet - command ``ceph osd erasure-code-profile get default -f json-pretty``
---------------------------------------------------------------------------------------

CephCfgInfo - command ``ceph daemon {ceph_socket_files} config show``
---------------------------------------------------------------------

CephOsdTree - command ``ceph osd tree -f json-pretty``
------------------------------------------------------

CephReport - command ``ceph report``
------------------------------------

All these parsers are based on a shared class which processes the JSON
information into a dictionary.
"""
import json

from insights.core import CommandParser, JSONParser, LegacyItemAccess
from insights.core.exceptions import ParseException, SkipException
from insights.core.plugins import parser
from insights.specs import Specs


[docs]@parser(Specs.ceph_osd_dump) class CephOsdDump(CommandParser, JSONParser): """ Class to parse the output of ``ceph osd dump -f json-pretty``. Examples: >>> type(ceph_osd_dump) <class 'insights.parsers.ceph_cmd_json_parsing.CephOsdDump'> >>> ceph_osd_dump['pools'][0]['min_size'] 2 """ pass
[docs]@parser(Specs.ceph_osd_df) class CephOsdDf(CommandParser, JSONParser): """ Class to parse the output of ``ceph osd df -f json-pretty``. Examples: >>> type(ceph_osd_df) <class 'insights.parsers.ceph_cmd_json_parsing.CephOsdDf'> >>> ceph_osd_df['nodes'][0]['pgs'] 945 """ pass
[docs]@parser(Specs.ceph_s) class CephS(CommandParser, JSONParser): """ Class to parse the output of ``ceph -s -f json-pretty``. Examples: >>> type(ceph_s) <class 'insights.parsers.ceph_cmd_json_parsing.CephS'> >>> ceph_s['pgmap']['pgs_by_state'][0]['state_name'] == 'active+clean' True """ pass
[docs]@parser(Specs.ceph_df_detail) class CephDfDetail(CommandParser, JSONParser): """ Class to parse the output of ``ceph df detail -f json-pretty``. Examples: >>> type(ceph_df_detail) <class 'insights.parsers.ceph_cmd_json_parsing.CephDfDetail'> >>> ceph_df_detail['stats']['total_avail_bytes'] 16910123008 """ pass
[docs]@parser(Specs.ceph_health_detail) class CephHealthDetail(CommandParser, JSONParser): """ Class to parse the output of ``ceph health detail -f json-pretty``. Examples: >>> type(ceph_health_detail) <class 'insights.parsers.ceph_cmd_json_parsing.CephHealthDetail'> >>> ceph_health_detail["overall_status"] == 'HEALTH_OK' True """ pass
[docs]@parser(Specs.ceph_osd_ec_profile_get) class CephECProfileGet(CommandParser, JSONParser): """ Class to parse the output of ``ceph osd erasure-code-profile get default -f json-pretty``. Examples: >>> type(ceph_osd_ec_profile_get) <class 'insights.parsers.ceph_cmd_json_parsing.CephECProfileGet'> >>> ceph_osd_ec_profile_get['k'] == '2' True """ pass
[docs]@parser(Specs.ceph_config_show) class CephCfgInfo(CommandParser, JSONParser): """ Class to parse the output of ``ceph daemon .. config show`` Examples: >>> type(ceph_cfg_info) <class 'insights.parsers.ceph_cmd_json_parsing.CephCfgInfo'> >>> ceph_cfg_info.max_open_files == '131072' True """ @property def max_open_files(self): """ str: Return the value of max_open_files """ return self.data["max_open_files"]
[docs]@parser(Specs.ceph_osd_tree) class CephOsdTree(CommandParser, JSONParser): """ Class to parse the output of the command "ceph osd tree -f json-pretty Examples: >>> type(ceph_osd_tree) <class 'insights.parsers.ceph_cmd_json_parsing.CephOsdTree'> >>> ceph_osd_tree['nodes'][0]['children'] [-5, -4, -3, -2] """ pass
[docs]@parser(Specs.ceph_report) class CephReport(CommandParser, LegacyItemAccess): """ Class to parse the output of the command ``ceph report``. Examples: >>> type(ceph_report_content) <class 'insights.parsers.ceph_cmd_json_parsing.CephReport'> >>> ceph_report_content["version"] == '12.2.8-52.el7cp' True """
[docs] def parse_content(self, content): if not content: raise SkipException("Empty output.") if not content[0].startswith('report ') or len(content) < 10: raise ParseException("Invalid Content: ", content[0]) try: self.data = json.loads(''.join(content[1:])) except: raise ParseException("Could not parse json.", content[1:])