Source code for insights.parsers.snmp

"""
TcpIpStats - file ``/proc/net/snmp``
====================================
The ``TcpIpStats`` class implements the parsing of ``/proc/net/snmp``
file, which contains TCP/IP stats of individual layer.

TcpIpStatsIPV6 - file ``/proc/net/snmp6``
-----------------------------------------
The ``TcpIpStatsIPV6`` class implements the parsing of ``/proc/net/snmp6``
file, which contains TCP/IP stats of individual layer.

"""

from .. import Parser, parser, LegacyItemAccess
from insights.specs import Specs


[docs] @parser(Specs.proc_snmp_ipv4) class TcpIpStats(Parser, LegacyItemAccess): """ Parser for ``/proc/net/snmp`` file. Sample input is provided in the *Examples*. Examples: >>> SNMP_CONTENT = ''' ... Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates ... Ip: 2 64 43767 0 0 0 0 0 41807 18407 12 73 0 0 0 10 0 0 0 ... Icmp: InMsgs InErrors InCsumErrors InDestUnreachs InTimeExcds InParmProbs InSrcQuenchs InRedirects InEchos InEchoReps InTimestamps InTimestampReps InAddrMasks InAddrMaskReps OutMsgs OutErrors OutDestUnreachs OutTimeExcds OutParmProbs OutSrcQuenchs OutRedirects OutEchos OutEchoReps OutTimestamps OutTimestampReps OutAddrMasks OutAddrMaskReps ... Icmp: 34 0 0 34 0 0 0 0 0 0 0 0 0 0 44 0 44 0 0 0 0 0 0 0 0 0 0 ... IcmpMsg: InType3 OutType3 ... IcmpMsg: 34 44 ... Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts InCsumErrors ... Tcp: 1 200 120000 -1 444 0 0 6 7 19269 17050 5 4 234 0 ... Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors IgnoredMulti ... Udp: 18905 34 0 1348 0 0 0 3565 ... UdpLite: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors IgnoredMulti ... UdpLite: 0 0 0 0 0 0 0 0 ... '''.strip() >>> from insights.tests import context_wrap >>> shared = {TcpIpStats: TcpIpStats(context_wrap(SNMP_CONTENT))} >>> stats = shared[TcpIpStats] >>> snmp_stats = stats.get("Ip") >>> print snmp_stats["DefaultTTL"] 64 >>> snmp_stats = stats.get("Udp") >>> print snmp_stats["InDatagrams"] 18905 Resultant Data:: { 'Ip': { 'FragCreates': 0, 'ReasmFails': 10, 'Forwarding': 2, 'ReasmOKs': 0, 'ReasmReqds': 0, 'ReasmTimeout': 0, ... ... }, 'Icmp': { 'InRedirects': 0, 'InMsgs': 34, 'InSrcQuenchs': 0, ... ... } ... ... } """
[docs] def parse_content(self, content): snmp_stats = {} data_id = [] for line in content: line_split = line.split() if line_split[1].isdigit(): snmp_stats[line_split[0].replace(":", "")] = dict(zip(data_id, map(int, line_split[1:]))) else: data_id = line_split[1:] self.data = snmp_stats
[docs] @parser(Specs.proc_snmp_ipv6) class TcpIpStatsIPV6(Parser, LegacyItemAccess): """ Parser for ``/proc/net/snmp6`` file. Sample input is provided in the *Examples*. Examples: >>> SNMP_CONTENT = ''' ... Ip6InReceives 757 ... Ip6InHdrErrors 0 ... Ip6InTooBigErrors 0 ... Ip6InNoRoutes 0 ... Ip6InAddrErrors 0 ... Ip6InDiscards 10 ... Ip6OutForwDatagrams 0 ... Ip6OutDiscards 0 ... Ip6OutNoRoutes 0 ... Ip6InOctets 579410 ... Icmp6OutErrors 0 ... Icmp6InCsumErrors 0 ...'''.strip() >>> from insights.tests import context_wrap >>> shared = {TcpIpStatsIPV6: TcpIpStatsIPV6(context_wrap(SNMP_CONTENT))} >>> stats = shared[TcpIpStatsIPV6] >>> IP6_RX_stats = stats.get("Ip6InReceives") >>> print IP6_RX_stats 757 >>> IP6_In_Disc = stats.get("Ip6InDiscards") >>> print IP6_In_Disc 10 Resultant Data:: { 'Ip6InReceives': 757, 'Ip6InHdrErrors': 0, 'Ip6InTooBigErrors': 0, 'Ip6InNoRoutes': 0, 'Ip6InAddrErrors': 0, 'Ip6InDiscards': 10, ... ... } """
[docs] def parse_content(self, content): snmp6_stats = {} for line in content: line_split = line.split() snmp6_stats[line_split[0]] = int(line_split[1]) if len(line_split) > 1 and line_split[1] else None self.data = snmp6_stats