module yuma123-system {

    namespace "http://yuma123.org/ns/yuma123-system";

    prefix "yuma123-sys";

    import ietf-system { prefix sys; }

    import ietf-inet-types { prefix inet; }

    import ietf-yang-types { prefix yang; }

    import ietf-netconf { prefix nc; }

    import notifications { prefix notif; }

    import yuma-app-common { prefix yumaapp; }

    import yuma-types { prefix nt; }

    import yuma123-netconf-types { prefix nct; }

    import yuma-ncx { prefix ncx; }

    import ietf-netconf-acm { prefix nacm; }

    organization  "yuma123";

    contact "Vladimir Vassilev <vladimir@transpacket.com>.";

    description 
      "NETCONF Basic System Group.";

    revision 2017-03-26 {
        description 
          "Original netconfcentral yuma-system top level /system is moved.
           Now augment container /ietf-system:system-state/yuma-system:yuma.
           Notifications replaced with corresponding ietf-netconf-notifications
           removed.";
    }

    revision 2012-10-05 {
        description  
          "Updated EditOperationType to edit-operation-type.
           Converged nacm extension usage.";
    }

    revision 2012-01-15 {
        description  
          "Add sysNetconfServerCLI monitoring data.";
    }

    revision 2010-05-24 {
        description  
          "Change SessionId to standard session-id-type.";
    }

    revision 2009-12-27 {
        description  
          "Initial version.";
    }

    grouping SysCommonSessionParms {
       leaf userName {
          description
             "Name of the user for the session.";
          type string;
       }

       leaf sessionId {
          description
             "Identifier of the session.";
          type nc:session-id-type;
          mandatory true;
       }

       leaf remoteHost {
          description
             "Address of the remote host for the session.";
          type inet:ip-address;
       }
    }

augment "/sys:system-state" {
    container yuma {
        description
          "Basic objects for NETCONF system status.";

        config false;

        leaf sysName {
            description
              "The system name.";
            type string;
            reference "RFC 3418, sysName object";
        }

        leaf sysCurrentDateTime {
            description
              "The current system date and time.";
            type yang:date-and-time;
        }

        leaf sysBootDateTime {
            description
              "The system date and time when the system 
               last restarted.";
            type yang:date-and-time;
        }

        leaf sysLogLevel {
            description
              "The current system logging verbosity level.";
            type nt:NcDebugType;
        }

        leaf sysNetconfServerId {
            description
              "The name and version ID for the NETCONF server
               running on this system.";
            type string;
        }

        anyxml sysNetconfServerCLI {
            nacm:default-deny-all;
            description
              "The boot-time CLI and configuration parameters that
               were used by the server running on this system.
               The format is the 'netconfd' container, defined in
               netconfd.yang.  By default, only client-set
               parameters are shown.  Use with-defaults=report-all
               to see all CLI parameter values in effect.";
        }

        container uname {
          description
            "Contains the broken out fields from the 
             output of the 'uname' command on this machine.";

          leaf sysname {
            description
              "The name of the operating system in use.";
            type string;
          }

          leaf release {
            description
              "The current release level of the operating 
                system in use.";
            type string;
          }

          leaf version {
            description
              "The current version level of the operating 
                system in use.";
            type string;
          }

          leaf machine {
            description
              "A description of the hardware in use.";
            type string;
          }

          leaf nodename {
            description
              "The host name of this system, as reported by
               the uname command.";
            type string;
          }

        }
    }
}
    rpc set-log-level {
        nacm:default-deny-all;

        description
            "Sets the server log verbosity level";
        input {
            ncx:default-parm log-level;

            leaf log-level {
                description
                 "The desired verbosity level for system logging
                  messages generated by the server.
                  The current value can be obtained by retrieving
                  the /system-state/yuma-system/sysLogLevel object.";
                type nt:NcDebugType;
                mandatory true;
            }
        }
    }
    notification sysStartup {
       description
          "Generated when the system restarts.
           Used for logging purposes, since no
           sessions are actually active when
           the system restarts.";

       leaf startupSource {
          description
             "The filespec used to load the running configuration.
              This leaf will only be present if there was a startup
              configuration file used.";
          type string;
       }

       list bootError {
          description
             "There will be one entry for each <rpc-error>
              encountered during the load config operation.
              The <rpc-error> fields are used directly.
              There is no particular order, so no key is defined.";

          uses nct:RpcErrorType;
       }
    }

    augment /notif:notification {
        leaf sequence-id {
            description
              "Global auto-increment sequence ID added to
               each notification element sent by netconfd";
            type uint32;
        }
    }

    rpc load {
      nacm:default-deny-all;
      description 
        "Load a module into the server, if it is not already loaded.
         Returns the module revision date (or today's date if none),
         of the module that was loaded, or an error if not found
         or the module found had errors and was not loaded
         successfully.  If the module is already loaded, then the
         revision date will simply be returned.";

      input {
        ncx:default-parm module;
        leaf module {
          description "Name of the module to load.";
          mandatory true;
          type nt:NcxName;
        }
        leaf revision {
          description
             "Module revision to load.";
          type nt:Date;
        }
        uses yumaapp:DeviationParm;
      }

      output {
        leaf mod-revision {
          description  
            "Revision date of the module in use by the server.
             Will only be present if the module has a version";
          type nt:Date;
        }
      }

    }

    rpc restart {
      description 
        "Restart the server. Does not reload the software image..";
        nacm:default-deny-all;
    }

    rpc shutdown {
      description 
        "Shutdown the server.";
      nacm:default-deny-all;
    }

    rpc no-op {
      description 
        "Just returns 'ok'. Used for debugging
         or relative performance measurements.";
    }

}
