diff options
Diffstat (limited to 'lib/os_mon')
-rw-r--r-- | lib/os_mon/Makefile | 6 | ||||
-rw-r--r-- | lib/os_mon/doc/src/Makefile | 1 | ||||
-rw-r--r-- | lib/os_mon/doc/src/os_mon_app.xml | 27 | ||||
-rw-r--r-- | lib/os_mon/doc/src/os_mon_mib.xml | 74 | ||||
-rw-r--r-- | lib/os_mon/doc/src/ref_man.xml | 1 | ||||
-rw-r--r-- | lib/os_mon/mibs/Makefile | 101 | ||||
-rw-r--r-- | lib/os_mon/mibs/OTP-OS-MON-MIB.funcs | 5 | ||||
-rw-r--r-- | lib/os_mon/mibs/OTP-OS-MON-MIB.mib | 423 | ||||
-rw-r--r-- | lib/os_mon/mibs/v1/.gitignore | 0 | ||||
-rw-r--r-- | lib/os_mon/src/Makefile | 3 | ||||
-rw-r--r-- | lib/os_mon/src/os_mon.app.src | 6 | ||||
-rw-r--r-- | lib/os_mon/src/os_mon_mib.erl | 251 | ||||
-rw-r--r-- | lib/os_mon/test/Makefile | 2 | ||||
-rw-r--r-- | lib/os_mon/test/os_mon.spec | 1 | ||||
-rw-r--r-- | lib/os_mon/test/os_mon_mib_SUITE.cfg | 8 | ||||
-rw-r--r-- | lib/os_mon/test/os_mon_mib_SUITE.erl | 578 |
16 files changed, 4 insertions, 1483 deletions
diff --git a/lib/os_mon/Makefile b/lib/os_mon/Makefile index 1eff8a785a..40ce94e0c7 100644 --- a/lib/os_mon/Makefile +++ b/lib/os_mon/Makefile @@ -23,11 +23,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk # # Macros # -ifeq ($(findstring win32,$(TARGET)),win32) -SUB_DIRECTORIES = src c_src mibs doc/src -else -SUB_DIRECTORIES = src c_src mibs doc/src -endif +SUB_DIRECTORIES = src c_src doc/src include vsn.mk VSN = $(OS_MON_VSN) diff --git a/lib/os_mon/doc/src/Makefile b/lib/os_mon/doc/src/Makefile index 354f8ed26b..8e9a4c333c 100644 --- a/lib/os_mon/doc/src/Makefile +++ b/lib/os_mon/doc/src/Makefile @@ -39,7 +39,6 @@ XML_APPLICATION_FILES = ref_man.xml XML_REF3_FILES = cpu_sup.xml \ disksup.xml \ memsup.xml \ - os_mon_mib.xml \ os_sup.xml \ nteventlog.xml diff --git a/lib/os_mon/doc/src/os_mon_app.xml b/lib/os_mon/doc/src/os_mon_app.xml index 99492a2021..c77a9d0411 100644 --- a/lib/os_mon/doc/src/os_mon_app.xml +++ b/lib/os_mon/doc/src/os_mon_app.xml @@ -88,33 +88,6 @@ </section> <section> - <title>SNMP MIBs</title> - <p>The following MIBs are defined in OS_Mon:</p> - <taglist> - <tag>OTP-OS-MON-MIB</tag> - <item> - <p>This MIB contains objects for instrumentation of disk, - memory and CPU usage of the nodes in the system.</p> - </item> - </taglist> - <p>The MIB is stored in the <c>mibs</c> directory. It is defined - in SNMPv2 SMI syntax. An SNMPv1 version of the MIB is delivered - in the <c>mibs/v1</c> directory.</p> - <p>The compiled MIB is located under <c>priv/mibs</c>, and - the generated <c>.hrl</c> file under the <c>include</c> directory. - To compile a MIB that IMPORTS the <c>OTP-OS-MON-MIB</c>, give - the option <c>{il, ["os_mon/priv/mibs"]}</c> to the MIB compiler.</p> - <p>If the MIB should be used in a system, it should be loaded into - an agent with a call to <c>os_mon_mib:load(Agent)</c>, where - <c>Agent</c> is the pid or registered name of an SNMP agent. Use - <c>os_mon_mib:unload(Agent)</c> to unload the MIB. - The implementation of this MIB uses Mnesia to store a cache with - data needed, which implicates that Mnesia must be up and running. - The MIB also use functions defined for the <c>OTP-MIB</c>, thus - that MIB must be loaded as well.</p> - </section> - - <section> <title>See Also</title> <p><seealso marker="cpu_sup">cpu_sup(3)</seealso>, <seealso marker="disksup">disksup(3)</seealso>, diff --git a/lib/os_mon/doc/src/os_mon_mib.xml b/lib/os_mon/doc/src/os_mon_mib.xml deleted file mode 100644 index e995bf3de1..0000000000 --- a/lib/os_mon/doc/src/os_mon_mib.xml +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE erlref SYSTEM "erlref.dtd"> - -<erlref> - <header> - <copyright> - <year>2004</year><year>2018</year> - <holder>Ericsson AB. All Rights Reserved.</holder> - </copyright> - <legalnotice> - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - </legalnotice> - - <title>os_mon_mib</title> - <prepared>Ingela Andin</prepared> - <responsible></responsible> - <docno></docno> - <date></date> - <rev></rev> - </header> - <module>os_mon_mib</module> - <modulesummary>Loading and Unloading of OTP-OS-MON-MIB</modulesummary> - <description> - <p>Functions for loading and unloading the OTP-OS-MON-MIB into/from - an SNMP agent. The instrumentation of the OTP-OS-MON-MIB uses - Mnesia, hence Mnesia must be started prior to loading - the OTP-OS-MON-MIB.</p> - <warning> - <p>This module has been deprecated and will be removed in a furture release.</p> - </warning> - </description> - <funcs> - <func> - <name>load(Agent) -> ok | {error, Reason}</name> - <fsummary>Load the OTP-OS-MON-MIB</fsummary> - <type> - <v>Agent = pid() | atom()</v> - <v>Reason = term()</v> - </type> - <desc> - <p>Loads the OTP-OS-MON-MIB.</p> - </desc> - </func> - <func> - <name>unload(Agent) -> ok | {error, Reason}</name> - <fsummary>Unload the OTP-OS-MON-MIB</fsummary> - <type> - <v>Agent = pid() | atom() </v> - <v>Reason = term()</v> - </type> - <desc> - <p>Unloads the OTP-OS-MON-MIB.</p> - </desc> - </func> - </funcs> - - <section> - <title>See Also</title> - <p><seealso marker="os_mon_app">os_mon(6)</seealso>, - <seealso marker="snmp:snmp">snmp(3)</seealso></p> - </section> -</erlref> - diff --git a/lib/os_mon/doc/src/ref_man.xml b/lib/os_mon/doc/src/ref_man.xml index a8f847a8ba..57dd5c5f0b 100644 --- a/lib/os_mon/doc/src/ref_man.xml +++ b/lib/os_mon/doc/src/ref_man.xml @@ -36,7 +36,6 @@ <xi:include href="cpu_sup.xml"/> <xi:include href="disksup.xml"/> <xi:include href="memsup.xml"/> - <xi:include href="os_mon_mib.xml"/> <xi:include href="os_sup.xml"/> <xi:include href="nteventlog.xml"/> </application> diff --git a/lib/os_mon/mibs/Makefile b/lib/os_mon/mibs/Makefile deleted file mode 100644 index dbc105ee3d..0000000000 --- a/lib/os_mon/mibs/Makefile +++ /dev/null @@ -1,101 +0,0 @@ -# -# %CopyrightBegin% -# -# Copyright Ericsson AB 1997-2016. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# %CopyrightEnd% -# -include $(ERL_TOP)/make/target.mk -include $(ERL_TOP)/make/$(TARGET)/otp.mk - -# ---------------------------------------------------- -# Application version -# ---------------------------------------------------- -include ../vsn.mk -VSN=$(OS_MON_VSN) - -# ---------------------------------------------------- -# Release directory specification -# ---------------------------------------------------- -RELSYSDIR = $(RELEASE_PATH)/lib/os_mon-$(VSN) - -# ---------------------------------------------------- -# Target Specs -# ---------------------------------------------------- - -MIB_FILES= OTP-OS-MON-MIB.mib -FUNCS_FILES = OTP-OS-MON-MIB.funcs - -BIN_TARGETS= $(MIB_FILES:%.mib=$(SNMP_BIN_TARGET_DIR)/%.bin) -HRL_TARGETS= $(MIB_FILES:%.mib=$(SNMP_HRL_TARGET_DIR)/%.hrl) -V1_MIB_FILES= $(MIB_FILES:%.mib=v1/%.mib.v1) - -TARGET_FILES= $(SNMP_BIN_TARGET_DIR)/OTP-REG.bin \ - $(SNMP_BIN_TARGET_DIR)/OTP-TC.bin \ - $(SNMP_BIN_TARGET_DIR)/OTP-MIB.bin \ - $(BIN_TARGETS) $(HRL_TARGETS) $(V1_MIB_FILES) - -# ---------------------------------------------------- -# FLAGS -# ---------------------------------------------------- -SNMP_FLAGS = -I $(SNMP_BIN_TARGET_DIR) - -# ---------------------------------------------------- -# Targets -# ---------------------------------------------------- - -debug opt: $(TARGET_FILES) - -clean: - rm -f $(TARGET_FILES) - rm -f core - -docs: - -OTP_MIBDIR = $(shell if test -d ../../otp_mibs; then echo otp_mibs; \ - else echo sasl; fi) - -$(SNMP_BIN_TARGET_DIR)/OTP-REG.bin: $(ERL_TOP)/lib/$(OTP_MIBDIR)/mibs/OTP-REG.mib - $(snmp_verbose)$(ERLC) -pa $(SNMP_TOOLKIT)/ebin -I $(SNMP_TOOLKIT)/priv/mibs $(SNMP_FLAGS) -o $(SNMP_BIN_TARGET_DIR) $< - -$(SNMP_BIN_TARGET_DIR)/OTP-TC.bin: $(ERL_TOP)/lib/$(OTP_MIBDIR)/mibs/OTP-TC.mib - $(snmp_verbose)$(ERLC) -pa $(SNMP_TOOLKIT)/ebin -I $(SNMP_TOOLKIT)/priv/mibs $(SNMP_FLAGS) -o $(SNMP_BIN_TARGET_DIR) $< - -$(SNMP_BIN_TARGET_DIR)/OTP-MIB.bin: $(ERL_TOP)/lib/$(OTP_MIBDIR)/mibs/OTP-MIB.mib - $(snmp_verbose)$(ERLC) -pa $(SNMP_TOOLKIT)/ebin -I $(SNMP_TOOLKIT)/priv/mibs $(SNMP_FLAGS) -o $(SNMP_BIN_TARGET_DIR) $< - -v1/%.mib.v1: %.mib - $(gen_verbose)$(ERL_TOP)/lib/snmp/bin/snmp-v2tov1 -o $@ $< - -$(SNMP_BIN_TARGET_DIR)/OTP-OS-MON-MIB.bin: \ - $(SNMP_BIN_TARGET_DIR)/OTP-REG.bin \ - $(SNMP_BIN_TARGET_DIR)/OTP-MIB.bin \ - -# ---------------------------------------------------- -# Release Target -# ---------------------------------------------------- -include $(ERL_TOP)/make/otp_release_targets.mk - -release_spec: opt - $(INSTALL_DIR) "$(RELSYSDIR)/mibs" - $(INSTALL_DIR) "$(RELSYSDIR)/mibs/v1" - $(INSTALL_DATA) $(MIB_FILES) $(FUNCS_FILES) "$(RELSYSDIR)/mibs" - $(INSTALL_DATA) $(V1_MIB_FILES) "$(RELSYSDIR)/mibs/v1" - $(INSTALL_DIR) "$(RELSYSDIR)/include" - $(INSTALL_DATA) $(HRL_TARGETS) "$(RELSYSDIR)/include" - $(INSTALL_DIR) "$(RELSYSDIR)/priv/mibs" - $(INSTALL_DATA) $(BIN_TARGETS) "$(RELSYSDIR)/priv/mibs" - -release_docs_spec: diff --git a/lib/os_mon/mibs/OTP-OS-MON-MIB.funcs b/lib/os_mon/mibs/OTP-OS-MON-MIB.funcs deleted file mode 100644 index 7ed76517b9..0000000000 --- a/lib/os_mon/mibs/OTP-OS-MON-MIB.funcs +++ /dev/null @@ -1,5 +0,0 @@ -{loadMemorySystemWatermark, {os_mon_mib, mem_sys_mark, []}}. -{loadMemoryErlProcWatermark, {os_mon_mib, mem_proc_mark, []}}. -{loadTable, {os_mon_mib, load_table, []}}. -{diskAlmostFullThreshold, {os_mon_mib, disk_threshold, []}}. -{diskTable, {os_mon_mib, disk_table, []}}. diff --git a/lib/os_mon/mibs/OTP-OS-MON-MIB.mib b/lib/os_mon/mibs/OTP-OS-MON-MIB.mib deleted file mode 100644 index e027e96154..0000000000 --- a/lib/os_mon/mibs/OTP-OS-MON-MIB.mib +++ /dev/null @@ -1,423 +0,0 @@ --- --- %CopyrightBegin% --- --- Copyright Ericsson AB 1997-2016. All Rights Reserved. --- --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- --- %CopyrightEnd% --- - -OTP-OS-MON-MIB DEFINITIONS ::= BEGIN - -IMPORTS - MODULE-IDENTITY, NOTIFICATION-TYPE, OBJECT-TYPE, - Counter32, Gauge32, Integer32, Unsigned32, Counter64 - FROM SNMPv2-SMI - TEXTUAL-CONVENTION, DisplayString - FROM SNMPv2-TC - MODULE-COMPLIANCE, NOTIFICATION-GROUP, OBJECT-GROUP - FROM SNMPv2-CONF - otpModules, otpApplications - FROM OTP-REG - erlNodeId - FROM OTP-MIB - ; - - -otpOsMonModule MODULE-IDENTITY - LAST-UPDATED "0305090900Z" - ORGANIZATION "Ericsson" - CONTACT-INFO - "Contact: Erlang Support see license agreement for Erlang/OTP." - - DESCRIPTION - "This MIB is part of the OTP MIB. It defines MIB objects - for the os_mon application in OTP." - - REVISION "0508260900Z" - DESCRIPTION - "Removed dependeny on EVA." - REVISION "0305090900Z" - DESCRIPTION - "Changed CONTACT-INFO as it was outdated, made it more generic - to avoid such changes in the future." - - REVISION "9807080900Z" - DESCRIPTION - "Changed MAX-ACCESS for diskDescr from not-accessible to - read-only." - - REVISION "9801270900Z" - DESCRIPTION - "Changed erroneous name of this module to otpOsMonModule." - - REVISION "9712010900Z" - DESCRIPTION - "Converted to v2 SMI and placed in the OTP tree." - - REVISION "9608191700Z" - DESCRIPTION - "The initial revision of MIB module OTP-OS-MON-MIB." - ::= { otpModules 4 } - -OTPCounterBasedGauge64 ::= TEXTUAL-CONVENTION - STATUS current - DESCRIPTION - "The CounterBasedGauge64 type represents a non-negative - integer, which may increase or decrease, but shall never - exceed a maximum value, nor fall below a minimum value. The - maximum value can not be greater than 2^64-1 - (18446744073709551615 decimal), and the minimum value can - - not be smaller than 0. The value of a CounterBasedGauge64 - has its maximum value whenever the information being modeled - is greater than or equal to its maximum value, and has its - minimum value whenever the information being modeled is - smaller than or equal to its minimum value. If the - information being modeled subsequently decreases below - (increases above) the maximum (minimum) value, the - CounterBasedGauge64 also decreases (increases). - - Note that this TC is not strictly supported in SMIv2, - because the 'always increasing' and 'counter wrap' semantics - associated with the Counter64 base type are not preserved. - It is possible that management applications which rely - solely upon the (Counter64) ASN.1 tag to determine object - semantics will mistakenly operate upon objects of this type - as they would for Counter64 objects. - - This textual convention represents a limited and short-term - solution, and may be deprecated as a long term solution is - defined and deployed to replace it." - SYNTAX Counter64 - -otpOsMonMIB OBJECT IDENTIFIER ::= { otpApplications 2 } -otpOsMonMIBConformance - OBJECT IDENTIFIER ::= { otpOsMonMIB 1 } -otpOsMonMIBObjects - OBJECT IDENTIFIER ::= { otpOsMonMIB 2 } -otpOsMonMIBAlarms - OBJECT IDENTIFIER ::= { otpOsMonMIB 4 } -otpOsMonMIBAlarmsV2 - OBJECT IDENTIFIER ::= { otpOsMonMIBAlarms 0 } - - --- Datatypes - --- Managed Objects - -load OBJECT IDENTIFIER ::= { otpOsMonMIBObjects 1 } -disk OBJECT IDENTIFIER ::= { otpOsMonMIBObjects 2 } - -loadMemorySystemWatermark OBJECT-TYPE - SYNTAX Integer32 (0..100) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Threshold in percent of the total available system - memory, which specifies how much memory can be allocated - by the system before an alarm is sent." - ::= { load 1 } - -loadMemoryErlProcWatermark OBJECT-TYPE - SYNTAX Integer32 (0..100) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Threshold in percent of the total available system - memory, which specifies how much memory can be allocated - by one Erlang process before an alarm is sent." - ::= { load 2 } - -loadTable OBJECT-TYPE - SYNTAX SEQUENCE OF LoadEntry - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "A table with load and memory information - for each node." - ::= { load 3 } - -loadEntry OBJECT-TYPE - SYNTAX LoadEntry - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "A conceptual row in the loadTable." - INDEX { loadErlNodeName } - ::= { loadTable 1 } - -LoadEntry ::= SEQUENCE { - loadErlNodeName DisplayString, - loadSystemTotalMemory Gauge32, - loadSystemUsedMemory Gauge32, - loadLargestErlProcess DisplayString, - loadLargestErlProcessUsedMemory Gauge32, - loadCpuLoad Integer32, - loadCpuLoad5 Integer32, - loadCpuLoad15 Integer32, - loadOsWordsize Unsigned32, - loadSystemTotalMemory64 OTPCounterBasedGauge64, - loadSystemUsedMemory64 OTPCounterBasedGauge64, - loadLargestErlProcessUsedMemory64 OTPCounterBasedGauge64 - } - -loadErlNodeName OBJECT-TYPE - SYNTAX DisplayString - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "The name of the erlang node, e.g. erlnode@host1." - ::= { loadEntry 1 } - -loadSystemTotalMemory OBJECT-TYPE - SYNTAX Gauge32 - UNITS "bytes" - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The amount of total memory in the system." - ::= { loadEntry 2 } - -loadSystemUsedMemory OBJECT-TYPE - SYNTAX Gauge32 - UNITS "bytes" - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The amount of used memory." - ::= { loadEntry 3 } - -loadLargestErlProcess OBJECT-TYPE - SYNTAX DisplayString - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The process identifier (Pid) of the largest Erlang - process." - ::= { loadEntry 4 } - -loadLargestErlProcessUsedMemory OBJECT-TYPE - SYNTAX Gauge32 - UNITS "bytes" - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The amount of memory used by the largest Erlang - process." - ::= { loadEntry 5 } - -loadCpuLoad OBJECT-TYPE - SYNTAX Integer32 (0..100) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The average load the last minute in percent of the CPU - where the Erlang node runs." - ::= { loadEntry 6 } - -loadCpuLoad5 OBJECT-TYPE - SYNTAX Integer32 (0..100) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The average load the last 5 minutes in percent of the CPU - where the Erlang node runs." - ::= { loadEntry 7} - -loadCpuLoad15 OBJECT-TYPE - SYNTAX Integer32 (0..100) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The average load the last 15 minutes in percent of the CPU - where the Erlang node runs." - ::= { loadEntry 8} - -loadOsWordsize OBJECT-TYPE - SYNTAX Unsigned32 - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The wordsize of the operating operating system." - ::= { loadEntry 9 } - -loadSystemTotalMemory64 OBJECT-TYPE - SYNTAX OTPCounterBasedGauge64 - UNITS "bytes" - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The amount of total memory in the system for 64-bit operating system." - ::= { loadEntry 10 } - -loadSystemUsedMemory64 OBJECT-TYPE - SYNTAX OTPCounterBasedGauge64 - UNITS "bytes" - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The amount of used memory for 64-bit operating system." - ::= { loadEntry 11 } - -loadLargestErlProcessUsedMemory64 OBJECT-TYPE - SYNTAX OTPCounterBasedGauge64 - UNITS "bytes" - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The amount of memory used by the largest Erlang - process for 64-bit operating system.." - ::= { loadEntry 12 } - -diskAlmostFullThreshold OBJECT-TYPE - SYNTAX Integer32 (0..100) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "Threshold in percent of the available disk space, - which specifies how much disk space can be used by - a disk or partition before an alarm is sent." - ::= { disk 1 } - -diskTable OBJECT-TYPE - SYNTAX SEQUENCE OF DiskEntry - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "A table with all local disks or partitions on each - node." - ::= { disk 2 } - -diskEntry OBJECT-TYPE - SYNTAX DiskEntry - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "A conceptual row in the diskTable." - INDEX { erlNodeId, diskId } - ::= { diskTable 1 } - -DiskEntry ::= SEQUENCE { - diskId Integer32, - diskDescr DisplayString, - diskKBytes Gauge32, - diskCapacity Integer32 - } - -diskId OBJECT-TYPE - SYNTAX Integer32 - MAX-ACCESS not-accessible - STATUS current - DESCRIPTION - "An integer that uniquely identifies the disk - or partition." - ::= { diskEntry 1 } - -diskDescr OBJECT-TYPE - SYNTAX DisplayString - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "A string that identifies the disk or partition." - ::= { diskEntry 2 } - -diskKBytes OBJECT-TYPE - SYNTAX Gauge32 - UNITS "kbytes" - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "The amount of total disk/partition space. " - ::= { diskEntry 3 } - -diskCapacity OBJECT-TYPE - SYNTAX Integer32 (0..100) - MAX-ACCESS read-only - STATUS current - DESCRIPTION - "How much of the disk's/partition's total capacity has - been used, in percent." - ::= { diskEntry 4 } - - --- conformance information - -otpOsMonMIBCompliances - OBJECT IDENTIFIER ::= { otpOsMonMIBConformance 1 } -otpOsMonMIBGroups - OBJECT IDENTIFIER ::= { otpOsMonMIBConformance 2 } - - --- compliance statements - -otpOsMonBasicCompliance MODULE-COMPLIANCE - STATUS current - DESCRIPTION - "The compliance statement for SNMPv2 entities which - implement the OTP-OS-MON-MIB." - MODULE -- this module - GROUP loadGroup - DESCRIPTION - "This group is mandatory for systems implementing the - load supervison functionality." - GROUP loadAlarmsGroup - DESCRIPTION - "This group is optional for systems implementing the - load supervison functionality." - GROUP diskGroup - DESCRIPTION - "This group is mandatory for system implementing the - disk supervison functionality." - GROUP diskAlarmsGroup - DESCRIPTION - "This group is optional for systems implementing the - disk supervison functionality." - ::= { otpOsMonMIBCompliances 1 } - - --- units of conformance - -loadGroup OBJECT-GROUP - OBJECTS { loadMemorySystemWatermark, - loadMemoryErlProcWatermark, - loadSystemTotalMemory, - loadSystemUsedMemory, - loadLargestErlProcess, - loadLargestErlProcessUsedMemory, - loadCpuLoad, - loadCpuLoad5, - loadCpuLoad15, - loadOsWordsize, - loadSystemTotalMemory64, - loadSystemUsedMemory64, - loadLargestErlProcessUsedMemory64} - STATUS current - DESCRIPTION - "A collection of objects providing basic instrumentation - of the load of the OTP system." - ::= { otpOsMonMIBGroups 1 } - -diskGroup OBJECT-GROUP - OBJECTS { diskAlmostFullThreshold, - diskDescr, - diskKBytes, - diskCapacity } - STATUS current - DESCRIPTION - "A collection of objects providing basic instrumentation - of the disks in the OTP system." - ::= { otpOsMonMIBGroups 3 } - -END diff --git a/lib/os_mon/mibs/v1/.gitignore b/lib/os_mon/mibs/v1/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 --- a/lib/os_mon/mibs/v1/.gitignore +++ /dev/null diff --git a/lib/os_mon/src/Makefile b/lib/os_mon/src/Makefile index fc2eb22393..923a31f290 100644 --- a/lib/os_mon/src/Makefile +++ b/lib/os_mon/src/Makefile @@ -34,8 +34,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/os_mon-$(VSN) # ---------------------------------------------------- # Target Specs # ---------------------------------------------------- -MODULES= disksup memsup cpu_sup os_mon os_mon_mib os_sup os_mon_sysinfo \ - nteventlog +MODULES= disksup memsup cpu_sup os_mon os_sup os_mon_sysinfo nteventlog INCLUDE=../include CSRC=../c_src diff --git a/lib/os_mon/src/os_mon.app.src b/lib/os_mon/src/os_mon.app.src index 8be94f65d4..6c9b0d7576 100644 --- a/lib/os_mon/src/os_mon.app.src +++ b/lib/os_mon/src/os_mon.app.src @@ -21,7 +21,7 @@ {application, os_mon, [{description, "CPO CXC 138 46"}, {vsn, "%VSN%"}, - {modules, [os_mon, os_mon_mib, os_sup, + {modules, [os_mon, os_sup, disksup, memsup, cpu_sup, os_mon_sysinfo, nteventlog]}, {registered, [os_mon_sup, os_mon_sysinfo, disksup, memsup, cpu_sup, os_sup_server]}, @@ -31,6 +31,4 @@ {start_memsup, true}, {start_os_sup, false}]}, {mod, {os_mon, []}}, - {runtime_dependencies, ["stdlib-2.0","snmp-4.25.1","sasl-2.4", - "otp_mibs-1.0.9","mnesia-4.12","kernel-3.0", - "erts-6.0"]}]}. + {runtime_dependencies, ["stdlib-2.0","sasl-2.4","kernel-3.0","erts-6.0"]}]}. diff --git a/lib/os_mon/src/os_mon_mib.erl b/lib/os_mon/src/os_mon_mib.erl deleted file mode 100644 index 9b5d2fbba6..0000000000 --- a/lib/os_mon/src/os_mon_mib.erl +++ /dev/null @@ -1,251 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2016. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% --module(os_mon_mib). -%%%----------------------------------------------------------------- -%%% Description: This module implements the OS-MON-MIB. -%%% The tables are implemented as shadow tables with the module -%%% snmp_shadow_table. Here the update functions are implemented. -%%%----------------------------------------------------------------- - --include("../../otp_mibs/include/OTP-MIB.hrl"). - -%% API --export([load/1, unload/1]). - -%% Deprecated API --export([init/1, stop/1]). - --deprecated([{init,1,eventually}, - {stop,1,eventually}]). - -%% SNMP instrumentation --export([load_table/1, load_table/3, disk_table/1, disk_table/3, - mem_sys_mark/1, mem_proc_mark/1, disk_threshold/1]). - -%% SNMP shadow functions --export([update_load_table/0, update_disk_table/0]). - -%% Exported for internal use via rpc --export([get_load/1, get_disks/1]). - -%% Shadow tables --record(loadTable, { - loadErlNodeName, - loadSystemTotalMemory, - loadSystemUsedMemory, - loadLargestErlProcess, - loadLargestErlProcessUsedMemory, - loadCpuLoad, - loadCpuLoad5, - loadCpuLoad15, - loadOsWordsize, - loadSystemTotalMemory64, - loadSystemUsedMemory64, - loadLargestErlProcessUsedMemory64}). - --record(diskTable, - {key, diskDescr, diskKBytes, diskCapacity}). - -%% Shadow argument macros --define(loadShadowArgs, - {loadTable, string, record_info(fields, loadTable), 5000, - fun os_mon_mib:update_load_table/0}). - --define(diskShadowArgs, - {diskTable, {integer, integer}, record_info(fields, diskTable), 5000, - fun os_mon_mib:update_disk_table/0}). - -%% Misc --record(diskAlloc, {diskDescr, diskId}). - -%%%========================================================================= -%%% API -%%%========================================================================= - -%%------------------------------------------------------------------------- -%% load(Agent) -> ok | {error, Reason} -%% Agent - pid() | atom() -%% Reason - term() -%% Description: Loads the OTP-OS-MON-MIB -%%------------------------------------------------------------------------- -load(Agent) -> - MibDir = filename:join(code:priv_dir(os_mon), "mibs"), - snmpa:load_mibs(Agent, [filename:join(MibDir, "OTP-OS-MON-MIB")]). - -%%------------------------------------------------------------------------- -%% unload(Agent) -> ok | {error, Reason} -%% Agent - pid() | atom() -%% Reason - term() -%% Description: Unloads the OTP-OS-MON-MIB -%%------------------------------------------------------------------------- -unload(Agent) -> - snmpa:unload_mibs(Agent, ["OTP-OS-MON-MIB"]). - -%% To be backwards compatible -init(Agent) -> - load(Agent). -stop(Agent) -> - unload(Agent). - -%%%========================================================================= -%%% SNMP instrumentation -%%%========================================================================= -load_table(Op) -> - snmp_shadow_table:table_func(Op, ?loadShadowArgs). -load_table(Op, RowIndex, Cols) -> - snmp_shadow_table:table_func(Op, RowIndex, Cols, ?loadShadowArgs). - -disk_table(new) -> - Tab = diskAlloc, - Storage = ram_copies, - case lists:member(Tab, mnesia:system_info(tables)) of - true -> - case mnesia:table_info(Tab, storage_type) of - unknown -> - {atomic, ok}=mnesia:add_table_copy(Tab, node(), Storage); - Storage -> - catch delete_all(Tab) - end; - false -> - Nodes = [node()], - Props = [{type, set}, - {attributes, record_info(fields, diskAlloc)}, - {local_content, true}, - {Storage, Nodes}], - {atomic, ok} = mnesia:create_table(Tab, Props) - - end, - Rec = #diskAlloc{diskDescr = next_index, diskId = 1}, - ok = mnesia:dirty_write(Rec), - snmp_shadow_table:table_func(new, ?diskShadowArgs). - -disk_table(Op, RowIndex, Cols) -> - snmp_shadow_table:table_func(Op, RowIndex, Cols, ?diskShadowArgs). - -mem_sys_mark(get) -> - {value, memsup:get_sysmem_high_watermark()}; -mem_sys_mark(_) -> - ok. - -mem_proc_mark(get) -> - {value, memsup:get_procmem_high_watermark()}; -mem_proc_mark(_) -> - ok. - -disk_threshold(get) -> - {value, disksup:get_almost_full_threshold()}; -disk_threshold(_) -> - ok. - -%%%========================================================================= -%%% SNMP shadow functions -%%%========================================================================= -update_load_table() -> - delete_all(loadTable), - lists:foreach( - fun(Node) -> - case rpc:call(Node, os_mon_mib, get_load, [Node]) of - Load when is_record(Load,loadTable) -> - ok = mnesia:dirty_write(Load); - _Else -> - ok - end - end, [node() | nodes()]). - - -update_disk_table() -> - delete_all(diskTable), - node_update_disk_table( - otp_mib:erl_node_table(get_next, [], [?erlNodeName,?erlNodeOutBytes])). - -%%%======================================================================== -%%% Exported for internal use via rpc -%%%======================================================================== -get_load(Node) -> - {Total, Allocated, PidString, PidAllocated} = case memsup:get_memory_data() of - {MemTot, MemAlloc, undefined} -> {MemTot, MemAlloc, "undefined", 0}; - {MemTot, MemAlloc, {Pid, PidMem}} -> {MemTot, MemAlloc, pid_to_str(Pid), PidMem} - end, - OsWordsize = case memsup:get_os_wordsize() of - WS when is_integer(WS) -> WS; - _ -> 0 - end, - #loadTable{ - loadErlNodeName = atom_to_list(Node), - loadSystemTotalMemory = mask_int32(Total), - loadSystemUsedMemory = mask_int32(Allocated), - loadLargestErlProcess = PidString, - loadLargestErlProcessUsedMemory = mask_int32(PidAllocated), - loadCpuLoad = get_cpu_load(avg1), - loadCpuLoad5 = get_cpu_load(avg5), - loadCpuLoad15 = get_cpu_load(avg15), - loadOsWordsize = OsWordsize, - loadSystemTotalMemory64 = Total, - loadSystemUsedMemory64 = Allocated, - loadLargestErlProcessUsedMemory64 = PidAllocated - }. - -mask_int32(Value) -> Value band ((1 bsl 32) - 1). - -get_disks(NodeId) -> - element(1, - lists:mapfoldl( - fun({Descr, KByte, Capacity}, DiskId) -> - {#diskTable{key = {NodeId, DiskId}, - diskDescr = Descr, - diskKBytes = KByte, - diskCapacity = Capacity}, - DiskId + 1} - end, 1, disksup:get_disk_data())). - - -%%%======================================================================== -%%% Internal functions -%%%======================================================================== -node_update_disk_table([_, endOfTable]) -> - ok; - -node_update_disk_table([{[?erlNodeName | IndexList], NodeStr}, _]) -> - Disks = rpc:call(list_to_atom(NodeStr), os_mon_mib, get_disks, - IndexList), - lists:foreach(fun(Disk) -> - mnesia:dirty_write(Disk) - end, Disks), - node_update_disk_table(otp_mib:erl_node_table(get_next, - IndexList, - [?erlNodeName, - ?erlNodeOutBytes])). - -get_cpu_load(X) when X == avg1; X == avg5; X == avg15 -> - case erlang:round(apply(cpu_sup, X, [])/2.56) of - Large when Large > 100 -> - 100; - Load -> - Load - end. - -delete_all(Name) -> delete_all(mnesia:dirty_first(Name), Name). -delete_all('$end_of_table', _Name) -> done; -delete_all(Key, Name) -> - Next = mnesia:dirty_next(Name, Key), - ok = mnesia:dirty_delete({Name, Key}), - delete_all(Next, Name). - -pid_to_str(Pid) -> lists:flatten(io_lib:format("~w", [Pid])). diff --git a/lib/os_mon/test/Makefile b/lib/os_mon/test/Makefile index 6ac67e6bae..03c73b95ec 100644 --- a/lib/os_mon/test/Makefile +++ b/lib/os_mon/test/Makefile @@ -30,7 +30,6 @@ MODULES= \ disksup_SUITE \ memsup_SUITE \ cpu_sup_SUITE \ - os_mon_mib_SUITE \ os_sup_SUITE \ os_mon_conf @@ -87,7 +86,6 @@ release_tests_spec: make_emakefile $(INSTALL_DIR) "$(RELSYSDIR)" $(INSTALL_DATA) os_mon.spec os_mon.cover os_mon_smoke.spec \ $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)" - $(INSTALL_DATA) os_mon_mib_SUITE.cfg "$(RELSYSDIR)" ## tar chf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -) diff --git a/lib/os_mon/test/os_mon.spec b/lib/os_mon/test/os_mon.spec index 4b4286b313..d292b258f3 100644 --- a/lib/os_mon/test/os_mon.spec +++ b/lib/os_mon/test/os_mon.spec @@ -1,2 +1 @@ {suites,"../os_mon_test",all}. -{config,"os_mon_mib_SUITE.cfg"}.
\ No newline at end of file diff --git a/lib/os_mon/test/os_mon_mib_SUITE.cfg b/lib/os_mon/test/os_mon_mib_SUITE.cfg deleted file mode 100644 index a33c23530b..0000000000 --- a/lib/os_mon/test/os_mon_mib_SUITE.cfg +++ /dev/null @@ -1,8 +0,0 @@ -%% -*- erlang -*- -{snmp, [{start_agent,true}, - {users,[{os_mon_mib_test,[snmpm_user_default,[]]}]}, - {managed_agents,[{os_mon_mib_test, - [os_mon_mib_test, {127,0,0,1}, 4000, []]}]}, - {agent_sysname,"Test os_mon_mibs"}, - {mgr_port,5001} - ]}. diff --git a/lib/os_mon/test/os_mon_mib_SUITE.erl b/lib/os_mon/test/os_mon_mib_SUITE.erl deleted file mode 100644 index f40d5f442c..0000000000 --- a/lib/os_mon/test/os_mon_mib_SUITE.erl +++ /dev/null @@ -1,578 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2004-2016. All Rights Reserved. -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. -%% -%% %CopyrightEnd% -%% --module(os_mon_mib_SUITE). - -%%----------------------------------------------------------------- -%% This suite can no longer be executed standalone, i.e. it must be -%% executed with common test. The reason is that ct_snmp is used -%% instead of the snmp application directly. The suite requires a -%% config file, os_mon_mib_SUITE.cfg, found in the same directory as -%% the suite. -%% -%% Execute with: -%% > ct_run -suite os_mon_mib_SUITE -config os_mon_mib_SUITE.cfg -%%----------------------------------------------------------------- - --include_lib("common_test/include/ct.hrl"). --include_lib("os_mon/include/OTP-OS-MON-MIB.hrl"). --include_lib("snmp/include/snmp_types.hrl"). - -% Test server specific exports --export([all/0, suite/0, groups/0, - init_per_suite/1, end_per_suite/1]). - - -% Test cases must be exported. --export([update_load_table/1]). - --export([get_mem_sys_mark/1, get_mem_proc_mark/1, get_disk_threshold/1, - get_load_table/1, get_disk_table/1, - real_snmp_request/1, load_unload/1]). - --export([sys_tot_mem/1, sys_used_mem/1, large_erl_process/1, - large_erl_process_mem/1, cpu_load/1, cpu_load5/1, cpu_load15/1, - os_wordsize/1, sys_tot_mem64/1, sys_used_mem64/1, - large_erl_process_mem64/1, disk_descr/1, disk_kbytes/1, - disk_capacity/1]). - --export([otp_6351/1, otp_7441/1]). - --define(TRAP_UDP, 5000). --define(AGENT_UDP, 4000). --define(CONF_FILE_VER, [v2]). --define(SYS_NAME, "Test os_mon_mibs"). --define(MAX_MSG_SIZE, 484). --define(ENGINE_ID, "mgrEngine"). --define(MGR_PORT, 5001). - -%%--------------------------------------------------------------------- - -suite() -> - [{ct_hooks,[ts_install_cth]}, - {timetrap,{minutes,6}}, - {require, snmp_mgr_agent, snmp}]. - -all() -> - [load_unload, get_mem_sys_mark, get_mem_proc_mark, - get_disk_threshold, get_load_table, - {group, get_next_load_table}, get_disk_table, - {group, get_next_disk_table}, real_snmp_request, - update_load_table, {group, tickets}]. - -groups() -> - [{tickets, [], [otp_6351, otp_7441]}, - {get_next_load_table, [], - [sys_tot_mem, sys_used_mem, large_erl_process, - large_erl_process_mem, cpu_load, cpu_load5, cpu_load15, - os_wordsize, sys_tot_mem64, sys_used_mem64, - large_erl_process_mem64]}, - {get_next_disk_table, [], - [disk_descr, disk_kbytes, disk_capacity]}]. - - -%%--------------------------------------------------------------------- -%%-------------------------------------------------------------------- -%% Function: init_per_suite(Config) -> Config -%% Config - [tuple()] -%% A list of key/value pairs, holding the test case configuration. -%% Description: Initiation before the whole suite -%% -%% Note: This function is free to add any key/value pairs to the Config -%% variable, but should NOT alter/remove any existing entries. -%%-------------------------------------------------------------------- -init_per_suite(Config) -> - application:start(sasl), - application:start(mnesia), - application:start(os_mon), - - ok = ct_snmp:start(Config,snmp_mgr_agent), - - %% Load the mibs that should be tested - otp_mib:load(snmp_master_agent), - os_mon_mib:load(snmp_master_agent), - - Config. -%%-------------------------------------------------------------------- -%% Function: end_per_suite(Config) -> _ -%% Config - [tuple()] -%% A list of key/value pairs, holding the test case configuration. -%% Description: Cleanup after the whole suite -%%-------------------------------------------------------------------- -end_per_suite(Config) -> - PrivDir = proplists:get_value(priv_dir, Config), - ConfDir = filename:join(PrivDir,"conf"), - DbDir = filename:join(PrivDir,"db"), - MgrDir = filename:join(PrivDir, "mgr"), - - %% Uload mibs - snmpa:unload_mibs(snmp_master_agent,["OTP-OS-MON-MIB"]), - otp_mib:unload(snmp_master_agent), - - %% Clean up - application:stop(snmp), - application:stop(mnesia), - application:stop(os_mon), - - del_dir(ConfDir), - del_dir(DbDir), - (catch del_dir(MgrDir)), - ok. - -%%--------------------------------------------------------------------- -%% Test cases -%%--------------------------------------------------------------------- - -%% Test to unload and the reload the OTP.mib -load_unload(Config) when is_list(Config) -> - os_mon_mib:unload(snmp_master_agent), - os_mon_mib:load(snmp_master_agent), - ok. -%%--------------------------------------------------------------------- - -%% check os_mon_mib:update_load_table error handling -update_load_table(Config) when is_list(Config) -> - Node = start_node(), - ok = rpc:call(Node,application,start,[sasl]), - ok = rpc:call(Node,application,start,[os_mon]), - ok = os_mon_mib:update_load_table(), - rpc:call(Node,application,stop,[os_mon]), - ok = os_mon_mib:update_load_table(), - stop_node(Node), - ok. - -%% like update_load_table, when memsup_system_only==true -otp_6351(Config) when is_list(Config) -> - Node = start_node(), - ok = rpc:call(Node,application,start,[sasl]), - ok = rpc:call(Node,application,load,[os_mon]), - ok = rpc:call(Node,application,set_env, - [os_mon,memsup_system_only,true]), - ok = rpc:call(Node,application,start,[os_mon]), - Res = rpc:call(Node,os_mon_mib,get_load,[Node]), - if - is_tuple(Res), element(1, Res)==loadTable -> - ok; - true -> - ct:fail(Res) - end, - rpc:call(Node,application,stop,[os_mon]), - stop_node(Node), - ok. - - -%%--------------------------------------------------------------------- -%% Simulates a get call to test the instrumentation function -%% for the loadMemorySystemWatermark variable. -get_mem_sys_mark(Config) when is_list(Config) -> - case os_mon_mib:mem_sys_mark(get) of - {value, SysMark} when is_integer(SysMark) -> - ok; - _ -> - ct:fail(sys_mark_value_not_integer) - end. -%%--------------------------------------------------------------------- -%% Simulates a get call to test the instrumentation function -%% for the loadMemoryErlProcWatermark variable. -get_mem_proc_mark(Config) when is_list(Config) -> - case os_mon_mib:mem_proc_mark(get) of - {value, ProcMark} when is_integer(ProcMark) -> - ok; - _ -> - ct:fail(proc_mark_value_not_integer) - end. -%%--------------------------------------------------------------------- -%% Simulates a get call to test the instrumentation function -%% for the diskAlmostFullThreshold variable. -get_disk_threshold(Config) when is_list(Config) -> - case os_mon_mib:disk_threshold(get) of - {value, ProcMark} when is_integer(ProcMark) -> - ok; - _ -> - ct:fail(disk_threshold_value_not_integer) - end. -%%--------------------------------------------------------------------- - -%%% Note that when we have a string key, as in loadTable, the -%%% instrumentation will deal with the [length(String), String]. We -%%% have to know about this, when short cutting SNMP and calling -%%% instrumentation functions directly as done in most test cases in -%%% this test suite - -%% Simulates get calls to test the instrumentation function -%% for the loadTable -get_load_table(Config) when is_list(Config) -> - - NodeStr = atom_to_list(node()), - NodeLen = length(NodeStr), - - {_, _, {Pid, _}} = memsup:get_memory_data(), - PidStr = lists:flatten(io_lib:format("~w", [Pid])), - [{value, NodeStr},{value, PidStr}] = - os_mon_mib:load_table(get, [NodeLen | NodeStr], - [?loadErlNodeName, ?loadLargestErlProcess]), - - Values = os_mon_mib:load_table(get, [NodeLen | NodeStr] , - [?loadSystemTotalMemory, - ?loadSystemUsedMemory, - ?loadLargestErlProcessUsedMemory, - ?loadCpuLoad, - ?loadCpuLoad5, - ?loadCpuLoad15, - ?loadOsWordsize, - ?loadSystemTotalMemory64, - ?loadSystemUsedMemory64, - ?loadLargestErlProcessUsedMemory64]), - - IsInt = fun({value, Val}) when is_integer(Val) -> - true; - (_) -> - false - end, - - NewValues = lists:filter(IsInt, Values), - - case length(NewValues) of - 10 -> - ok; - _ -> - ct:fail(value_not_integer) - end, - - [{noValue,noSuchInstance}, {noValue,noSuchInstance}, - {noValue,noSuchInstance}, {noValue,noSuchInstance}, - {noValue,noSuchInstance}, {noValue,noSuchInstance}, - {noValue,noSuchInstance}, {noValue,noSuchInstance}, - {noValue,noSuchInstance}, {noValue,noSuchInstance}, - {noValue,noSuchInstance}, {noValue,noSuchInstance}] = - os_mon_mib:load_table(get, [3, 102, 111, 111], - [?loadErlNodeName, - ?loadSystemTotalMemory, - ?loadSystemUsedMemory, - ?loadLargestErlProcess, - ?loadLargestErlProcessUsedMemory, - ?loadCpuLoad, - ?loadCpuLoad5, - ?loadCpuLoad15, - ?loadOsWordsize, - ?loadSystemTotalMemory64, - ?loadSystemUsedMemory64, - ?loadLargestErlProcessUsedMemory64]), - - ok. -%%--------------------------------------------------------------------- - -sys_tot_mem(Config) when is_list(Config) -> - [{[?loadSystemTotalMemory, Len | NodeStr], Mem}] = - os_mon_mib:load_table(get_next, [], [?loadSystemTotalMemory]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Mem of - Mem when is_integer(Mem) -> - ok; - _ -> - ct:fail(sys_tot_mem_value_not_integer) - end. - -sys_used_mem(Config) when is_list(Config) -> - [{[?loadSystemUsedMemory, Len | NodeStr], Mem}] = - os_mon_mib:load_table(get_next,[], [?loadSystemUsedMemory]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Mem of - Mem when is_integer(Mem) -> - ok; - _ -> - ct:fail(sys_used_mem_value_not_integer) - end. - -large_erl_process(Config) when is_list(Config) -> - {_, _, {Pid, _}} = memsup:get_memory_data(), - PidStr = lists:flatten(io_lib:format("~w", [Pid])), - [{[?loadLargestErlProcess, Len | NodeStr], PidStr}] = - os_mon_mib:load_table(get_next,[], [?loadLargestErlProcess]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - ok. - -large_erl_process_mem(Config) when is_list(Config) -> - - [{[?loadLargestErlProcessUsedMemory, Len | NodeStr], Mem}] = - os_mon_mib:load_table(get_next,[], - [?loadLargestErlProcessUsedMemory]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Mem of - Mem when is_integer(Mem) -> - ok; - _ -> - ct:fail(erl_pid_mem_value_not_integer) - end. - -cpu_load(Config) when is_list(Config) -> - [{[?loadCpuLoad, Len | NodeStr], Load}] = - os_mon_mib:load_table(get_next,[], [?loadCpuLoad]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Load of - Load when is_integer(Load) -> - ok; - _ -> - ct:fail(cpu_load_value_not_integer) - end. - -cpu_load5(Config) when is_list(Config) -> - [{[?loadCpuLoad5, Len | NodeStr], Load}] = - os_mon_mib:load_table(get_next,[], [?loadCpuLoad5]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Load of - Load when is_integer(Load) -> - ok; - _ -> - ct:fail(cpu_load5_value_not_integer) - end. - -cpu_load15(Config) when is_list(Config) -> - [{[?loadCpuLoad15, Len | NodeStr], Load}] = - os_mon_mib:load_table(get_next,[], [?loadCpuLoad15]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Load of - Load when is_integer(Load) -> - ok; - _ -> - ct:fail(cpu_load15_value_not_integer) - end. - -os_wordsize(Config) when is_list(Config) -> - [{[?loadOsWordsize, Len | NodeStr], Wordsize}] = - os_mon_mib:load_table(get_next,[], [?loadOsWordsize]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Wordsize of - Wordsize when is_integer(Wordsize) -> - ok; - _ -> - ct:fail(os_wordsize_value_not_integer) - end. - -sys_tot_mem64(Config) when is_list(Config) -> - [{[?loadSystemTotalMemory64, Len | NodeStr], Mem}] = - os_mon_mib:load_table(get_next, [], [?loadSystemTotalMemory64]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Mem of - Mem when is_integer(Mem) -> - ok; - _ -> - ct:fail(sys_tot_mem_value_not_integer) - end. - -sys_used_mem64(Config) when is_list(Config) -> - [{[?loadSystemUsedMemory64, Len | NodeStr], Mem}] = - os_mon_mib:load_table(get_next,[], [?loadSystemUsedMemory64]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Mem of - Mem when is_integer(Mem) -> - ok; - _ -> - ct:fail(sys_used_mem_value_not_integer) - end. - -large_erl_process_mem64(Config) when is_list(Config) -> - - [{[?loadLargestErlProcessUsedMemory64, Len | NodeStr], Mem}] = - os_mon_mib:load_table(get_next,[], - [?loadLargestErlProcessUsedMemory64]), - Len = length(NodeStr), - true = lists:member(list_to_atom(NodeStr), [node() | nodes()]), - - case Mem of - Mem when is_integer(Mem) -> - ok; - _ -> - ct:fail(erl_pid_mem_value_not_integer) - end. -%%--------------------------------------------------------------------- -%% Simulates get calls to test the instrumentation function -%% for the diskTable. -get_disk_table(Config) when is_list(Config) -> - - DiskData = disksup:get_disk_data(), - DiskDataLen = length(DiskData), - - if - DiskDataLen > 0 -> - [{value, Value}] = - os_mon_mib:disk_table(get, [1,1], [?diskDescr]), - - case is_list(Value) of - true -> - ok; - false -> - ct:fail(value_not_a_string) - end, - - Values = os_mon_mib:disk_table(get, [1,1], - [?diskId, - ?diskKBytes, - ?diskCapacity]), - - IsInt = fun({value, Val}) when is_integer(Val) -> - true; - (_) -> - false - end, - - NewValues = lists:filter(IsInt, Values), - - case length(NewValues) of - 3 -> - ok; - _ -> - ct:fail(value_not_integer) - end - end, - - [{noValue,noSuchInstance}, {noValue,noSuchInstance}, - {noValue,noSuchInstance}, {noValue,noSuchInstance}] = - os_mon_mib:disk_table(get, [1, DiskDataLen + 1], [?diskId, - ?diskDescr, - ?diskKBytes, - ?diskCapacity]), - - ok. - -%%--------------------------------------------------------------------- - -disk_descr(Config) when is_list(Config) -> - [{[?diskDescr, 1,1], Descr}] = - os_mon_mib:disk_table(get_next, [], [?diskDescr]), - - case Descr of - Descr when is_list(Descr) -> - ok; - _ -> - ct:fail(disk_descr_value_not_a_string) - end. - -disk_kbytes(Config) when is_list(Config) -> - [{[?diskKBytes, 1,1], Kbytes}] = - os_mon_mib:disk_table(get_next,[], [?diskKBytes]), - - case Kbytes of - Kbytes when is_integer(Kbytes) -> - ok; - _ -> - ct:fail(disk_kbytes_value_not_integer) - end. - - -disk_capacity(Config) when is_list(Config) -> - [{[?diskCapacity, 1,1], Capacity}] = - os_mon_mib:disk_table(get_next,[], [?diskCapacity]), - - case Capacity of - Capacity when is_integer(Capacity) -> - ok; - _ -> - ct:fail(disk_capacity_value_not_integer) - end. - -%%--------------------------------------------------------------------- -%% Starts an snmp manager and sends a real snmp-request. i.e. -%% sends a udp message on the correct format. -real_snmp_request(Config) when is_list(Config) -> - NodStr = atom_to_list(node()), - Len = length(NodStr), - {_, _, {Pid, _}} = memsup:get_memory_data(), - PidStr = lists:flatten(io_lib:format("~w", [Pid])), - io:format("FOO: ~p~n", [PidStr]), - ok = snmp_get([?loadEntry ++ - [?loadLargestErlProcess, Len | NodStr]], - PidStr), - ok = snmp_get_next([?loadEntry ++ - [?loadSystemUsedMemory, Len | NodStr]], - ?loadEntry ++ [?loadSystemUsedMemory + 1, Len - | NodStr], PidStr), - ok = snmp_set([?loadEntry ++ [?loadLargestErlProcess, Len | NodStr]], - s, "<0.101.0>", Config), - ok. - -%% Starts an snmp manager and requests total memory. Was previously -%% integer32 which was errornous on 64 bit machines. -otp_7441(Config) when is_list(Config) -> - NodStr = atom_to_list(node()), - Len = length(NodStr), - Oids = [Oid|_] = [?loadEntry ++ [?loadSystemTotalMemory, Len | NodStr]], - {noError,0,[#varbind{oid = Oid, variabletype = 'Unsigned32'}]} = - ct_snmp:get_values(os_mon_mib_test, Oids, snmp_mgr_agent), - - ok. - -%%--------------------------------------------------------------------- -%% Internal functions -%%--------------------------------------------------------------------- -start_node() -> - Pa = filename:dirname(code:which(?MODULE)), - {ok,Node} = test_server:start_node(testnisse, slave, [{args, " -pa " ++ Pa}]), - Node. - -stop_node(Node) -> - test_server:stop_node(Node). - -del_dir(Dir) -> - io:format("Deleting: ~s~n",[Dir]), - {ok, Files} = file:list_dir(Dir), - FullPathFiles = lists:map(fun(File) -> filename:join(Dir, File) end, - Files), - lists:foreach(fun file:delete/1, FullPathFiles), - file:del_dir(Dir). - -%%--------------------------------------------------------------------- -snmp_get(Oids = [Oid |_], Result) -> - {noError,0,[#varbind{oid = Oid, - variabletype = 'OCTET STRING', - value = Result}]} = - ct_snmp:get_values(os_mon_mib_test, Oids, snmp_mgr_agent), - ok. - -snmp_get_next(Oids, NextOid, Result) -> - {noError,0,[#varbind{oid = NextOid, - variabletype = 'OCTET STRING', - value = Result}]} = - ct_snmp:get_next_values(os_mon_mib_test, Oids, snmp_mgr_agent), - ok. - -snmp_set(Oid, ValuType, Value, Config) -> - {notWritable, _, _} = - ct_snmp:set_values(os_mon_mib_test, [{Oid, ValuType, Value}], - snmp_mgr_agent, Config), - ok. |