module ietf-restconf-monitoring {
  namespace "urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring";
  prefix "rcmon";

  import ietf-yang-types { prefix yang; }
  import ietf-inet-types { prefix inet; }

  organization
    "IETF NETCONF (Network Configuration) Working Group";

  contact
    "WG Web:   <https://datatracker.ietf.org/wg/netconf/>
     WG List:  <mailto:netconf@ietf.org>

     Author:   Andy Bierman
               <mailto:andy@yumaworks.com>

     Author:   Martin Bjorklund
               <mailto:mbj@tail-f.com>

     Author:   Kent Watsen
               <mailto:kwatsen@juniper.net>";

  description
    "This module contains monitoring information for the
     RESTCONF protocol.

     Copyright (c) 2017 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Simplified BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC 8040; see
     the RFC itself for full legal notices.";

  revision 2017-01-26 {
    description
      "Initial revision.";
    reference
      "RFC 8040: RESTCONF Protocol.";
  }

  container restconf-state {
    config false;
    description
      "Contains RESTCONF protocol monitoring information.";

    container capabilities {
      description
        "Contains a list of protocol capability URIs.";

      leaf-list capability {
        type inet:uri;
        description
          "A RESTCONF protocol capability URI.";
      }
    }

    container streams {
      description
        "Container representing the notification event streams
         supported by the server.";
       reference
         "RFC 5277, Section 3.4, <streams> element.";

      list stream {
        key name;
        description
          "Each entry describes an event stream supported by
           the server.";

        leaf name {
          type string;
          description
            "The stream name.";
          reference
            "RFC 5277, Section 3.4, <name> element.";
        }

        leaf description {
          type string;
          description
            "Description of stream content.";
          reference
            "RFC 5277, Section 3.4, <description> element.";
        }

        leaf replay-support {
          type boolean;
          default false;
          description
            "Indicates if replay buffer is supported for this stream.
             If 'true', then the server MUST support the 'start-time'
             and 'stop-time' query parameters for this stream.";
          reference
            "RFC 5277, Section 3.4, <replaySupport> element.";
        }

        leaf replay-log-creation-time {
          when "../replay-support" {
            description
              "Only present if notification replay is supported.";
          }
          type yang:date-and-time;
          description
            "Indicates the time the replay log for this stream
             was created.";
          reference
            "RFC 5277, Section 3.4, <replayLogCreationTime>
             element.";
        }

        list access {
          key encoding;
          min-elements 1;
          description
            "The server will create an entry in this list for each
             encoding format that is supported for this stream.
             The media type 'text/event-stream' is expected
             for all event streams.  This list identifies the
             subtypes supported for this stream.";

          leaf encoding {
            type string;
            description
              "This is the secondary encoding format within the
               'text/event-stream' encoding used by all streams.
               The type 'xml' is supported for XML encoding.
               The type 'json' is supported for JSON encoding.";
          }

          leaf location {
            type inet:uri;
            mandatory true;
            description
              "Contains a URL that represents the entry point
               for establishing notification delivery via
               server-sent events.";
          }
        }
      }
    }
  }

}
