logstash-integration-snmp 4.0.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +23 -0
- data/CONTRIBUTORS +20 -0
- data/Gemfile +11 -0
- data/LICENSE +202 -0
- data/README.md +89 -0
- data/VERSION +1 -0
- data/docs/index.asciidoc +202 -0
- data/docs/input-snmp.asciidoc +524 -0
- data/docs/input-snmptrap.asciidoc +392 -0
- data/lib/logstash/inputs/snmp.rb +369 -0
- data/lib/logstash/inputs/snmptrap.rb +190 -0
- data/lib/logstash/plugin_mixins/snmp/common.rb +197 -0
- data/lib/logstash-integration-snmp_jars.rb +6 -0
- data/lib/mibs/ietf/ACCOUNTING-CONTROL-MIB.dic +1316 -0
- data/lib/mibs/ietf/ADSL-LINE-EXT-MIB.dic +1724 -0
- data/lib/mibs/ietf/ADSL-LINE-MIB.dic +7297 -0
- data/lib/mibs/ietf/ADSL-TC-MIB.dic +160 -0
- data/lib/mibs/ietf/ADSL2-LINE-MIB.dic +8663 -0
- data/lib/mibs/ietf/ADSL2-LINE-TC-MIB.dic +1462 -0
- data/lib/mibs/ietf/AGENTX-MIB.dic +817 -0
- data/lib/mibs/ietf/AGGREGATE-MIB.dic +708 -0
- data/lib/mibs/ietf/ALARM-MIB.dic +1734 -0
- data/lib/mibs/ietf/APM-MIB.dic +2870 -0
- data/lib/mibs/ietf/APPC-MIB.dic +8687 -0
- data/lib/mibs/ietf/APPLETALK-MIB.dic +4399 -0
- data/lib/mibs/ietf/APPLICATION-MIB.dic +3750 -0
- data/lib/mibs/ietf/APPN-DLUR-MIB.dic +972 -0
- data/lib/mibs/ietf/APPN-MIB.dic +9364 -0
- data/lib/mibs/ietf/APPN-TRAP-MIB.dic +664 -0
- data/lib/mibs/ietf/APS-MIB.dic +2430 -0
- data/lib/mibs/ietf/ARC-MIB.dic +552 -0
- data/lib/mibs/ietf/ATM-ACCOUNTING-INFORMATION-MIB.dic +816 -0
- data/lib/mibs/ietf/ATM-MIB.dic +4104 -0
- data/lib/mibs/ietf/ATM-TC-MIB.dic +914 -0
- data/lib/mibs/ietf/ATM2-MIB.dic +4715 -0
- data/lib/mibs/ietf/BFD-STD-MIB.dic +2367 -0
- data/lib/mibs/ietf/BFD-TC-STD-MIB.dic +202 -0
- data/lib/mibs/ietf/BGP4-MIB.dic +1931 -0
- data/lib/mibs/ietf/BLDG-HVAC-MIB.dic +812 -0
- data/lib/mibs/ietf/BRIDGE-MIB.dic +2257 -0
- data/lib/mibs/ietf/CAPWAP-BASE-MIB.dic +4128 -0
- data/lib/mibs/ietf/CAPWAP-DOT11-MIB.dic +482 -0
- data/lib/mibs/ietf/CHARACTER-MIB.dic +1140 -0
- data/lib/mibs/ietf/CIRCUIT-IF-MIB.dic +493 -0
- data/lib/mibs/ietf/CLNS-MIB.dic +1702 -0
- data/lib/mibs/ietf/COFFEE-POT-MIB.dic +282 -0
- data/lib/mibs/ietf/COPS-CLIENT-MIB.dic +1270 -0
- data/lib/mibs/ietf/DECNET-PHIV-MIB.dic +5837 -0
- data/lib/mibs/ietf/DIAL-CONTROL-MIB.dic +2139 -0
- data/lib/mibs/ietf/DIFFSERV-CONFIG-MIB.dic +378 -0
- data/lib/mibs/ietf/DIFFSERV-MIB.dic +5073 -0
- data/lib/mibs/ietf/DIRECTORY-SERVER-MIB.dic +1041 -0
- data/lib/mibs/ietf/DISMAN-EVENT-MIB.dic +3151 -0
- data/lib/mibs/ietf/DISMAN-EXPRESSION-MIB.dic +1716 -0
- data/lib/mibs/ietf/DISMAN-NSLOOKUP-MIB.dic +698 -0
- data/lib/mibs/ietf/DISMAN-PING-MIB.dic +2635 -0
- data/lib/mibs/ietf/DISMAN-SCHEDULE-MIB.dic +1744 -0
- data/lib/mibs/ietf/DISMAN-SCRIPT-MIB.dic +2820 -0
- data/lib/mibs/ietf/DISMAN-TRACEROUTE-MIB.dic +3239 -0
- data/lib/mibs/ietf/DLSW-MIB.dic +5635 -0
- data/lib/mibs/ietf/DNS-RESOLVER-MIB.dic +1765 -0
- data/lib/mibs/ietf/DNS-SERVER-MIB.dic +1593 -0
- data/lib/mibs/ietf/DOCS-BPI-MIB.dic +2634 -0
- data/lib/mibs/ietf/DOCS-CABLE-DEVICE-MIB.dic +5042 -0
- data/lib/mibs/ietf/DOCS-IETF-BPI2-MIB.dic +5478 -0
- data/lib/mibs/ietf/DOCS-IETF-CABLE-DEVICE-NOTIFICATION-MIB.dic +2447 -0
- data/lib/mibs/ietf/DOCS-IETF-QOS-MIB.dic +4886 -0
- data/lib/mibs/ietf/DOCS-IETF-SUBMGT-MIB.dic +1331 -0
- data/lib/mibs/ietf/DOCS-IF-MIB.dic +7980 -0
- data/lib/mibs/ietf/DOT12-IF-MIB.dic +1066 -0
- data/lib/mibs/ietf/DOT12-RPTR-MIB.dic +2669 -0
- data/lib/mibs/ietf/DOT3-EPON-MIB.dic +3297 -0
- data/lib/mibs/ietf/DOT3-OAM-MIB.dic +2830 -0
- data/lib/mibs/ietf/DS0-MIB.dic +466 -0
- data/lib/mibs/ietf/DS0BUNDLE-MIB.dic +468 -0
- data/lib/mibs/ietf/DS1-MIB.dic +4890 -0
- data/lib/mibs/ietf/DS3-MIB.dic +2719 -0
- data/lib/mibs/ietf/DSA-MIB.dic +888 -0
- data/lib/mibs/ietf/DSMON-MIB.dic +6177 -0
- data/lib/mibs/ietf/DVB-RCS-MIB.dic +5764 -0
- data/lib/mibs/ietf/EBN-MIB.dic +1026 -0
- data/lib/mibs/ietf/EFM-CU-MIB.dic +4335 -0
- data/lib/mibs/ietf/ENTITY-MIB.dic +2235 -0
- data/lib/mibs/ietf/ENTITY-SENSOR-MIB.dic +653 -0
- data/lib/mibs/ietf/ENTITY-STATE-MIB.dic +457 -0
- data/lib/mibs/ietf/ENTITY-STATE-TC-MIB.dic +260 -0
- data/lib/mibs/ietf/ETHER-CHIPSET-MIB.dic +787 -0
- data/lib/mibs/ietf/EtherLike-MIB.dic +2548 -0
- data/lib/mibs/ietf/FC-MGMT-MIB.dic +3465 -0
- data/lib/mibs/ietf/FCIP-MGMT-MIB.dic +1596 -0
- data/lib/mibs/ietf/FDDI-SMT73-MIB.dic +3378 -0
- data/lib/mibs/ietf/FIBRE-CHANNEL-FE-MIB.dic +2504 -0
- data/lib/mibs/ietf/FLOAT-TC-MIB.dic +128 -0
- data/lib/mibs/ietf/FLOW-METER-MIB.dic +3201 -0
- data/lib/mibs/ietf/FORCES-MIB.dic +598 -0
- data/lib/mibs/ietf/FR-ATM-PVC-SERVICE-IWF-MIB.dic +1601 -0
- data/lib/mibs/ietf/FR-MFR-MIB.dic +1351 -0
- data/lib/mibs/ietf/FRAME-RELAY-DTE-MIB.dic +1688 -0
- data/lib/mibs/ietf/FRNETSERV-MIB.dic +3940 -0
- data/lib/mibs/ietf/FRSLD-MIB.dic +2580 -0
- data/lib/mibs/ietf/Finisher-MIB.dic +1416 -0
- data/lib/mibs/ietf/GMPLS-LABEL-STD-MIB.dic +965 -0
- data/lib/mibs/ietf/GMPLS-LSR-STD-MIB.dic +693 -0
- data/lib/mibs/ietf/GMPLS-TC-STD-MIB.dic +180 -0
- data/lib/mibs/ietf/GMPLS-TE-STD-MIB.dic +2542 -0
- data/lib/mibs/ietf/GSMP-MIB.dic +2468 -0
- data/lib/mibs/ietf/HC-ALARM-MIB.dic +1050 -0
- data/lib/mibs/ietf/HC-PerfHist-TC-MIB.dic +310 -0
- data/lib/mibs/ietf/HC-RMON-MIB.dic +4456 -0
- data/lib/mibs/ietf/HDSL2-SHDSL-LINE-MIB.dic +3955 -0
- data/lib/mibs/ietf/HOST-RESOURCES-MIB.dic +2453 -0
- data/lib/mibs/ietf/HPR-IP-MIB.dic +640 -0
- data/lib/mibs/ietf/HPR-MIB.dic +1959 -0
- data/lib/mibs/ietf/IANA-ITU-ALARM-TC-MIB.dic +936 -0
- data/lib/mibs/ietf/IF-CAP-STACK-MIB.dic +356 -0
- data/lib/mibs/ietf/IF-INVERTED-STACK-MIB.dic +220 -0
- data/lib/mibs/ietf/IF-MIB.dic +2753 -0
- data/lib/mibs/ietf/IFCP-MGMT-MIB.dic +1717 -0
- data/lib/mibs/ietf/IGMP-STD-MIB.dic +809 -0
- data/lib/mibs/ietf/INET-ADDRESS-MIB.dic +570 -0
- data/lib/mibs/ietf/INTEGRATED-SERVICES-GUARANTEED-MIB.dic +319 -0
- data/lib/mibs/ietf/INTEGRATED-SERVICES-MIB.dic +1196 -0
- data/lib/mibs/ietf/INTERFACETOPN-MIB.dic +1705 -0
- data/lib/mibs/ietf/IP-FORWARD-MIB.dic +1853 -0
- data/lib/mibs/ietf/IP-MIB.dic +7064 -0
- data/lib/mibs/ietf/IPATM-IPMC-MIB.dic +4830 -0
- data/lib/mibs/ietf/IPFIX-MIB.dic +2334 -0
- data/lib/mibs/ietf/IPFIX-SELECTOR-MIB.dic +215 -0
- data/lib/mibs/ietf/IPMCAST-MIB.dic +3390 -0
- data/lib/mibs/ietf/IPMROUTE-STD-MIB.dic +1246 -0
- data/lib/mibs/ietf/IPOA-MIB.dic +2372 -0
- data/lib/mibs/ietf/IPS-AUTH-MIB.dic +1609 -0
- data/lib/mibs/ietf/IPSEC-SPD-MIB.dic +3989 -0
- data/lib/mibs/ietf/IPV6-FLOW-LABEL-MIB.dic +110 -0
- data/lib/mibs/ietf/IPV6-ICMP-MIB.dic +748 -0
- data/lib/mibs/ietf/IPV6-MIB.dic +2028 -0
- data/lib/mibs/ietf/IPV6-MLD-MIB.dic +659 -0
- data/lib/mibs/ietf/IPV6-TCP-MIB.dic +332 -0
- data/lib/mibs/ietf/IPV6-UDP-MIB.dic +209 -0
- data/lib/mibs/ietf/ISCSI-MIB.dic +4613 -0
- data/lib/mibs/ietf/ISDN-MIB.dic +1796 -0
- data/lib/mibs/ietf/ISIS-MIB.dic +6215 -0
- data/lib/mibs/ietf/ISNS-MIB.dic +6578 -0
- data/lib/mibs/ietf/ITU-ALARM-MIB.dic +665 -0
- data/lib/mibs/ietf/ITU-ALARM-TC-MIB.dic +137 -0
- data/lib/mibs/ietf/Job-Monitoring-MIB.dic +2519 -0
- data/lib/mibs/ietf/L2TP-MIB.dic +4050 -0
- data/lib/mibs/ietf/LANGTAG-TC-MIB.dic +104 -0
- data/lib/mibs/ietf/LISP-MIB.dic +4067 -0
- data/lib/mibs/ietf/LMP-MIB.dic +5166 -0
- data/lib/mibs/ietf/MALLOC-MIB.dic +2156 -0
- data/lib/mibs/ietf/MAU-MIB.dic +2619 -0
- data/lib/mibs/ietf/MIDCOM-MIB.dic +2856 -0
- data/lib/mibs/ietf/MIOX25-MIB.dic +828 -0
- data/lib/mibs/ietf/MIP-MIB.dic +3473 -0
- data/lib/mibs/ietf/MOBILEIPV6-MIB.dic +5228 -0
- data/lib/mibs/ietf/MPLS-FTN-STD-MIB.dic +1594 -0
- data/lib/mibs/ietf/MPLS-L3VPN-STD-MIB.dic +2548 -0
- data/lib/mibs/ietf/MPLS-LC-ATM-STD-MIB.dic +491 -0
- data/lib/mibs/ietf/MPLS-LC-FR-STD-MIB.dic +395 -0
- data/lib/mibs/ietf/MPLS-LDP-ATM-STD-MIB.dic +1019 -0
- data/lib/mibs/ietf/MPLS-LDP-FRAME-RELAY-STD-MIB.dic +862 -0
- data/lib/mibs/ietf/MPLS-LDP-GENERIC-STD-MIB.dic +445 -0
- data/lib/mibs/ietf/MPLS-LDP-STD-MIB.dic +3657 -0
- data/lib/mibs/ietf/MPLS-LSR-STD-MIB.dic +3103 -0
- data/lib/mibs/ietf/MPLS-TC-STD-MIB.dic +911 -0
- data/lib/mibs/ietf/MPLS-TE-STD-MIB.dic +3673 -0
- data/lib/mibs/ietf/MSDP-MIB.dic +1893 -0
- data/lib/mibs/ietf/MTA-MIB.dic +1898 -0
- data/lib/mibs/ietf/Modem-MIB.dic +2054 -0
- data/lib/mibs/ietf/NAT-MIB.dic +3866 -0
- data/lib/mibs/ietf/NETWORK-SERVICES-MIB.dic +1034 -0
- data/lib/mibs/ietf/NHDP-MIB.dic +3005 -0
- data/lib/mibs/ietf/NHRP-MIB.dic +3660 -0
- data/lib/mibs/ietf/NOTIFICATION-LOG-MIB.dic +1156 -0
- data/lib/mibs/ietf/NTPv4-MIB.dic +1535 -0
- data/lib/mibs/ietf/OPT-IF-MIB.dic +8972 -0
- data/lib/mibs/ietf/OSPF-MIB.dic +5963 -0
- data/lib/mibs/ietf/OSPF-TRAP-MIB.dic +1190 -0
- data/lib/mibs/ietf/OSPFV3-MIB.dic +5708 -0
- data/lib/mibs/ietf/P-BRIDGE-MIB.dic +1499 -0
- data/lib/mibs/ietf/PARALLEL-MIB.dic +476 -0
- data/lib/mibs/ietf/PIM-MIB.dic +1393 -0
- data/lib/mibs/ietf/PIM-STD-MIB.dic +6819 -0
- data/lib/mibs/ietf/PINT-MIB.dic +830 -0
- data/lib/mibs/ietf/PKTC-IETF-MTA-MIB.dic +3191 -0
- data/lib/mibs/ietf/PKTC-IETF-SIG-MIB.dic +4713 -0
- data/lib/mibs/ietf/PMIPV6-MIB.dic +3010 -0
- data/lib/mibs/ietf/PMIPV6-TC-MIB.dic +293 -0
- data/lib/mibs/ietf/POLICY-BASED-MANAGEMENT-MIB.dic +3316 -0
- data/lib/mibs/ietf/POWER-ETHERNET-MIB.dic +959 -0
- data/lib/mibs/ietf/PPP-BRIDGE-NCP-MIB.dic +587 -0
- data/lib/mibs/ietf/PPP-IP-NCP-MIB.dic +269 -0
- data/lib/mibs/ietf/PPP-LCP-MIB.dic +994 -0
- data/lib/mibs/ietf/PPP-SEC-MIB.dic +411 -0
- data/lib/mibs/ietf/PSAMP-MIB.dic +998 -0
- data/lib/mibs/ietf/PTOPO-MIB.dic +1135 -0
- data/lib/mibs/ietf/PW-ATM-MIB.dic +1642 -0
- data/lib/mibs/ietf/PW-CEP-STD-MIB.dic +3661 -0
- data/lib/mibs/ietf/PW-STD-MIB.dic +3592 -0
- data/lib/mibs/ietf/PW-TC-STD-MIB.dic +437 -0
- data/lib/mibs/ietf/PW-TDM-MIB.dic +1896 -0
- data/lib/mibs/ietf/PerfHist-TC-MIB.dic +152 -0
- data/lib/mibs/ietf/Printer-MIB.dic +6665 -0
- data/lib/mibs/ietf/Q-BRIDGE-MIB.dic +3115 -0
- data/lib/mibs/ietf/RADIUS-ACC-CLIENT-MIB.dic +991 -0
- data/lib/mibs/ietf/RADIUS-ACC-SERVER-MIB.dic +1183 -0
- data/lib/mibs/ietf/RADIUS-AUTH-CLIENT-MIB.dic +1073 -0
- data/lib/mibs/ietf/RADIUS-AUTH-SERVER-MIB.dic +1251 -0
- data/lib/mibs/ietf/RADIUS-DYNAUTH-CLIENT-MIB.dic +1116 -0
- data/lib/mibs/ietf/RADIUS-DYNAUTH-SERVER-MIB.dic +1003 -0
- data/lib/mibs/ietf/RAQMON-MIB.dic +2695 -0
- data/lib/mibs/ietf/RBRIDGE-MIB.dic +2981 -0
- data/lib/mibs/ietf/RDBMS-MIB.dic +1935 -0
- data/lib/mibs/ietf/RFC1065-SMI.dic +108 -0
- data/lib/mibs/ietf/RFC1155-SMI.dic +118 -0
- data/lib/mibs/ietf/RFC1158-MIB.dic +2440 -0
- data/lib/mibs/ietf/RFC1213-MIB.dic +3434 -0
- data/lib/mibs/ietf/RFC1269-MIB.dic +557 -0
- data/lib/mibs/ietf/RFC1271-MIB.dic +4135 -0
- data/lib/mibs/ietf/RFC1285-MIB.dic +2842 -0
- data/lib/mibs/ietf/RFC1316-MIB.dic +800 -0
- data/lib/mibs/ietf/RFC1381-MIB.dic +1347 -0
- data/lib/mibs/ietf/RFC1382-MIB.dic +3820 -0
- data/lib/mibs/ietf/RFC1414-MIB.dic +214 -0
- data/lib/mibs/ietf/RIPv2-MIB.dic +773 -0
- data/lib/mibs/ietf/RMON-MIB.dic +5551 -0
- data/lib/mibs/ietf/RMON2-MIB.dic +8224 -0
- data/lib/mibs/ietf/ROHC-MIB.dic +1613 -0
- data/lib/mibs/ietf/ROHC-RTP-MIB.dic +859 -0
- data/lib/mibs/ietf/ROHC-UNCOMPRESSED-MIB.dic +267 -0
- data/lib/mibs/ietf/RPKI-ROUTER-MIB.dic +1363 -0
- data/lib/mibs/ietf/RS-232-MIB.dic +1335 -0
- data/lib/mibs/ietf/RSERPOOL-MIB.dic +2501 -0
- data/lib/mibs/ietf/RSTP-MIB.dic +427 -0
- data/lib/mibs/ietf/RSVP-MIB.dic +4135 -0
- data/lib/mibs/ietf/RTP-MIB.dic +1376 -0
- data/lib/mibs/ietf/SCSI-MIB.dic +3804 -0
- data/lib/mibs/ietf/SCTP-MIB.dic +1924 -0
- data/lib/mibs/ietf/SFLOW-MIB.dic +568 -0
- data/lib/mibs/ietf/SIP-COMMON-MIB.dic +2769 -0
- data/lib/mibs/ietf/SIP-MIB.dic +1438 -0
- data/lib/mibs/ietf/SIP-SERVER-MIB.dic +1150 -0
- data/lib/mibs/ietf/SIP-TC-MIB.dic +257 -0
- data/lib/mibs/ietf/SIP-UA-MIB.dic +268 -0
- data/lib/mibs/ietf/SLAPM-MIB.dic +4527 -0
- data/lib/mibs/ietf/SMON-MIB.dic +1758 -0
- data/lib/mibs/ietf/SNA-NAU-MIB.dic +4042 -0
- data/lib/mibs/ietf/SNA-SDLC-MIB.dic +3858 -0
- data/lib/mibs/ietf/SNMP-COMMUNITY-MIB.dic +715 -0
- data/lib/mibs/ietf/SNMP-FRAMEWORK-MIB.dic +709 -0
- data/lib/mibs/ietf/SNMP-MPD-MIB.dic +230 -0
- data/lib/mibs/ietf/SNMP-NOTIFICATION-MIB.dic +859 -0
- data/lib/mibs/ietf/SNMP-PROXY-MIB.dic +414 -0
- data/lib/mibs/ietf/SNMP-REPEATER-MIB.dic +4335 -0
- data/lib/mibs/ietf/SNMP-SSH-TM-MIB.dic +447 -0
- data/lib/mibs/ietf/SNMP-TARGET-MIB.dic +924 -0
- data/lib/mibs/ietf/SNMP-TLS-TM-MIB.dic +1449 -0
- data/lib/mibs/ietf/SNMP-TSM-MIB.dic +315 -0
- data/lib/mibs/ietf/SNMP-USER-BASED-SM-MIB.dic +1164 -0
- data/lib/mibs/ietf/SNMP-USM-AES-MIB.dic +95 -0
- data/lib/mibs/ietf/SNMP-USM-DH-OBJECTS-MIB.dic +653 -0
- data/lib/mibs/ietf/SNMP-VIEW-BASED-ACM-MIB.dic +1202 -0
- data/lib/mibs/ietf/SNMPv2-MIB.dic +1382 -0
- data/lib/mibs/ietf/SNMPv2-SMI.dic +223 -0
- data/lib/mibs/ietf/SNMPv2-USEC-MIB.dic +405 -0
- data/lib/mibs/ietf/SONET-MIB.dic +3308 -0
- data/lib/mibs/ietf/SOURCE-ROUTING-MIB.dic +542 -0
- data/lib/mibs/ietf/SSPM-MIB.dic +1530 -0
- data/lib/mibs/ietf/SYSAPPL-MIB.dic +2092 -0
- data/lib/mibs/ietf/T11-FC-FABRIC-ADDR-MGR-MIB.dic +1779 -0
- data/lib/mibs/ietf/T11-FC-FABRIC-CONFIG-SERVER-MIB.dic +2822 -0
- data/lib/mibs/ietf/T11-FC-FABRIC-LOCK-MIB.dic +700 -0
- data/lib/mibs/ietf/T11-FC-FSPF-MIB.dic +1889 -0
- data/lib/mibs/ietf/T11-FC-NAME-SERVER-MIB.dic +1775 -0
- data/lib/mibs/ietf/T11-FC-ROUTE-MIB.dic +655 -0
- data/lib/mibs/ietf/T11-FC-RSCN-MIB.dic +1110 -0
- data/lib/mibs/ietf/T11-FC-VIRTUAL-FABRIC-MIB.dic +770 -0
- data/lib/mibs/ietf/T11-FC-ZONE-SERVER-MIB.dic +3886 -0
- data/lib/mibs/ietf/T11-TC-MIB.dic +110 -0
- data/lib/mibs/ietf/TCP-ESTATS-MIB.dic +3926 -0
- data/lib/mibs/ietf/TCP-MIB.dic +1319 -0
- data/lib/mibs/ietf/TCPIPX-MIB.dic +457 -0
- data/lib/mibs/ietf/TE-LINK-STD-MIB.dic +2876 -0
- data/lib/mibs/ietf/TE-MIB.dic +2924 -0
- data/lib/mibs/ietf/TED-MIB.dic +1749 -0
- data/lib/mibs/ietf/TIME-AGGREGATE-MIB.dic +550 -0
- data/lib/mibs/ietf/TN3270E-MIB.dic +2785 -0
- data/lib/mibs/ietf/TN3270E-RT-MIB.dic +1317 -0
- data/lib/mibs/ietf/TOKEN-RING-RMON-MIB.dic +2820 -0
- data/lib/mibs/ietf/TOKENRING-MIB.dic +1184 -0
- data/lib/mibs/ietf/TOKENRING-STATION-SR-MIB.dic +292 -0
- data/lib/mibs/ietf/TRANSPORT-ADDRESS-MIB.dic +610 -0
- data/lib/mibs/ietf/TRIP-MIB.dic +3159 -0
- data/lib/mibs/ietf/TRIP-TC-MIB.dic +241 -0
- data/lib/mibs/ietf/TUNNEL-MIB.dic +1095 -0
- data/lib/mibs/ietf/UDP-MIB.dic +751 -0
- data/lib/mibs/ietf/UDPLITE-MIB.dic +704 -0
- data/lib/mibs/ietf/UPS-MIB.dic +3088 -0
- data/lib/mibs/ietf/URI-TC-MIB.dic +193 -0
- data/lib/mibs/ietf/UUID-TC-MIB.dic +135 -0
- data/lib/mibs/ietf/VDSL-LINE-EXT-MCM-MIB.dic +989 -0
- data/lib/mibs/ietf/VDSL-LINE-EXT-SCM-MIB.dic +605 -0
- data/lib/mibs/ietf/VDSL-LINE-MIB.dic +4518 -0
- data/lib/mibs/ietf/VDSL2-LINE-MIB.dic +11029 -0
- data/lib/mibs/ietf/VDSL2-LINE-TC-MIB.dic +3152 -0
- data/lib/mibs/ietf/VPN-TC-STD-MIB.dic +121 -0
- data/lib/mibs/ietf/VRRP-MIB.dic +1163 -0
- data/lib/mibs/ietf/VRRPV3-MIB.dic +1403 -0
- data/lib/mibs/ietf/WWW-MIB.dic +1810 -0
- data/lib/mibs/logstash/iso.dic +18 -0
- data/logstash-integration-snmp.gemspec +40 -0
- data/spec/fixtures/RFC1213-MIB.dic +3445 -0
- data/spec/fixtures/collision.dic +25 -0
- data/spec/integration/inputs/snmp_spec.rb +443 -0
- data/spec/integration/inputs/snmptrap_spec.rb +383 -0
- data/spec/unit/inputs/common_spec.rb +264 -0
- data/spec/unit/inputs/snmp_spec.rb +510 -0
- data/spec/unit/inputs/snmptrap_spec.rb +141 -0
- data/vendor/jar-dependencies/org/logstash/integrations/plugin/4.0.0/plugin-4.0.0.jar +0 -0
- data/vendor/jar-dependencies/org/snakeyaml/snakeyaml-engine/2.7/snakeyaml-engine-2.7.jar +0 -0
- data/vendor/jar-dependencies/org/snmp4j/snmp4j/3.8.0/snmp4j-3.8.0.jar +0 -0
- metadata +523 -0
@@ -0,0 +1,510 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'rspec/wait'
|
3
|
+
require "logstash/devutils/rspec/spec_helper"
|
4
|
+
require 'logstash/plugin_mixins/ecs_compatibility_support/spec_helper'
|
5
|
+
require_relative '../../../lib/logstash/inputs/snmp'
|
6
|
+
|
7
|
+
describe LogStash::Inputs::Snmp, :ecs_compatibility_support do
|
8
|
+
let(:mock_target) { double("org.snmp4j.Target") }
|
9
|
+
let(:mock_client) { double("org.logstash.snmp.SnmpClient") }
|
10
|
+
let(:mock_aggregator) { double("org.logstash.snmp.SnmpClientRequestAggregator") }
|
11
|
+
let(:mock_aggregator_request) { double("org.logstash.snmp.SnmpClientRequestAggregator#Request") }
|
12
|
+
let(:config) { {} }
|
13
|
+
|
14
|
+
subject(:plugin) { described_class.new(config) }
|
15
|
+
|
16
|
+
context "an interruptible input plugin" do
|
17
|
+
let(:config) {{ "get" => ["1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "community" => "public"}] }}
|
18
|
+
|
19
|
+
context "#stop" do
|
20
|
+
let(:queue) { SizedQueue.new(20) }
|
21
|
+
|
22
|
+
before(:each) do
|
23
|
+
allow(plugin).to receive(:build_client!).and_return(mock_client)
|
24
|
+
allow(mock_client).to receive(:listen)
|
25
|
+
allow(mock_client).to receive(:create_target).and_return(mock_target)
|
26
|
+
expect(mock_client).to receive(:close)
|
27
|
+
|
28
|
+
allow(plugin).to receive(:create_request_aggregator).and_return(mock_aggregator)
|
29
|
+
expect(mock_aggregator).to receive(:create_request).and_return(mock_aggregator_request)
|
30
|
+
expect(mock_aggregator).to receive(:await).and_return({})
|
31
|
+
expect(mock_aggregator).to receive(:close)
|
32
|
+
|
33
|
+
expect(mock_aggregator_request).to receive(:get)
|
34
|
+
expect(mock_aggregator_request).to receive(:get_result_async)
|
35
|
+
|
36
|
+
plugin.register
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns from run" do
|
40
|
+
Thread.new(queue) { |queue| loop { queue.pop } }
|
41
|
+
|
42
|
+
plugin_thread = Thread.new(plugin, queue) { |subject, queue| subject.run(queue) }
|
43
|
+
sleep 0.5
|
44
|
+
expect(plugin_thread).to be_alive
|
45
|
+
|
46
|
+
plugin.do_stop
|
47
|
+
plugin.do_close
|
48
|
+
wait(3).for { plugin_thread }.to_not be_alive
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "OIDs options validation" do
|
54
|
+
valid_configs = [
|
55
|
+
{"get" => ["1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
56
|
+
{"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
57
|
+
{"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_root_skip" => 2},
|
58
|
+
{"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_path_length" => 2},
|
59
|
+
{"get" => ["1.3.6.1.2.1.1.1.0", "1.3.6.1.2.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
60
|
+
{"get" => ["1.3.6.1.2.1.1.1.0", ".1.3.6.1.2.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
61
|
+
{"walk" => ["1.3.6.1.2.1.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
62
|
+
{"tables" => [{"name" => "ltmPoolStatTable", "columns" => ["1.3.6.1.4.1.3375.2.2.5.2.3.1.1", "1.3.6.1.4.1.3375.2.2.5.2.3.1.6"]}], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
63
|
+
]
|
64
|
+
|
65
|
+
invalid_configs = [
|
66
|
+
{"get" => ["1.3.6.1.2.1.1.1.a"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
67
|
+
{"get" => ["test"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
68
|
+
{"get" => [], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
69
|
+
{"get" => "foo", "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
70
|
+
{"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_path_length" => "a" },
|
71
|
+
{"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_path_length" => 2, "oid_root_skip" => 2 },
|
72
|
+
{"walk" => "foo", "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
73
|
+
{"tables" => [{"columns" => ["1.2.3.4", "4.3.2.1"]}], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
74
|
+
]
|
75
|
+
|
76
|
+
context "validates get oids" do
|
77
|
+
valid_configs.each_with_index do |config, index|
|
78
|
+
context "with valid config #{index}" do
|
79
|
+
let(:config) { config }
|
80
|
+
it 'should not raise' do
|
81
|
+
expect{ plugin.register }.not_to raise_error
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
invalid_configs.each_with_index do |config, index|
|
87
|
+
context "with invalid config #{index}" do
|
88
|
+
let(:config) { config }
|
89
|
+
it 'should raise' do
|
90
|
+
expect{ plugin.register }.to raise_error(LogStash::ConfigurationError)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context "hosts options validation" do
|
98
|
+
valid_configs = [
|
99
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
100
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
|
101
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:localhost/161"}]},
|
102
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/112345"}]},
|
103
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "community" => "public"}]},
|
104
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "tcp:127.0.0.1/112345"}]},
|
105
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "tcp:127.0.0.1/161", "community" => "public"}]},
|
106
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "1"}]},
|
107
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "2c"}]},
|
108
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}], "security_name" => "v3user"},
|
109
|
+
|
110
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:[::1]/16100"}]},
|
111
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:[2001:db8:0:1:1:1:1:1]/16100"}]},
|
112
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:[2001:db8::2:1]/161"}]},
|
113
|
+
]
|
114
|
+
|
115
|
+
invalid_configs = [
|
116
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "aaa:127.0.0.1/161"}]},
|
117
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "tcp.127.0.0.1/161"}]},
|
118
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "localhost"}]},
|
119
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "localhost/161"}]},
|
120
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1"}]},
|
121
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/"}]},
|
122
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/aaa"}]},
|
123
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}, {"host" => "udp:127.0.0.1/aaa"}]},
|
124
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "2"}]},
|
125
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3a"}]},
|
126
|
+
{"get" => ["1.0"], "hosts" => ""},
|
127
|
+
{"get" => ["1.0"], "hosts" => []},
|
128
|
+
{"get" => ["1.0"] },
|
129
|
+
]
|
130
|
+
|
131
|
+
context "validates hosts" do
|
132
|
+
valid_configs.each_with_index do |config, index|
|
133
|
+
context "with valid config #{index}" do
|
134
|
+
let(:config) { config }
|
135
|
+
it 'should not raise' do
|
136
|
+
expect{ plugin.register }.not_to raise_error
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
invalid_configs.each_with_index do |config, index|
|
142
|
+
context "with invalid config #{index}" do
|
143
|
+
let(:config) { config }
|
144
|
+
it 'should raise' do
|
145
|
+
expect{ plugin.register }.to raise_error(LogStash::ConfigurationError)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context "v3_users options validation" do
|
153
|
+
valid_configs = [
|
154
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}], "security_name" => "ciscov3", "auth_protocol" => "sha", "auth_pass" => "myshapass", "priv_protocol" => "aes", "priv_pass" => "myprivpass", "security_level" => "authNoPriv"},
|
155
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:[2001:db8:0:1:1:1:1:1]/1610", "version" => "3"}], "security_name" => "dellv3", "auth_protocol" => "md5", "auth_pass" => "myshapass", "priv_protocol" => "3des", "priv_pass" => "myprivpass", "security_level" => "authNoPriv"}
|
156
|
+
]
|
157
|
+
|
158
|
+
invalid_configs = [
|
159
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}], "security_name" => "ciscov3", "auth_protocol" => "badauth", "auth_pass" => "myshapass", "priv_protocol" => "aes", "priv_pass" => "myprivpass", "security_level" => "authNoPriv"},
|
160
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}], "security_name" => "ciscov3", "auth_protocol" => "sha"}
|
161
|
+
]
|
162
|
+
|
163
|
+
context "validates v3_users" do
|
164
|
+
valid_configs.each_with_index do |config, index|
|
165
|
+
context "with valid config #{index}" do
|
166
|
+
let(:config) { config }
|
167
|
+
it 'should not raise' do
|
168
|
+
expect{ plugin.register }.not_to raise_error
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
invalid_configs.each_with_index do |config, index|
|
174
|
+
context "with invalid config #{index}" do
|
175
|
+
let(:config) { config }
|
176
|
+
it 'should raise' do
|
177
|
+
expect{ plugin.register }.to raise_error(LogStash::ConfigurationError)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
describe 'local_engine_id validation' do
|
185
|
+
let(:local_engine_id) { nil }
|
186
|
+
let(:config) { super().merge('get' => ["1.0"], 'hosts' => [{'host' => "udp:127.0.0.1/161", "version" => "2c"}], 'local_engine_id' => local_engine_id) }
|
187
|
+
|
188
|
+
context 'with length lower than 5' do
|
189
|
+
let(:local_engine_id) { '1234' }
|
190
|
+
|
191
|
+
it 'should raise' do
|
192
|
+
error_message = '`local_engine_id` length must be greater or equal than 5'
|
193
|
+
expect { plugin.register }.to raise_error(LogStash::ConfigurationError, error_message)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
context 'with valid length' do
|
198
|
+
let(:local_engine_id) { '0' * 32 }
|
199
|
+
|
200
|
+
it 'should not raise' do
|
201
|
+
expect { plugin.register }.to_not raise_error
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
context 'with length greater than 32' do
|
206
|
+
let(:local_engine_id) { '0' * 33 }
|
207
|
+
|
208
|
+
it 'should raise' do
|
209
|
+
error_message = '`local_engine_id` length must be lower or equal than 32'
|
210
|
+
expect { plugin.register }.to raise_error(LogStash::ConfigurationError, error_message)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
ecs_compatibility_matrix(:disabled, :v1, :v8) do |ecs_select|
|
216
|
+
let(:queue) { Queue.new }
|
217
|
+
let(:run_once_runner) { RunOnceStoppableIntervalRunner.new(plugin) }
|
218
|
+
let(:config) { { 'ecs_compatibility' => ecs_select.active_mode } }
|
219
|
+
|
220
|
+
before(:each) do
|
221
|
+
allow(plugin).to receive(:stoppable_interval_runner).and_return(run_once_runner)
|
222
|
+
allow(plugin).to receive(:build_client!).and_return(mock_client)
|
223
|
+
allow(mock_client).to receive(:listen)
|
224
|
+
allow(mock_client).to receive(:create_target).and_return(mock_target)
|
225
|
+
allow(mock_client).to receive(:close).at_most(:once)
|
226
|
+
|
227
|
+
allow(plugin).to receive(:create_request_aggregator).and_return(mock_aggregator)
|
228
|
+
expect(mock_aggregator).to receive(:create_request).and_return(mock_aggregator_request)
|
229
|
+
expect(mock_aggregator).to receive(:await)
|
230
|
+
allow(mock_aggregator).to receive(:close)
|
231
|
+
end
|
232
|
+
|
233
|
+
context 'mocked get' do
|
234
|
+
before(:each) do
|
235
|
+
expect(mock_aggregator_request).to receive(:get)
|
236
|
+
expect(mock_aggregator_request).to receive(:get_result_async) do |consumer|
|
237
|
+
consumer.call({ 'foo' => 'bar' })
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
context 'should add' do
|
242
|
+
let(:config) { super().merge({ 'get' => ["1.3.6.1.2.1.1.1.0"], 'hosts' => [{ 'host' => "udp:127.0.0.1/161", 'community' => "public" }] }) }
|
243
|
+
|
244
|
+
it "@metadata and host fields to event" do
|
245
|
+
plugin.register
|
246
|
+
plugin.run(queue)
|
247
|
+
event = queue.pop
|
248
|
+
|
249
|
+
if ecs_select.active_mode == :disabled
|
250
|
+
expect(event.get("[@metadata][host_protocol]")).to eq("udp")
|
251
|
+
expect(event.get("[@metadata][host_address]")).to eq("127.0.0.1")
|
252
|
+
expect(event.get("[@metadata][host_port]")).to eq("161")
|
253
|
+
expect(event.get("[@metadata][host_community]")).to eq("public")
|
254
|
+
expect(event.get("host")).to eql("127.0.0.1")
|
255
|
+
else
|
256
|
+
expect(event.get("[@metadata][input][snmp][host][protocol]")).to eq("udp")
|
257
|
+
expect(event.get("[@metadata][input][snmp][host][address]")).to eq("127.0.0.1")
|
258
|
+
expect(event.get("[@metadata][input][snmp][host][port]")).to eq('161')
|
259
|
+
expect(event.get("[@metadata][input][snmp][host][community]")).to eq("public")
|
260
|
+
expect(event.get("host")).to eql('ip' => "127.0.0.1")
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
context 'with custom host field (legacy metadata)' do
|
266
|
+
let(:config) do
|
267
|
+
super().merge({
|
268
|
+
'get' => ["1.3.6.1.2.1.1.1.0"],
|
269
|
+
'hosts' => [{ 'host' => "udp:127.0.0.1/161", 'community' => "public" }],
|
270
|
+
'add_field' => { 'host' => '%{[@metadata][host_protocol]}:%{[@metadata][host_address]}/%{[@metadata][host_port]},%{[@metadata][host_community]}' }
|
271
|
+
})
|
272
|
+
end
|
273
|
+
|
274
|
+
it "should add field to event" do
|
275
|
+
plugin.register
|
276
|
+
plugin.run(queue)
|
277
|
+
event = queue.pop
|
278
|
+
|
279
|
+
expect(event.get("host")).to eq("udp:127.0.0.1/161,public")
|
280
|
+
end
|
281
|
+
end if ecs_select.active_mode == :disabled
|
282
|
+
|
283
|
+
context "with custom host field (ECS mode)" do
|
284
|
+
let(:config) do
|
285
|
+
super().merge({
|
286
|
+
'get' => ["1.3.6.1.2.1.1.1.0"],
|
287
|
+
'hosts' => [{ 'host' => "tcp:192.168.1.11/1161" }],
|
288
|
+
'add_field' => { '[host][formatted]' => '%{[@metadata][input][snmp][host][protocol]}://%{[@metadata][input][snmp][host][address]}:%{[@metadata][input][snmp][host][port]}' }
|
289
|
+
})
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should add field to event" do
|
293
|
+
plugin.register
|
294
|
+
plugin.run(queue)
|
295
|
+
event = queue.pop
|
296
|
+
|
297
|
+
expect(event.get("host")).to eq('formatted' => "tcp://192.168.1.11:1161")
|
298
|
+
end
|
299
|
+
end if ecs_select.active_mode != :disabled
|
300
|
+
|
301
|
+
context 'with target configured' do
|
302
|
+
let(:config) do
|
303
|
+
super().merge({
|
304
|
+
'get' => ['1.3.6.1.2.1.1.1.0'],
|
305
|
+
'hosts' => [{ 'host' => 'udp:127.0.0.1/161', 'community' => 'public' }],
|
306
|
+
'target' => 'snmp_data'
|
307
|
+
})
|
308
|
+
end
|
309
|
+
|
310
|
+
it 'should target event data' do
|
311
|
+
plugin.register
|
312
|
+
plugin.run(queue)
|
313
|
+
event = queue.pop
|
314
|
+
|
315
|
+
expect( event.include?('foo') ).to be false
|
316
|
+
expect( event.get('[snmp_data]') ).to eql 'foo' => 'bar'
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
context 'mocked empty request result' do
|
322
|
+
let(:config) do
|
323
|
+
super().merge({
|
324
|
+
'get' => ['1.3.6.1.2.1.1.1.0'],
|
325
|
+
'hosts' => [{ 'host' => 'udp:127.0.0.1/161', 'community' => 'public' }]
|
326
|
+
})
|
327
|
+
end
|
328
|
+
|
329
|
+
let(:logger) { double("Logger").as_null_object }
|
330
|
+
|
331
|
+
before(:each) do
|
332
|
+
expect(mock_aggregator_request).to receive(:get)
|
333
|
+
expect(mock_aggregator_request).to receive(:get_result_async) do |consumer|
|
334
|
+
consumer.call({})
|
335
|
+
end
|
336
|
+
|
337
|
+
allow(plugin).to receive(:logger).and_return(logger)
|
338
|
+
expect(logger).to receive(:debug?).and_return(true)
|
339
|
+
expect(logger).to receive(:debug).with('No SNMP data retrieved', anything)
|
340
|
+
end
|
341
|
+
|
342
|
+
it 'generates no events when client returns no response' do
|
343
|
+
plugin.register
|
344
|
+
plugin.poll_clients(queue)
|
345
|
+
|
346
|
+
expect(queue.size).to eql 0
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
context 'mocked no request response' do
|
351
|
+
let(:config) do
|
352
|
+
super().merge({
|
353
|
+
'walk' => ["1.3.6.1.2.1.1"],
|
354
|
+
"hosts" => [{"host" => "udp:127.0.0.1/161", "community" => "public"}]
|
355
|
+
})
|
356
|
+
end
|
357
|
+
|
358
|
+
let(:logger) { double("Logger").as_null_object }
|
359
|
+
|
360
|
+
before do
|
361
|
+
expect(mock_aggregator_request).to receive(:walk)
|
362
|
+
expect(mock_aggregator_request).to receive(:get_result_async)
|
363
|
+
end
|
364
|
+
|
365
|
+
it 'generates no events when client returns no response' do
|
366
|
+
plugin.register
|
367
|
+
plugin.poll_clients(queue)
|
368
|
+
|
369
|
+
expect(queue.size).to eql 0
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
context "StoppableIntervalRunner" do
|
375
|
+
let(:stop_holder) { Struct.new(:value).new(false) }
|
376
|
+
|
377
|
+
before(:each) do
|
378
|
+
allow(plugin).to receive(:stop?) { stop_holder.value }
|
379
|
+
end
|
380
|
+
|
381
|
+
let(:plugin) do
|
382
|
+
double("Plugin").tap do |dbl|
|
383
|
+
allow(dbl).to receive(:logger).and_return(double("Logger").as_null_object)
|
384
|
+
allow(dbl).to receive(:stop?) { stop_holder.value }
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
subject(:interval_runner) { LogStash::Inputs::Snmp::StoppableIntervalRunner.new(plugin) }
|
389
|
+
|
390
|
+
context "#every" do
|
391
|
+
context "when the plugin is stopped" do
|
392
|
+
let(:interval_seconds) { 2 }
|
393
|
+
it 'does not yield the block' do
|
394
|
+
stop_holder.value = true
|
395
|
+
expect { |yielder| interval_runner.every(interval_seconds, &yielder) }.to_not yield_control
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
context "when the yield takes shorter than the interval" do
|
400
|
+
let(:duration_seconds) { 1 }
|
401
|
+
let(:interval_seconds) { 2 }
|
402
|
+
|
403
|
+
it 'sleeps off the remainder' do
|
404
|
+
allow(interval_runner).to receive(:sleep).and_call_original
|
405
|
+
|
406
|
+
interval_runner.every(interval_seconds) do
|
407
|
+
Kernel::sleep(duration_seconds) # non-stoppable
|
408
|
+
stop_holder.value = true # prevent re-runs
|
409
|
+
end
|
410
|
+
|
411
|
+
expect(interval_runner).to have_received(:sleep).with(a_value_within(0.1).of(1))
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
context "when the yield takes longer than the interval" do
|
416
|
+
let(:duration_seconds) { 2 }
|
417
|
+
let(:interval_seconds) { 1 }
|
418
|
+
|
419
|
+
it 'logs a warning to the plugin' do
|
420
|
+
allow(interval_runner).to receive(:sleep).and_call_original
|
421
|
+
|
422
|
+
interval_runner.every(interval_seconds) do
|
423
|
+
Kernel::sleep(duration_seconds) # non-stoppable
|
424
|
+
stop_holder.value = true # prevent re-runs
|
425
|
+
end
|
426
|
+
|
427
|
+
expect(interval_runner).to_not have_received(:sleep)
|
428
|
+
|
429
|
+
expect(plugin.logger).to have_received(:warn).with(a_string_including("took longer"), a_hash_including(:interval_seconds => interval_seconds, :duration_seconds => a_value_within(0.1).of(duration_seconds)))
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
433
|
+
it 'runs regularly until the plugin is stopped' do
|
434
|
+
timestamps = []
|
435
|
+
|
436
|
+
thread = Thread.new do
|
437
|
+
interval_runner.every(1) do
|
438
|
+
timestamps << Time.now
|
439
|
+
Kernel::sleep(Random::rand(0.8))
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
Kernel::sleep(5)
|
444
|
+
expect(thread).to be_alive
|
445
|
+
|
446
|
+
stop_holder.value = true
|
447
|
+
Kernel::sleep(1)
|
448
|
+
|
449
|
+
aggregate_failures do
|
450
|
+
expect(thread).to_not be_alive
|
451
|
+
expect(timestamps.count).to be_within(1).of(5)
|
452
|
+
|
453
|
+
timestamps.each_cons(2) do |previous, current|
|
454
|
+
# ensure each start time is very close to 1s after the previous.
|
455
|
+
expect(current - previous).to be_within(0.05).of(1)
|
456
|
+
end
|
457
|
+
|
458
|
+
thread.kill if thread.alive?
|
459
|
+
end
|
460
|
+
end
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
context "close" do
|
465
|
+
let(:config) do
|
466
|
+
{
|
467
|
+
'get' => ["1.3.6.1.2.1.1.1.0"],
|
468
|
+
'hosts' => [{'host' => "udp:127.0.0.1/161", 'community' => "public"}]
|
469
|
+
}
|
470
|
+
end
|
471
|
+
|
472
|
+
let(:run_once_runner) { RunOnceStoppableIntervalRunner.new(plugin) }
|
473
|
+
|
474
|
+
before(:each) do
|
475
|
+
allow(plugin).to receive(:stoppable_interval_runner).and_return(run_once_runner)
|
476
|
+
allow(plugin).to receive(:build_client!).and_return(mock_client)
|
477
|
+
allow(mock_client).to receive(:listen)
|
478
|
+
allow(mock_client).to receive(:create_target).and_return(mock_target)
|
479
|
+
allow(mock_client).to receive(:close)
|
480
|
+
|
481
|
+
allow(plugin).to receive(:create_request_aggregator).and_return(mock_aggregator)
|
482
|
+
expect(mock_aggregator).to receive(:await)
|
483
|
+
allow(mock_aggregator).to receive(:close)
|
484
|
+
|
485
|
+
expect(mock_aggregator).to receive(:create_request).and_return(mock_aggregator_request)
|
486
|
+
expect(mock_aggregator_request).to receive(:get)
|
487
|
+
expect(mock_aggregator_request).to receive(:get_result_async)
|
488
|
+
end
|
489
|
+
|
490
|
+
it "should call client close method upon termination" do
|
491
|
+
plugin.register
|
492
|
+
plugin.run(Queue.new)
|
493
|
+
plugin.do_close
|
494
|
+
|
495
|
+
expect(mock_client).to have_received(:close).once
|
496
|
+
expect(mock_aggregator).to have_received(:close).once
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
class RunOnceStoppableIntervalRunner
|
502
|
+
def initialize(plugin)
|
503
|
+
@plugin = plugin
|
504
|
+
end
|
505
|
+
|
506
|
+
def every(interval_seconds, desc = 'operation', &block)
|
507
|
+
yield
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require "logstash/devutils/rspec/spec_helper"
|
2
|
+
require "logstash/devutils/rspec/shared_examples"
|
3
|
+
require 'logstash/plugin_mixins/ecs_compatibility_support/spec_helper'
|
4
|
+
require_relative '../../../lib/logstash/inputs/snmptrap'
|
5
|
+
require 'logstash-integration-snmp_jars'
|
6
|
+
|
7
|
+
describe LogStash::Inputs::Snmptrap, :ecs_compatibility_support do
|
8
|
+
|
9
|
+
java_import 'org.logstash.snmp.trap.SnmpTrapMessage'
|
10
|
+
java_import 'org.snmp4j.smi.IpAddress'
|
11
|
+
|
12
|
+
let(:mock_target) { double("org.snmp4j.Target") }
|
13
|
+
let(:mock_client) { double("org.logstash.snmp.SnmpClient") }
|
14
|
+
let(:config) { Hash.new }
|
15
|
+
let(:source_ip) { '192.168.1.11' }
|
16
|
+
|
17
|
+
subject(:plugin) { described_class.new(config) }
|
18
|
+
|
19
|
+
context "an interruptible input plugin" do
|
20
|
+
context "#stop" do
|
21
|
+
let(:queue) { SizedQueue.new(20) }
|
22
|
+
|
23
|
+
before(:each) do
|
24
|
+
plugin.register
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns from run" do
|
28
|
+
Thread.new(queue) { |queue| loop { queue.pop } }
|
29
|
+
|
30
|
+
plugin_thread = Thread.new(plugin, queue) { |subject, queue| subject.run(queue) }
|
31
|
+
sleep 0.5
|
32
|
+
expect(plugin_thread).to be_alive
|
33
|
+
|
34
|
+
plugin.do_stop
|
35
|
+
plugin.do_close
|
36
|
+
wait(3).for { plugin_thread }.to_not be_alive
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
ecs_compatibility_matrix(:disabled, :v1, :v8) do |ecs_select|
|
42
|
+
|
43
|
+
let(:config) { super().merge 'ecs_compatibility' => ecs_select.active_mode }
|
44
|
+
|
45
|
+
context 'with an SNMP v1 trap' do
|
46
|
+
|
47
|
+
let(:trap) do
|
48
|
+
bindings = {
|
49
|
+
"1.3.6.1.2.3.4" => 111
|
50
|
+
}
|
51
|
+
|
52
|
+
trap_event = {
|
53
|
+
"enterprise" => "enterprises.9",
|
54
|
+
"agent_addr" => source_ip,
|
55
|
+
"specific_trap" => 42,
|
56
|
+
"timestamp" => 12345,
|
57
|
+
"variable_bindings" => bindings
|
58
|
+
}
|
59
|
+
|
60
|
+
trap = org.logstash.snmp.trap.SnmpTrapMessage.new(0, 'public'.bytes, org.snmp4j.smi.IpAddress.new(source_ip), trap_event, bindings)
|
61
|
+
trap
|
62
|
+
end
|
63
|
+
|
64
|
+
before { @event = plugin.send :process_trap_message, trap }
|
65
|
+
|
66
|
+
it "extract snmp payload" do
|
67
|
+
expect( @event.get('message') ).to be_a String
|
68
|
+
expect( @event.get('1.3.6.1.2.3.4') ).to eql 111
|
69
|
+
end
|
70
|
+
|
71
|
+
it "sets source host" do
|
72
|
+
if ecs_select.active_mode == :disabled
|
73
|
+
expect( @event.get('host') ).to eql source_ip
|
74
|
+
else
|
75
|
+
expect( @event.get('host') ).to eql 'ip' => source_ip
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'with an SNMP v2 trap' do
|
82
|
+
|
83
|
+
let(:trap) do
|
84
|
+
bindings = {
|
85
|
+
"1.2.3" => "foo",
|
86
|
+
"1.4.5.6" => "bar",
|
87
|
+
}
|
88
|
+
|
89
|
+
trap_event = {
|
90
|
+
"request_id" => 12345,
|
91
|
+
"error_status" => 0,
|
92
|
+
"timestamp" => 1011,
|
93
|
+
"variable_bindings" => bindings
|
94
|
+
}
|
95
|
+
|
96
|
+
trap = org.logstash.snmp.trap.SnmpTrapMessage.new(1, 'public'.bytes, org.snmp4j.smi.IpAddress.new(source_ip), trap_event, bindings)
|
97
|
+
trap
|
98
|
+
end
|
99
|
+
|
100
|
+
before { @event = plugin.send :process_trap_message, trap }
|
101
|
+
|
102
|
+
it "extract snmp payload" do
|
103
|
+
expect( @event.get('message') ).to be_a String
|
104
|
+
expect( @event.get('1.2.3') ).to eql 'foo'
|
105
|
+
expect( @event.get('1.4.5.6') ).to eql 'bar'
|
106
|
+
end
|
107
|
+
|
108
|
+
it "sets source host" do
|
109
|
+
if ecs_select.active_mode == :disabled
|
110
|
+
expect( @event.get('host') ).to eql source_ip
|
111
|
+
else
|
112
|
+
expect( @event.get('host') ).to eql 'ip' => source_ip
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'with target' do
|
117
|
+
|
118
|
+
let(:config) { super().merge 'target' => '[snmp]' }
|
119
|
+
|
120
|
+
it "extract snmp payload" do
|
121
|
+
expect( @event.include?('1.2.3') ).to be false
|
122
|
+
expect( @event.include?('1.3.6.1.2.1.1.3.0') ).to be false
|
123
|
+
expect( @event.get('[snmp][1.2.3]') ).to eql 'foo'
|
124
|
+
|
125
|
+
expect( @event.get('message') ).to be_a String
|
126
|
+
end
|
127
|
+
|
128
|
+
it "sets source host" do
|
129
|
+
if ecs_select.active_mode == :disabled
|
130
|
+
expect( @event.get('host') ).to eql source_ip
|
131
|
+
else
|
132
|
+
expect( @event.get('host') ).to eql 'ip' => source_ip
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
Binary file
|
Binary file
|
Binary file
|