module openconfig-procmon {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/system/procmon";

  prefix "oc-proc";


  // import some basic types
  import openconfig-extensions { prefix oc-ext; }
  import openconfig-types { prefix oc-types; }


  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This module provides data definitions for process health
    monitoring of one or more processes running on the system.";

  oc-ext:openconfig-version "0.2.0";

  revision "2017-07-06" {
    description
      "Move to oc-inet types, add IETF attribution, add RADIUS
      counters, changed password leaf names to indicate hashed";
    reference "0.2.0";
  }

  revision "2017-01-29" {
    description
      "Initial public release";
    reference "0.1.0";
  }


  // grouping statements

  grouping procmon-processes-top {
    description
      "Top level grouping for attributes for processes.";

    container processes {
      description
        "Parameters related to all monitored processes";

      list process {
        key "pid";
        config false;
        description
          "List of monitored processes";

        leaf pid {
          type leafref {
            path "../state/pid";
          }
          description
            "Reference to the process pid key";
        }

        container state {
          config false;
          description
            "State parameters related to monitored processes";

          uses procmon-process-attributes-state;
        }
      }
    }
  }

  grouping procmon-process-attributes-state {
    description
      "Attributes state definitions for a process";

    leaf pid {
      type uint64;
      description
        "The process pid";
    }

    leaf name {
      type string;
      description
        "The process name";
    }

    leaf-list args {
      type string;
      description
        "Current process command line arguments.  Arguments with
        a parameter (e.g., --option 10  or -option=10) should be
        represented as a single element of the list with the
        argument name and parameter together.  Flag arguments, i.e.,
        those without a parameter should also be in their own list
        element.";
    }

    leaf start-time {
      type uint64;
      units "ns";
      description
        "The time at which this process started,
        reported as nanoseconds since the UNIX epoch.  The
        system must be synchronized such that the start-time
        can be reported accurately, otherwise it should not be
        reported.";
     }

    leaf uptime {
      type oc-types:timeticks64;
      description
        "Amount of time elapsed since this process started.";
    }

    leaf cpu-usage-user {
      type oc-types:timeticks64;
      description
        "CPU time consumed by this process in user mode.";
    }

    leaf cpu-usage-system {
      type oc-types:timeticks64;
      description
        "CPU time consumed by this process in kernel mode.";
    }

    leaf cpu-utilization {
      type oc-types:percentage;
      description
        "The percentage of CPU that is being used by the process.";
    }

    leaf memory-usage {
      type uint64;
      units "bytes";
      description
        "Bytes allocated and still in use by the process";
    }

    leaf memory-utilization {
      type oc-types:percentage;
      description
        "The percentage of RAM that is being used by the process.";
    }
  }

  // augment statements

  // rpc statements

  // notification statements
}
