module opendaylight-meter-statistics {
    namespace "urn:opendaylight:meter:statistics";
    prefix meterstat;

    import yang-ext {prefix ext; revision-date "2013-07-09";}
    import opendaylight-inventory {prefix inv;revision-date "2013-08-19";}
    import flow-node-inventory {prefix flow-node;revision-date "2013-08-19";}
    import opendaylight-meter-types {prefix meter-types; revision-date "2013-09-18";}
    import flow-capable-transaction {prefix tr; revision-date "2015-03-04";}
    import opendaylight-multipart-types { prefix multipart; revision-date "2017-01-12"; }

    description "Openflowplugin meter statistics structures.";

    contact
        "Anilkumar Vishnoi
        Email: avishnoi@in.ibm.com";

    revision "2013-11-11" {
        description "Initial revision of meter statistics service";
    }

    augment "/inv:nodes/inv:node/flow-node:meter" {
        description "Openflow meter statistics data into the meter node.";
        ext:augment-identifier "node-meter-statistics";
        container meter-statistics {
            uses meter-types:meter-statistics;
        }
    }

    augment "/inv:nodes/inv:node/flow-node:meter" {
        description "Openflow meter config statistics data into the meter node.";
        ext:augment-identifier "node-meter-config-stats";
        container meter-config-stats {
            uses meter-types:meter;
        }
    }

    augment "/inv:nodes/inv:node" {
        description "Openflow meter features data into the inventory node node.";
        ext:augment-identifier "node-meter-features";
        container meter-features {
            uses meter-types:meter-features-reply;
        }
    }

    // RPC calls
    rpc get-all-meter-statistics {
        status deprecated;

        input {
            uses inv:node-context-ref;
        }
        output {
            uses meter-types:meter-statistics-reply;
            uses tr:transaction-aware;
        }

    }

    rpc get-meter-statistics {
        status deprecated;

        input {
            uses inv:node-context-ref;
            leaf meter-id{
                type meter-types:meter-id;
            }
        }
        output {
            uses meter-types:meter-statistics-reply;
            uses tr:transaction-aware;
        }

    }

    rpc get-all-meter-config-statistics {
        status deprecated;

        input {
            uses inv:node-context-ref;
        }
        output {
               uses meter-types:meter-config-stats-reply;
            uses tr:transaction-aware;
        }
    }

    rpc get-meter-features {
        status deprecated;

        input {
            uses inv:node-context-ref;
        }
        output {
            uses meter-types:meter-features-reply;
            uses tr:transaction-aware;
        }
    }


    //Notification calls

    notification meter-statistics-updated {
        status deprecated;

        uses inv:node;
        uses meter-types:meter-statistics-reply;
        uses tr:multipart-transaction-aware;
    }

    notification meter-config-stats-updated {
        status deprecated;

        uses inv:node;
        uses meter-types:meter-config-stats-reply;
        uses tr:multipart-transaction-aware;
    }

    notification meter-features-updated {
        status deprecated;

        uses inv:node;
        uses meter-types:meter-features-reply;
        uses tr:multipart-transaction-aware;
    }

    augment "/multipart:multipart-reply/multipart:multipart-reply-body" {
        case multipart-reply-meter-stats {
            uses meter-types:meter-statistics-reply;
        }

        case multipart-reply-meter-config {
            uses meter-types:meter-config-stats-reply;
        }

        case multipart-reply-meter-features {
            uses meter-types:meter-features-reply;
        }
    }

    augment "/multipart:multipart-request/multipart:multipart-request-body" {
        case multipart-request-meter-config {
            leaf meter-id {
                type meter-types:meter-id;
            }
        }
        case multipart-request-meter-features {
            // Empty request case
        }
        case multipart-request-meter-stats {
            leaf stat-meter-id {
                type meter-types:meter-id;
            }
        }
    }
}