--
-- %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
