# Source: registrar/Meter.js

    (function(window)
    {
        var Gitana = window.Gitana;

        Gitana.Meter = Gitana.AbstractRegistrarObject.extend(
        /** @lends Gitana.Meter.prototype */
        {
            /**
             * @constructs
             * @augments Gitana.AbstractRegistrarObject
             *
             * @class Meter
             *
             * @param {Gitana.Registrar} registrar
             * @param [Object] object json object (if no callback required for populating)
             */
            constructor: function(registrar, object)
            {
                this.base(registrar, object);

                this.objectType = function() { return "Gitana.Meter"; };
            },

            /**
             * @OVERRIDE
             */
            getType: function()
            {
                return Gitana.TypedIDConstants.TYPE_PLAN;
            },

            /**
             * @OVERRIDE
             */
            getUri: function()
            {
                return "/registrars/" + this.getRegistrarId() + "/meters/" + this.getId();
            },

            /**
             * @override
             */
            clone: function()
            {
                return this.getFactory().meter(this.getRegistrar(), this);
            }

        });

        // constants

        // tenant information
        Gitana.Meter.FIELD_TENANT_ID = "tenantId";

        // meter data
        Gitana.Meter.FIELD_METER_TYPE = "meterType";
        Gitana.Meter.FIELD_METER_START = "meterStart"; // timestamp
        Gitana.Meter.FIELD_METER_END = "meterEnd"; // timestamp

        // bytes
        Gitana.Meter.FIELD_MAX_BYTE_COUNT = "maxByteCount";
        Gitana.Meter.FIELD_RAW_BYTE_COUNT = "rawByteCount"; // raw count (all bytes counter)
        Gitana.Meter.FIELD_RAW_BYTE_COUNT_PERCENTAGE = "rawByteCountPercentage";
        Gitana.Meter.FIELD_UNPROCESSED_BYTE_COUNT = "unprocessedByteCount"; // waiting to be processed
        Gitana.Meter.FIELD_BILLABLE_BYTE_COUNT = "billableByteCount";
        Gitana.Meter.FIELD_BILLABLE_BYTE_COUNT_PERCENTAGE = "billableByteCountPercentage";

        // objects
        Gitana.Meter.FIELD_MAX_OBJECT_COUNT = "maxObjectCount";
        Gitana.Meter.FIELD_RAW_OBJECT_COUNT = "rawObjectCount"; // raw count (all objects counter)
        Gitana.Meter.FIELD_RAW_OBJECT_COUNT_PERCENTAGE = "rawObjectCountPercentage";
        Gitana.Meter.FIELD_UNPROCESSED_OBJECT_COUNT = "unprocessedObjectCount";
        Gitana.Meter.FIELD_BILLABLE_OBJECT_COUNT = "billableObjectCount";
        Gitana.Meter.FIELD_BILLABLE_OBJECT_COUNT_PERCENTAGE = "billableObjectCountPercentage";

    })(window);