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.";
		    }
		}
	    }
	}
    }
}
