node:LAE_Properties_2
bretype:core::Python
editor:Label=LAE Properties
editor:sortkey=498746972bcb2901_2
output:498746a6305a42e2/out1=
prop:Python2Implementation=<<EOX
import braininfo
import os
import socket

def otherMiscProperties(self):
	outRec = self.outputs[0].newRecord()
	try:
		import resource
	except ImportError:
		resource = None
		pass
	if resource:
		outRec["Zone"] = "OS"
		outRec["Property"] = "Ulimit Files - Soft Limit"
		outRec["Type"] = "Integer"
		outRec["Value"] = resource.getrlimit(resource.RLIMIT_NOFILE)[0]
		self.outputs[0].write(outRec)
		
		outRec["Zone"] = "OS"
		outRec["Property"] = "Ulimit Files - Hard Limit"
		outRec["Type"] = "Integer"
		outRec["Value"] = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
		self.outputs[0].write(outRec)
	try:
		import multiprocessing
	except (ImportError, NotImplementedError):
		multiprocessing = None
		pass
	if multiprocessing:
		outRec["Zone"] = "OS"
		outRec["Property"] = "CPU_COUNT"
		outRec["Type"] = "Integer"
		outRec["Value"] = multiprocessing.cpu_count()
		self.outputs[0].write(outRec)
###############
	s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	try:
		# doesn't even have to be reachable
		s.connect(('10.255.255.255', 0))
		IP = s.getsockname()[0]
	except:
		IP = '127.0.0.1'
	finally:
		s.close()
	outRec["Zone"] = "OS"
	outRec["Property"] = "IP"
	outRec["Type"] = "String"
	outRec["Value"]=IP
	self.outputs[0].write(outRec)
################
	t=self.properties.getString("ls.home")
	f=open(t+'/.install4j/response.varfile','r')
	s=f.read()
	p=s.split("\n")
	for pp in p:
		if pp>"" and pp[0]<>"#":
			q=pp+"=="
			q=q.split("=")
			outRec["Zone"] = "response.varfile"
			qq=(q[0]+"$String").split("$")
			outRec["Property"] = qq[0]
			outRec["Type"] = qq[1]
			outRec["Value"]=q[1]
			self.outputs[0].write(outRec)

def setup(brainNodeControlObj, BrainNodeClass):
	class BrainNode(BrainNodeClass):
		def initialize(self):
			super(BrainNode, self).initialize()
			self.om = self.newMetadata()
			self.om.append("Zone","string")
			self.om.append("Property","string")
			self.om.append("Type","string")
			self.om.append("Value","string")
			self.outputs[0].metadata = self.om
			outRec = self.outputs[0].newRecord()
			p = self.properties.getString('ls.brain.node.getLaeProperties.Parameter',"")
			if p<>"":
				outRec["Zone"] = "Brain"
				outRec["Property"] = p
				if self.properties.isArray(p) == True:
					a = self.properties.getArray(p)
					if len(a)>0:
						#outRec["Value"] = a[0]
						for i in range(len(a)):
							vv = a[i]
							outRec["Value"] = vv
							outRec["Type"] = "Array:"+"%03d" % i
							self.outputs[0].write(outRec)
				else:
					vv=self.properties.getString(p,"*undefined*")
					outRec["Value"] = vv
					outRec["Type"] = "String"
					self.outputs[0].write(outRec)
			else:
				for v in self.properties.getPropertyNames():
					outRec["Zone"] = "Brain"
					outRec["Property"] = v
					if self.properties.isArray(v) == True:
						a = self.properties.getArray(v)
						if len(a)>0:
							#outRec["Value"] = a[0]
							for i in range(len(a)):
								vv = a[i]
								outRec["Value"] = vv
								outRec["Type"] = "Array:"+"%03d" % i
								self.outputs[0].write(outRec)
					else:
						outRec["Value"] = self.properties.getString(v)
						outRec["Type"] = "String"
						self.outputs[0].write(outRec)
				for v in os.environ.keys():
					outRec = self.outputs[0].newRecord()
					outRec["Zone"] = "OS"
					outRec["Property"] = v
					outRec["Type"] = "String"
					outRec["Value"] = os.environ[v]
					self.outputs[0].write(outRec)
				otherMiscProperties(self)
		def finalize(self, val):
			super(BrainNode, self).finalize(val)

		def pump(self, quant):
			while quant.permitsRunning(self):
				# your code here

				# when complete				
				return False
			# finished your quantum, you want pump called again
			return True  

	return BrainNode
EOX
prop:ToolCode=<<EOX
MinInputs  = 0
MaxInputs  = 0
MinOutputs = 1
MaxOutputs = 1

method CustomDisplayLabel
{
	return "Brain Properties"  
}


method CustomDescription
{
		str = "Brain Properties"
		return str;
}

EOX
editor:XY=350,130
editor:propdef=Parameter|string|1|ls.brain.node.getLaeProperties.Parameter|None
editor:propdef=ToolCode|inlinefile,nil|2||None
end:LAE_Properties_2