# coding: utf-8

"""
AnalysedControllerStatistics.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 AnalysedControllerStatistics(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        AnalysedControllerStatistics - 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 = {
            'observed_time': 'datetime',  # (required parameter)
            'observed_time_in_ms': 'int',  # (required parameter)
            'read_i_ops': 'float',  # (required parameter)
            'write_i_ops': 'float',  # (required parameter)
            'other_i_ops': 'float',  # (required parameter)
            'combined_i_ops': 'float',  # (required parameter)
            'read_throughput': 'float',  # (required parameter)
            'write_throughput': 'float',  # (required parameter)
            'combined_throughput': 'float',  # (required parameter)
            'read_response_time': 'float',  # (required parameter)
            'write_response_time': 'float',  # (required parameter)
            'combined_response_time': 'float',  # (required parameter)
            'average_read_op_size': 'float',  # (required parameter)
            'average_write_op_size': 'float',  # (required parameter)
            'read_ops': 'float',  # (required parameter)
            'write_ops': 'float',  # (required parameter)
            'read_physical_i_ops': 'float',  # (required parameter)
            'write_physical_i_ops': 'float',  # (required parameter)
            'controller_id': 'str'
        }

        self.attribute_map = {
            'observed_time': 'observedTime',  # (required parameter)
            'observed_time_in_ms': 'observedTimeInMS',  # (required parameter)
            'read_i_ops': 'readIOps',  # (required parameter)
            'write_i_ops': 'writeIOps',  # (required parameter)
            'other_i_ops': 'otherIOps',  # (required parameter)
            'combined_i_ops': 'combinedIOps',  # (required parameter)
            'read_throughput': 'readThroughput',  # (required parameter)
            'write_throughput': 'writeThroughput',  # (required parameter)
            'combined_throughput': 'combinedThroughput',  # (required parameter)
            'read_response_time': 'readResponseTime',  # (required parameter)
            'write_response_time': 'writeResponseTime',  # (required parameter)
            'combined_response_time': 'combinedResponseTime',  # (required parameter)
            'average_read_op_size': 'averageReadOpSize',  # (required parameter)
            'average_write_op_size': 'averageWriteOpSize',  # (required parameter)
            'read_ops': 'readOps',  # (required parameter)
            'write_ops': 'writeOps',  # (required parameter)
            'read_physical_i_ops': 'readPhysicalIOps',  # (required parameter)
            'write_physical_i_ops': 'writePhysicalIOps',  # (required parameter)
            'controller_id': 'controllerId'
        }

        self._observed_time = None
        self._observed_time_in_ms = None
        self._read_i_ops = None
        self._write_i_ops = None
        self._other_i_ops = None
        self._combined_i_ops = None
        self._read_throughput = None
        self._write_throughput = None
        self._combined_throughput = None
        self._read_response_time = None
        self._write_response_time = None
        self._combined_response_time = None
        self._average_read_op_size = None
        self._average_write_op_size = None
        self._read_ops = None
        self._write_ops = None
        self._read_physical_i_ops = None
        self._write_physical_i_ops = None
        self._controller_id = None

    @property
    def observed_time(self):
        """
        Gets the observed_time of this AnalysedControllerStatistics.


        :return: The observed_time of this AnalysedControllerStatistics.
        :rtype: datetime
        :required/optional: required
        """
        return self._observed_time

    @observed_time.setter
    def observed_time(self, observed_time):
        """
        Sets the observed_time of this AnalysedControllerStatistics.


        :param observed_time: The observed_time of this AnalysedControllerStatistics.
        :type: datetime
        """
        self._observed_time = observed_time

    @property
    def observed_time_in_ms(self):
        """
        Gets the observed_time_in_ms of this AnalysedControllerStatistics.


        :return: The observed_time_in_ms of this AnalysedControllerStatistics.
        :rtype: int
        :required/optional: required
        """
        return self._observed_time_in_ms

    @observed_time_in_ms.setter
    def observed_time_in_ms(self, observed_time_in_ms):
        """
        Sets the observed_time_in_ms of this AnalysedControllerStatistics.


        :param observed_time_in_ms: The observed_time_in_ms of this AnalysedControllerStatistics.
        :type: int
        """
        self._observed_time_in_ms = observed_time_in_ms

    @property
    def read_i_ops(self):
        """
        Gets the read_i_ops of this AnalysedControllerStatistics.
        read_iops double NOT NULL

        :return: The read_i_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._read_i_ops

    @read_i_ops.setter
    def read_i_ops(self, read_i_ops):
        """
        Sets the read_i_ops of this AnalysedControllerStatistics.
        read_iops double NOT NULL

        :param read_i_ops: The read_i_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._read_i_ops = read_i_ops

    @property
    def write_i_ops(self):
        """
        Gets the write_i_ops of this AnalysedControllerStatistics.
        write_iops double NOT NULL

        :return: The write_i_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._write_i_ops

    @write_i_ops.setter
    def write_i_ops(self, write_i_ops):
        """
        Sets the write_i_ops of this AnalysedControllerStatistics.
        write_iops double NOT NULL

        :param write_i_ops: The write_i_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._write_i_ops = write_i_ops

    @property
    def other_i_ops(self):
        """
        Gets the other_i_ops of this AnalysedControllerStatistics.
        other_iops double NOT NULL

        :return: The other_i_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._other_i_ops

    @other_i_ops.setter
    def other_i_ops(self, other_i_ops):
        """
        Sets the other_i_ops of this AnalysedControllerStatistics.
        other_iops double NOT NULL

        :param other_i_ops: The other_i_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._other_i_ops = other_i_ops

    @property
    def combined_i_ops(self):
        """
        Gets the combined_i_ops of this AnalysedControllerStatistics.
        combined_iops double NOT NULL

        :return: The combined_i_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._combined_i_ops

    @combined_i_ops.setter
    def combined_i_ops(self, combined_i_ops):
        """
        Sets the combined_i_ops of this AnalysedControllerStatistics.
        combined_iops double NOT NULL

        :param combined_i_ops: The combined_i_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._combined_i_ops = combined_i_ops

    @property
    def read_throughput(self):
        """
        Gets the read_throughput of this AnalysedControllerStatistics.
        read_throughput double NOT NULL

        :return: The read_throughput of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._read_throughput

    @read_throughput.setter
    def read_throughput(self, read_throughput):
        """
        Sets the read_throughput of this AnalysedControllerStatistics.
        read_throughput double NOT NULL

        :param read_throughput: The read_throughput of this AnalysedControllerStatistics.
        :type: float
        """
        self._read_throughput = read_throughput

    @property
    def write_throughput(self):
        """
        Gets the write_throughput of this AnalysedControllerStatistics.
        write_throughput double NOT NULL

        :return: The write_throughput of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._write_throughput

    @write_throughput.setter
    def write_throughput(self, write_throughput):
        """
        Sets the write_throughput of this AnalysedControllerStatistics.
        write_throughput double NOT NULL

        :param write_throughput: The write_throughput of this AnalysedControllerStatistics.
        :type: float
        """
        self._write_throughput = write_throughput

    @property
    def combined_throughput(self):
        """
        Gets the combined_throughput of this AnalysedControllerStatistics.
        combined_throughput double NOT NULL

        :return: The combined_throughput of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._combined_throughput

    @combined_throughput.setter
    def combined_throughput(self, combined_throughput):
        """
        Sets the combined_throughput of this AnalysedControllerStatistics.
        combined_throughput double NOT NULL

        :param combined_throughput: The combined_throughput of this AnalysedControllerStatistics.
        :type: float
        """
        self._combined_throughput = combined_throughput

    @property
    def read_response_time(self):
        """
        Gets the read_response_time of this AnalysedControllerStatistics.
        read_response_time double NOT NULL

        :return: The read_response_time of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._read_response_time

    @read_response_time.setter
    def read_response_time(self, read_response_time):
        """
        Sets the read_response_time of this AnalysedControllerStatistics.
        read_response_time double NOT NULL

        :param read_response_time: The read_response_time of this AnalysedControllerStatistics.
        :type: float
        """
        self._read_response_time = read_response_time

    @property
    def write_response_time(self):
        """
        Gets the write_response_time of this AnalysedControllerStatistics.
        write_response_time double NOT NULL

        :return: The write_response_time of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._write_response_time

    @write_response_time.setter
    def write_response_time(self, write_response_time):
        """
        Sets the write_response_time of this AnalysedControllerStatistics.
        write_response_time double NOT NULL

        :param write_response_time: The write_response_time of this AnalysedControllerStatistics.
        :type: float
        """
        self._write_response_time = write_response_time

    @property
    def combined_response_time(self):
        """
        Gets the combined_response_time of this AnalysedControllerStatistics.
        combined_response_time double NOT NULL

        :return: The combined_response_time of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._combined_response_time

    @combined_response_time.setter
    def combined_response_time(self, combined_response_time):
        """
        Sets the combined_response_time of this AnalysedControllerStatistics.
        combined_response_time double NOT NULL

        :param combined_response_time: The combined_response_time of this AnalysedControllerStatistics.
        :type: float
        """
        self._combined_response_time = combined_response_time

    @property
    def average_read_op_size(self):
        """
        Gets the average_read_op_size of this AnalysedControllerStatistics.


        :return: The average_read_op_size of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._average_read_op_size

    @average_read_op_size.setter
    def average_read_op_size(self, average_read_op_size):
        """
        Sets the average_read_op_size of this AnalysedControllerStatistics.


        :param average_read_op_size: The average_read_op_size of this AnalysedControllerStatistics.
        :type: float
        """
        self._average_read_op_size = average_read_op_size

    @property
    def average_write_op_size(self):
        """
        Gets the average_write_op_size of this AnalysedControllerStatistics.


        :return: The average_write_op_size of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._average_write_op_size

    @average_write_op_size.setter
    def average_write_op_size(self, average_write_op_size):
        """
        Sets the average_write_op_size of this AnalysedControllerStatistics.


        :param average_write_op_size: The average_write_op_size of this AnalysedControllerStatistics.
        :type: float
        """
        self._average_write_op_size = average_write_op_size

    @property
    def read_ops(self):
        """
        Gets the read_ops of this AnalysedControllerStatistics.


        :return: The read_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._read_ops

    @read_ops.setter
    def read_ops(self, read_ops):
        """
        Sets the read_ops of this AnalysedControllerStatistics.


        :param read_ops: The read_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._read_ops = read_ops

    @property
    def write_ops(self):
        """
        Gets the write_ops of this AnalysedControllerStatistics.


        :return: The write_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._write_ops

    @write_ops.setter
    def write_ops(self, write_ops):
        """
        Sets the write_ops of this AnalysedControllerStatistics.


        :param write_ops: The write_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._write_ops = write_ops

    @property
    def read_physical_i_ops(self):
        """
        Gets the read_physical_i_ops of this AnalysedControllerStatistics.
        read_physical_iops double NOT NULL

        :return: The read_physical_i_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._read_physical_i_ops

    @read_physical_i_ops.setter
    def read_physical_i_ops(self, read_physical_i_ops):
        """
        Sets the read_physical_i_ops of this AnalysedControllerStatistics.
        read_physical_iops double NOT NULL

        :param read_physical_i_ops: The read_physical_i_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._read_physical_i_ops = read_physical_i_ops

    @property
    def write_physical_i_ops(self):
        """
        Gets the write_physical_i_ops of this AnalysedControllerStatistics.
        write_physical_iops double NOT NULL

        :return: The write_physical_i_ops of this AnalysedControllerStatistics.
        :rtype: float
        :required/optional: required
        """
        return self._write_physical_i_ops

    @write_physical_i_ops.setter
    def write_physical_i_ops(self, write_physical_i_ops):
        """
        Sets the write_physical_i_ops of this AnalysedControllerStatistics.
        write_physical_iops double NOT NULL

        :param write_physical_i_ops: The write_physical_i_ops of this AnalysedControllerStatistics.
        :type: float
        """
        self._write_physical_i_ops = write_physical_i_ops

    @property
    def controller_id(self):
        """
        Gets the controller_id of this AnalysedControllerStatistics.


        :return: The controller_id of this AnalysedControllerStatistics.
        :rtype: str
        :required/optional: required
        """
        return self._controller_id

    @controller_id.setter
    def controller_id(self, controller_id):
        """
        Sets the controller_id of this AnalysedControllerStatistics.


        :param controller_id: The controller_id of this AnalysedControllerStatistics.
        :type: str
        """
        self._controller_id = controller_id

    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

