# coding: utf-8

"""
FlashCacheStatistics.py

 The Clear BSD License

 Copyright (c) – 2016, NetApp, Inc. All rights reserved.

 Redistribution and use in source and binary forms, with or without modification, are permitted (subject to the limitations in the disclaimer below) provided that the following conditions are met:

 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

 * Neither the name of NetApp, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

 NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""

from pprint import pformat
from six import iteritems


class FlashCacheStatistics(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        FlashCacheStatistics - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'timestamp': 'int',  # (required parameter)
            'reads': 'int',  # (required parameter)
            'read_blocks': 'int',  # (required parameter)
            'writes': 'int',  # (required parameter)
            'write_blocks': 'int',  # (required parameter)
            'full_cache_hits': 'int',  # (required parameter)
            'full_cache_hit_blocks': 'int',  # (required parameter)
            'partial_cache_hits': 'int',  # (required parameter)
            'partial_cache_hit_blocks': 'int',  # (required parameter)
            'complete_cache_miss': 'int',  # (required parameter)
            'complete_cache_miss_blocks': 'int',  # (required parameter)
            'populate_on_reads': 'int',  # (required parameter)
            'populate_on_read_blocks': 'int',  # (required parameter)
            'populate_on_writes': 'int',  # (required parameter)
            'populate_on_write_blocks': 'int',  # (required parameter)
            'invalidates': 'int',  # (required parameter)
            'recycles': 'int',  # (required parameter)
            'available_bytes': 'int',  # (required parameter)
            'allocated_bytes': 'int',  # (required parameter)
            'populated_clean_bytes': 'int',  # (required parameter)
            'populated_dirty_bytes': 'int'
        }

        self.attribute_map = {
            'timestamp': 'timestamp',  # (required parameter)
            'reads': 'reads',  # (required parameter)
            'read_blocks': 'readBlocks',  # (required parameter)
            'writes': 'writes',  # (required parameter)
            'write_blocks': 'writeBlocks',  # (required parameter)
            'full_cache_hits': 'fullCacheHits',  # (required parameter)
            'full_cache_hit_blocks': 'fullCacheHitBlocks',  # (required parameter)
            'partial_cache_hits': 'partialCacheHits',  # (required parameter)
            'partial_cache_hit_blocks': 'partialCacheHitBlocks',  # (required parameter)
            'complete_cache_miss': 'completeCacheMiss',  # (required parameter)
            'complete_cache_miss_blocks': 'completeCacheMissBlocks',  # (required parameter)
            'populate_on_reads': 'populateOnReads',  # (required parameter)
            'populate_on_read_blocks': 'populateOnReadBlocks',  # (required parameter)
            'populate_on_writes': 'populateOnWrites',  # (required parameter)
            'populate_on_write_blocks': 'populateOnWriteBlocks',  # (required parameter)
            'invalidates': 'invalidates',  # (required parameter)
            'recycles': 'recycles',  # (required parameter)
            'available_bytes': 'availableBytes',  # (required parameter)
            'allocated_bytes': 'allocatedBytes',  # (required parameter)
            'populated_clean_bytes': 'populatedCleanBytes',  # (required parameter)
            'populated_dirty_bytes': 'populatedDirtyBytes'
        }

        self._timestamp = None
        self._reads = None
        self._read_blocks = None
        self._writes = None
        self._write_blocks = None
        self._full_cache_hits = None
        self._full_cache_hit_blocks = None
        self._partial_cache_hits = None
        self._partial_cache_hit_blocks = None
        self._complete_cache_miss = None
        self._complete_cache_miss_blocks = None
        self._populate_on_reads = None
        self._populate_on_read_blocks = None
        self._populate_on_writes = None
        self._populate_on_write_blocks = None
        self._invalidates = None
        self._recycles = None
        self._available_bytes = None
        self._allocated_bytes = None
        self._populated_clean_bytes = None
        self._populated_dirty_bytes = None

    @property
    def timestamp(self):
        """
        Gets the timestamp of this FlashCacheStatistics.
        The time these statistics were recorded measured in seconds since midnight January 1, 1970.

        :return: The timestamp of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._timestamp

    @timestamp.setter
    def timestamp(self, timestamp):
        """
        Sets the timestamp of this FlashCacheStatistics.
        The time these statistics were recorded measured in seconds since midnight January 1, 1970.

        :param timestamp: The timestamp of this FlashCacheStatistics.
        :type: int
        """
        self._timestamp = timestamp

    @property
    def reads(self):
        """
        Gets the reads of this FlashCacheStatistics.
        The number of read operations.

        :return: The reads of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._reads

    @reads.setter
    def reads(self, reads):
        """
        Sets the reads of this FlashCacheStatistics.
        The number of read operations.

        :param reads: The reads of this FlashCacheStatistics.
        :type: int
        """
        self._reads = reads

    @property
    def read_blocks(self):
        """
        Gets the read_blocks of this FlashCacheStatistics.
        The number of block read operations.

        :return: The read_blocks of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._read_blocks

    @read_blocks.setter
    def read_blocks(self, read_blocks):
        """
        Sets the read_blocks of this FlashCacheStatistics.
        The number of block read operations.

        :param read_blocks: The read_blocks of this FlashCacheStatistics.
        :type: int
        """
        self._read_blocks = read_blocks

    @property
    def writes(self):
        """
        Gets the writes of this FlashCacheStatistics.
        The number of write operations.

        :return: The writes of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._writes

    @writes.setter
    def writes(self, writes):
        """
        Sets the writes of this FlashCacheStatistics.
        The number of write operations.

        :param writes: The writes of this FlashCacheStatistics.
        :type: int
        """
        self._writes = writes

    @property
    def write_blocks(self):
        """
        Gets the write_blocks of this FlashCacheStatistics.
        The number of block write operations.

        :return: The write_blocks of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._write_blocks

    @write_blocks.setter
    def write_blocks(self, write_blocks):
        """
        Sets the write_blocks of this FlashCacheStatistics.
        The number of block write operations.

        :param write_blocks: The write_blocks of this FlashCacheStatistics.
        :type: int
        """
        self._write_blocks = write_blocks

    @property
    def full_cache_hits(self):
        """
        Gets the full_cache_hits of this FlashCacheStatistics.
        The number of full cache hits.

        :return: The full_cache_hits of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._full_cache_hits

    @full_cache_hits.setter
    def full_cache_hits(self, full_cache_hits):
        """
        Sets the full_cache_hits of this FlashCacheStatistics.
        The number of full cache hits.

        :param full_cache_hits: The full_cache_hits of this FlashCacheStatistics.
        :type: int
        """
        self._full_cache_hits = full_cache_hits

    @property
    def full_cache_hit_blocks(self):
        """
        Gets the full_cache_hit_blocks of this FlashCacheStatistics.
        The number of full cache hit blocks.

        :return: The full_cache_hit_blocks of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._full_cache_hit_blocks

    @full_cache_hit_blocks.setter
    def full_cache_hit_blocks(self, full_cache_hit_blocks):
        """
        Sets the full_cache_hit_blocks of this FlashCacheStatistics.
        The number of full cache hit blocks.

        :param full_cache_hit_blocks: The full_cache_hit_blocks of this FlashCacheStatistics.
        :type: int
        """
        self._full_cache_hit_blocks = full_cache_hit_blocks

    @property
    def partial_cache_hits(self):
        """
        Gets the partial_cache_hits of this FlashCacheStatistics.
        The number of partial cache hits.

        :return: The partial_cache_hits of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._partial_cache_hits

    @partial_cache_hits.setter
    def partial_cache_hits(self, partial_cache_hits):
        """
        Sets the partial_cache_hits of this FlashCacheStatistics.
        The number of partial cache hits.

        :param partial_cache_hits: The partial_cache_hits of this FlashCacheStatistics.
        :type: int
        """
        self._partial_cache_hits = partial_cache_hits

    @property
    def partial_cache_hit_blocks(self):
        """
        Gets the partial_cache_hit_blocks of this FlashCacheStatistics.
        The number of partial cache hit blocks.

        :return: The partial_cache_hit_blocks of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._partial_cache_hit_blocks

    @partial_cache_hit_blocks.setter
    def partial_cache_hit_blocks(self, partial_cache_hit_blocks):
        """
        Sets the partial_cache_hit_blocks of this FlashCacheStatistics.
        The number of partial cache hit blocks.

        :param partial_cache_hit_blocks: The partial_cache_hit_blocks of this FlashCacheStatistics.
        :type: int
        """
        self._partial_cache_hit_blocks = partial_cache_hit_blocks

    @property
    def complete_cache_miss(self):
        """
        Gets the complete_cache_miss of this FlashCacheStatistics.
        The number of complete cache misses.

        :return: The complete_cache_miss of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._complete_cache_miss

    @complete_cache_miss.setter
    def complete_cache_miss(self, complete_cache_miss):
        """
        Sets the complete_cache_miss of this FlashCacheStatistics.
        The number of complete cache misses.

        :param complete_cache_miss: The complete_cache_miss of this FlashCacheStatistics.
        :type: int
        """
        self._complete_cache_miss = complete_cache_miss

    @property
    def complete_cache_miss_blocks(self):
        """
        Gets the complete_cache_miss_blocks of this FlashCacheStatistics.
        The number of complete cache miss blocks.

        :return: The complete_cache_miss_blocks of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._complete_cache_miss_blocks

    @complete_cache_miss_blocks.setter
    def complete_cache_miss_blocks(self, complete_cache_miss_blocks):
        """
        Sets the complete_cache_miss_blocks of this FlashCacheStatistics.
        The number of complete cache miss blocks.

        :param complete_cache_miss_blocks: The complete_cache_miss_blocks of this FlashCacheStatistics.
        :type: int
        """
        self._complete_cache_miss_blocks = complete_cache_miss_blocks

    @property
    def populate_on_reads(self):
        """
        Gets the populate_on_reads of this FlashCacheStatistics.
        The number of populate on reads.

        :return: The populate_on_reads of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._populate_on_reads

    @populate_on_reads.setter
    def populate_on_reads(self, populate_on_reads):
        """
        Sets the populate_on_reads of this FlashCacheStatistics.
        The number of populate on reads.

        :param populate_on_reads: The populate_on_reads of this FlashCacheStatistics.
        :type: int
        """
        self._populate_on_reads = populate_on_reads

    @property
    def populate_on_read_blocks(self):
        """
        Gets the populate_on_read_blocks of this FlashCacheStatistics.
        The number of populate on read blocks.

        :return: The populate_on_read_blocks of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._populate_on_read_blocks

    @populate_on_read_blocks.setter
    def populate_on_read_blocks(self, populate_on_read_blocks):
        """
        Sets the populate_on_read_blocks of this FlashCacheStatistics.
        The number of populate on read blocks.

        :param populate_on_read_blocks: The populate_on_read_blocks of this FlashCacheStatistics.
        :type: int
        """
        self._populate_on_read_blocks = populate_on_read_blocks

    @property
    def populate_on_writes(self):
        """
        Gets the populate_on_writes of this FlashCacheStatistics.
        The number of populate on writes.

        :return: The populate_on_writes of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._populate_on_writes

    @populate_on_writes.setter
    def populate_on_writes(self, populate_on_writes):
        """
        Sets the populate_on_writes of this FlashCacheStatistics.
        The number of populate on writes.

        :param populate_on_writes: The populate_on_writes of this FlashCacheStatistics.
        :type: int
        """
        self._populate_on_writes = populate_on_writes

    @property
    def populate_on_write_blocks(self):
        """
        Gets the populate_on_write_blocks of this FlashCacheStatistics.
        The number of populate on write blocks.

        :return: The populate_on_write_blocks of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._populate_on_write_blocks

    @populate_on_write_blocks.setter
    def populate_on_write_blocks(self, populate_on_write_blocks):
        """
        Sets the populate_on_write_blocks of this FlashCacheStatistics.
        The number of populate on write blocks.

        :param populate_on_write_blocks: The populate_on_write_blocks of this FlashCacheStatistics.
        :type: int
        """
        self._populate_on_write_blocks = populate_on_write_blocks

    @property
    def invalidates(self):
        """
        Gets the invalidates of this FlashCacheStatistics.
        The number of invalidates on host writes.

        :return: The invalidates of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._invalidates

    @invalidates.setter
    def invalidates(self, invalidates):
        """
        Sets the invalidates of this FlashCacheStatistics.
        The number of invalidates on host writes.

        :param invalidates: The invalidates of this FlashCacheStatistics.
        :type: int
        """
        self._invalidates = invalidates

    @property
    def recycles(self):
        """
        Gets the recycles of this FlashCacheStatistics.
        The number of times data is removed from the LRU.

        :return: The recycles of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._recycles

    @recycles.setter
    def recycles(self, recycles):
        """
        Sets the recycles of this FlashCacheStatistics.
        The number of times data is removed from the LRU.

        :param recycles: The recycles of this FlashCacheStatistics.
        :type: int
        """
        self._recycles = recycles

    @property
    def available_bytes(self):
        """
        Gets the available_bytes of this FlashCacheStatistics.
        The number of available bytes.

        :return: The available_bytes of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._available_bytes

    @available_bytes.setter
    def available_bytes(self, available_bytes):
        """
        Sets the available_bytes of this FlashCacheStatistics.
        The number of available bytes.

        :param available_bytes: The available_bytes of this FlashCacheStatistics.
        :type: int
        """
        self._available_bytes = available_bytes

    @property
    def allocated_bytes(self):
        """
        Gets the allocated_bytes of this FlashCacheStatistics.
        The number of allocated bytes.

        :return: The allocated_bytes of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._allocated_bytes

    @allocated_bytes.setter
    def allocated_bytes(self, allocated_bytes):
        """
        Sets the allocated_bytes of this FlashCacheStatistics.
        The number of allocated bytes.

        :param allocated_bytes: The allocated_bytes of this FlashCacheStatistics.
        :type: int
        """
        self._allocated_bytes = allocated_bytes

    @property
    def populated_clean_bytes(self):
        """
        Gets the populated_clean_bytes of this FlashCacheStatistics.
        The number of populated clean bytes.

        :return: The populated_clean_bytes of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._populated_clean_bytes

    @populated_clean_bytes.setter
    def populated_clean_bytes(self, populated_clean_bytes):
        """
        Sets the populated_clean_bytes of this FlashCacheStatistics.
        The number of populated clean bytes.

        :param populated_clean_bytes: The populated_clean_bytes of this FlashCacheStatistics.
        :type: int
        """
        self._populated_clean_bytes = populated_clean_bytes

    @property
    def populated_dirty_bytes(self):
        """
        Gets the populated_dirty_bytes of this FlashCacheStatistics.
        The number of populated dirty bytes.

        :return: The populated_dirty_bytes of this FlashCacheStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._populated_dirty_bytes

    @populated_dirty_bytes.setter
    def populated_dirty_bytes(self, populated_dirty_bytes):
        """
        Sets the populated_dirty_bytes of this FlashCacheStatistics.
        The number of populated dirty bytes.

        :param populated_dirty_bytes: The populated_dirty_bytes of this FlashCacheStatistics.
        :type: int
        """
        self._populated_dirty_bytes = populated_dirty_bytes

    def to_dict(self):
        """
        Returns the model properties as a dict
        """
        result = {}

        for attr, _ in iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """
        Returns the string representation of the model
        """
        return pformat(self.to_dict())

    def __repr__(self):
        """
        For `print` and `pprint`
        """
        if self is None:
           return None
        return self.to_str()

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        if self is None or other is None:
            return None
        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other

