text: #
  # Copyright (c) 2021 Citrix Systems, Inc.
  #
  #   Licensed under the Apache License, Version 2.0 (the "License")
  #   you may not use this file except in compliance with the License.
  #   You may obtain a copy of the License at
  #
  #       http://www.apache.org/licenses/LICENSE-2.0
  #
  #  Unless required by applicable law or agreed to in writing, software
  #   distributed under the License is distributed on an "AS IS" BASIS,
  #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  #   See the License for the specific language governing permissions and
  #   limitations under the License.
  #
  
  from nssrc.com.citrix.netscaler.nitro.resource.base.base_resource import base_resource
  from nssrc.com.citrix.netscaler.nitro.resource.base.base_resource import base_response
  from nssrc.com.citrix.netscaler.nitro.service.options import options
  from nssrc.com.citrix.netscaler.nitro.exception.nitro_exception import nitro_exception
  
  from nssrc.com.citrix.netscaler.nitro.util.nitro_util import nitro_util
  
  class gslbservice_stats(base_resource) :
  	r""" Statistics for GSLB service resource.
  	"""
  	def __init__(self) :
  		self._servicename = None
  		self._clearstats = None
  		self._establishedconn = 0
  		self._primaryipaddress = ""
  		self._primaryport = 0
  		self._servicetype = ""
  		self._state = ""
  		self._totalrequestbytes = 0
  		self._requestbytesrate = 0
  		self._totalresponsebytes = 0
  		self._responsebytesrate = 0
  		self._curload = 0
  		self._totalrequests = 0
  		self._requestsrate = 0
  		self._totalresponses = 0
  		self._responsesrate = 0
  		self._curclntconnections = 0
  		self._cursrvrconnections = 0
  		self._vsvrservicehits = 0
  		self._vsvrservicehitsrate = 0
  
  	@property
  	def servicename(self) :
  		r"""Name of the GSLB service.<br/>Minimum length =  1.
  		"""
  		try :
  			return self._servicename
  		except Exception as e:
  			raise e
  
  	@servicename.setter
  	def servicename(self, servicename) :
  		r"""Name of the GSLB service.
  		"""
  		try :
  			self._servicename = servicename
  		except Exception as e:
  			raise e
  
  	@property
  	def clearstats(self) :
  		r"""Clear the statsistics / counters.<br/>Possible values = basic, full.
  		"""
  		try :
  			return self._clearstats
  		except Exception as e:
  			raise e
  
  	@clearstats.setter
  	def clearstats(self, clearstats) :
  		r"""Clear the statsistics / counters
  		"""
  		try :
  			self._clearstats = clearstats
  		except Exception as e:
  			raise e
  
  	@property
  	def curclntconnections(self) :
  		r"""Number of current client connections.
  		"""
  		try :
  			return self._curclntconnections
  		except Exception as e:
  			raise e
  
  	@property
  	def servicetype(self) :
  		r"""The service type of this service.Possible values are ADNS, DNS, MYSQL, RTSP, SSL_DIAMETER, ADNS_TCP, DNS_TCP, NNTP, SIP_UDP, SSL_TCP, ANY, FTP, RADIUS, SNMP, TCP, DHCPRA, HTTP, RDP, SSL, TFTP, DIAMETER, MSSQL, RPCSVR, SSL_BRIDGE, UDP.
  		"""
  		try :
  			return self._servicetype
  		except Exception as e:
  			raise e
  
  	@property
  	def establishedconn(self) :
  		r"""Number of client connections in ESTABLISHED state.
  		"""
  		try :
  			return self._establishedconn
  		except Exception as e:
  			raise e
  
  	@property
  	def totalrequests(self) :
  		r"""Total number of requests received on this service or virtual server. (This applies to HTTP/SSL services and servers.).
  		"""
  		try :
  			return self._totalrequests
  		except Exception as e:
  			raise e
  
  	@property
  	def responsebytesrate(self) :
  		r"""Rate (/s) counter for totalresponsebytes.
  		"""
  		try :
  			return self._responsebytesrate
  		except Exception as e:
  			raise e
  
  	@property
  	def totalresponses(self) :
  		r"""Number of responses received on this service or virtual server. (This applies to HTTP/SSL services and servers.).
  		"""
  		try :
  			return self._totalresponses
  		except Exception as e:
  			raise e
  
  	@property
  	def requestbytesrate(self) :
  		r"""Rate (/s) counter for totalrequestbytes.
  		"""
  		try :
  			return self._requestbytesrate
  		except Exception as e:
  			raise e
  
  	@property
  	def cursrvrconnections(self) :
  		r"""Number of current connections to the actual servers behind the virtual server.
  		"""
  		try :
  			return self._cursrvrconnections
  		except Exception as e:
  			raise e
  
  	@property
  	def primaryipaddress(self) :
  		r"""The IP address on which the service is running.
  		"""
  		try :
  			return self._primaryipaddress
  		except Exception as e:
  			raise e
  
  	@property
  	def responsesrate(self) :
  		r"""Rate (/s) counter for totalresponses.
  		"""
  		try :
  			return self._responsesrate
  		except Exception as e:
  			raise e
  
  	@property
  	def curload(self) :
  		r"""Load on the service that is calculated from the bound load based monitor.
  		"""
  		try :
  			return self._curload
  		except Exception as e:
  			raise e
  
  	@property
  	def totalrequestbytes(self) :
  		r"""Total number of request bytes received on this service or virtual server.
  		"""
  		try :
  			return self._totalrequestbytes
  		except Exception as e:
  			raise e
  
  	@property
  	def state(self) :
  		r"""Current state of the server. There are seven possible values: UP(7), DOWN(1), UNKNOWN(2), BUSY(3), OFS(Out of Service)(4), TROFS(Transition Out of Service)(5), TROFS_DOWN(Down When going Out of Service)(8).
  		"""
  		try :
  			return self._state
  		except Exception as e:
  			raise e
  
  	@property
  	def vsvrservicehits(self) :
  		r"""Number of times that the service has been provided.
  		"""
  		try :
  			return self._vsvrservicehits
  		except Exception as e:
  			raise e
  
  	@property
  	def totalresponsebytes(self) :
  		r"""Number of response bytes received by this service or virtual server.
  		"""
  		try :
  			return self._totalresponsebytes
  		except Exception as e:
  			raise e
  
  	@property
  	def primaryport(self) :
  		r"""The port on which the service is running.
  		"""
  		try :
  			return self._primaryport
  		except Exception as e:
  			raise e
  
  	@property
  	def requestsrate(self) :
  		r"""Rate (/s) counter for totalrequests.
  		"""
  		try :
  			return self._requestsrate
  		except Exception as e:
  			raise e
  
  	@property
  	def vsvrservicehitsrate(self) :
  		r"""Rate (/s) counter for vsvrservicehits.
  		"""
  		try :
  			return self._vsvrservicehitsrate
  		except Exception as e:
  			raise e
  
  	def _get_nitro_response(self, service, response) :
  		r""" converts nitro response into object and returns the object array in case of get request.
  		"""
  		try :
  			result = service.payload_formatter.string_to_resource(gslbservice_response, response, self.__class__.__name__.replace('_stats',''))
  			if(result.errorcode != 0) :
  				if (result.errorcode == 444) :
  					service.clear_session(self)
  				if result.severity :
  					if (result.severity == "ERROR") :
  						raise nitro_exception(result.errorcode, str(result.message), str(result.severity))
  				else :
  					raise nitro_exception(result.errorcode, str(result.message), str(result.severity))
  			return result.gslbservice
  		except Exception as e :
  			raise e
  
  	def _get_object_name(self) :
  		r""" Returns the value of object identifier argument
  		"""
  		try :
  			if self.servicename is not None :
  				return str(self.servicename)
  			return None
  		except Exception as e :
  			raise e
  
  
  
  	@classmethod
  	def  get(cls, service, name="", option_="") :
  		r""" Use this API to fetch the statistics of all gslbservice_stats resources that are configured on netscaler.
  		 set statbindings=True in options to retrieve bindings.
  		"""
  		try :
  			obj = gslbservice_stats()
  			if not name :
  				response = obj.stat_resources(service, option_)
  			else :
  				obj.servicename = name
  				response = obj.stat_resource(service, option_)
  			return response
  		except Exception as e:
  			raise e
  
  	class Clearstats:
  		basic = "basic"
  		full = "full"
  
  class gslbservice_response(base_response) :
  	def __init__(self, length=1) :
  		self.gslbservice = []
  		self.errorcode = 0
  		self.message = ""
  		self.severity = ""
  		self.sessionid = ""
  		self.gslbservice = [gslbservice_stats() for _ in range(length)]
  
  