--
-- %CopyrightBegin%
-- 
-- Copyright Ericsson AB 1997-2009. All Rights Reserved.
-- 
-- The contents of this file are subject to the Erlang Public License,
-- Version 1.1, (the "License"); you may not use this file except in
-- compliance with the License. You should have received a copy of the
-- Erlang Public License along with this software. If not, it can be
-- retrieved online at http://www.erlang.org/.
-- 
-- Software distributed under the License is distributed on an "AS IS"
-- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-- the License for the specific language governing rights and limitations
-- under the License.
-- 
-- %CopyrightEnd%
--

OTP-OS-MON-MIB DEFINITIONS ::= BEGIN
 
IMPORTS
    TRAP-TYPE
        FROM RFC-1215
    OBJECT-TYPE
        FROM RFC-1212
    Counter
        FROM RFC1155-SMI
    Gauge
        FROM RFC1155-SMI
    Unsigned32
        FROM SNMPv2-SMI
    Counter64
        FROM SNMPv2-SMI
    DisplayString
        FROM RFC1213-MIB
    otpModules
        FROM OTP-REG
    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 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       mandatory
--   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      INTEGER (0..100)
    ACCESS      read-only
    STATUS      mandatory
    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      INTEGER (0..100)
    ACCESS      read-only    
    STATUS      mandatory   
    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
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION
        "A table with load and memory information
        for each node."
    ::= { load 3 }

loadEntry OBJECT-TYPE
    SYNTAX      LoadEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION
        "A conceptual row in the loadTable."
    INDEX   { loadErlNodeName }
    ::= { loadTable 1 }

LoadEntry ::= SEQUENCE {
    loadErlNodeName                   DisplayString,
    loadSystemTotalMemory             Gauge,
    loadSystemUsedMemory              Gauge,
    loadLargestErlProcess             DisplayString,
    loadLargestErlProcessUsedMemory   Gauge,
    loadCpuLoad                       INTEGER,
    loadCpuLoad5                      INTEGER,
    loadCpuLoad15                     INTEGER,
    loadOsWordsize                    Unsigned32,
    loadSystemTotalMemory64           OTPCounterBasedGauge64,
    loadSystemUsedMemory64            OTPCounterBasedGauge64,
    loadLargestErlProcessUsedMemory64 OTPCounterBasedGauge64
    }

loadErlNodeName OBJECT-TYPE
    SYNTAX      DisplayString
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION
        "The name of the erlang node, e.g. erlnode@host1."
    ::= { loadEntry 1 }

loadSystemTotalMemory OBJECT-TYPE
    SYNTAX      Gauge
--     UNITS       "bytes"
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The amount of total memory in the system."
    ::= { loadEntry 2 }

loadSystemUsedMemory OBJECT-TYPE
    SYNTAX      Gauge
--     UNITS       "bytes"
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The amount of used memory."
    ::= { loadEntry 3 }

loadLargestErlProcess OBJECT-TYPE
    SYNTAX      DisplayString
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The process identifier (Pid) of the largest Erlang
        process."
    ::= { loadEntry 4 }

loadLargestErlProcessUsedMemory OBJECT-TYPE
    SYNTAX      Gauge
--     UNITS       "bytes"
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The amount of memory used by the largest Erlang
        process."
    ::= { loadEntry 5 }

loadCpuLoad OBJECT-TYPE
    SYNTAX      INTEGER (0..100)
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The average load the last minute in percent of the CPU
	where the Erlang node runs."
    ::= { loadEntry 6 }

loadCpuLoad5 OBJECT-TYPE
    SYNTAX      INTEGER (0..100)
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The average load the last 5 minutes in percent of the CPU
	where the Erlang node runs."
    ::= { loadEntry 7}

loadCpuLoad15 OBJECT-TYPE
    SYNTAX      INTEGER (0..100)
    ACCESS      read-only
    STATUS      mandatory
    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
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The wordsize of the operating operating system."
    ::= { loadEntry 9 }

loadSystemTotalMemory64 OBJECT-TYPE
    SYNTAX      OTPCounterBasedGauge64
--     UNITS       "bytes"
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The amount of total memory in the system for 64-bit operating system."
    ::= { loadEntry 10 }

loadSystemUsedMemory64 OBJECT-TYPE
    SYNTAX      OTPCounterBasedGauge64
--     UNITS       "bytes"
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The amount of used memory for 64-bit operating system."
    ::= { loadEntry 11 }

loadLargestErlProcessUsedMemory64 OBJECT-TYPE
    SYNTAX      OTPCounterBasedGauge64
--     UNITS       "bytes"
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The amount of memory used by the largest Erlang
        process for 64-bit operating system.."
    ::= { loadEntry 12 }

diskAlmostFullThreshold OBJECT-TYPE
    SYNTAX      INTEGER (0..100)
    ACCESS      read-only    
    STATUS      mandatory   
    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
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION
          "A table with all local disks or partitions on each
          node."
    ::= { disk 2 }

diskEntry OBJECT-TYPE
    SYNTAX      DiskEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION
          "A conceptual row in the diskTable."
    INDEX      { erlNodeId, diskId }
    ::= { diskTable 1 }

DiskEntry ::= SEQUENCE {
    diskId          INTEGER,
    diskDescr       DisplayString,
    diskKBytes      Gauge,
    diskCapacity    INTEGER
    }

diskId OBJECT-TYPE
    SYNTAX      INTEGER
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION
        "An integer that uniquely identifies the disk
        or partition."
    ::= { diskEntry 1 }

diskDescr OBJECT-TYPE
    SYNTAX     DisplayString
    ACCESS     read-only
    STATUS     mandatory
    DESCRIPTION
        "A string that identifies the disk or partition."
    ::= { diskEntry 2 }

diskKBytes OBJECT-TYPE
    SYNTAX      Gauge
--     UNITS       "kbytes"
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION
        "The amount of total disk/partition space. "
    ::= { diskEntry 3 }

diskCapacity OBJECT-TYPE
    SYNTAX      INTEGER (0..100)
    ACCESS      read-only
    STATUS      mandatory
    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  mandatory
--     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
--     VARIABLES { loadMemorySystemWatermark,
--               loadMemoryErlProcWatermark,
--               loadSystemTotalMemory,
--               loadSystemUsedMemory,
--               loadLargestErlProcess,
--               loadLargestErlProcessUsedMemory,
--               loadCpuLoad,
--               loadCpuLoad5,
--               loadCpuLoad15,
--               loadOsWordsize,
--               loadSystemTotalMemory64,
--               loadSystemUsedMemory64,
--               loadLargestErlProcessUsedMemory64}
--     STATUS  mandatory
--     DESCRIPTION
--             "A collection of objects providing basic instrumentation
--             of the load of the OTP system."
--     ::= { otpOsMonMIBGroups 1 }

-- diskGroup OBJECT-GROUP
--     VARIABLES { diskAlmostFullThreshold,
--               diskDescr,
--               diskKBytes,
--               diskCapacity }
--     STATUS  mandatory
--     DESCRIPTION
--             "A collection of objects providing basic instrumentation
--             of the disks in the OTP system."
--     ::= { otpOsMonMIBGroups 3 }

END
