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:   <http://tools.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 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 'application/yang.stream' is expected
             for all event streams. This list identifies the
             sub-types 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.";
          }
        }
      }
    }
  }

}
