HomeForumSourceResearchGuide
Sign in to contribute to source. how it works
Component pal.Perception by barry
expand copy to clipboardexpand
component provides pal.Perception requires time.Calendar calendar {
	
	static PerceptionData perception
	static Mutex plock = new Mutex()
	
	void Perception:addMetric(char name[], int value, bool preferHigh, opt bool overwrite)
		{
		mutex(plock)
			{
			if (perception == null)
				perception = new PerceptionData()
			
			for (int i = 0; i < perception.metrics.arrayLength; i++)
				{
				if (perception.metrics[i].name == name)
					{
					if (overwrite)
						{
						perception.metrics[i].totalValue = value
						perception.metrics[i].totalCount = 1
						}
						else
						{
						perception.metrics[i].totalValue += value
						perception.metrics[i].totalCount ++
						}
					
					perception.metrics[i].timeLast = calendar.getTime()
					
					return
					}
				}
			
			Metric m = new Metric(name, "", value, 1, preferHigh, calendar.getTime())
			m.timeLast = m.timeFirst
			perception.metrics = new Metric[](perception.metrics, m)
			}
		}
	
	void Perception:addEvent(char name[], int value, opt bool overwrite)
		{
		mutex(plock)
			{
			if (perception == null)
				perception = new PerceptionData()
			
			for (int i = 0; i < perception.events.arrayLength; i++)
				{
				if (perception.events[i].name == name)
					{
					if (overwrite)
						{
						perception.events[i].totalValue = value
						perception.events[i].totalCount = 1
						}
						else
						{
						perception.events[i].totalValue += value
						perception.events[i].totalCount ++
						}
					perception.events[i].timeLast = calendar.getTime()
					return
					}
				}
			
			Event e = new Event(name, "", value, 1, calendar.getTime())
			e.timeLast = e.timeFirst
			perception.events = new Event[](perception.events, e)
			}
		}
	
	void Perception:addTrace(char content[])
		{
		mutex(plock)
			{
			if (perception == null)
				perception = new PerceptionData()
			
			Trace e = new Trace(content)
			perception.trace = new Trace[](perception.trace, e)
			}
		}
	
	PerceptionData Perception:getPerception()
		{
		mutex(plock)
			{
			PerceptionData r = perception
			perception = null
			return r
			}
		}
	
	}
Revision history
To propose a new revision to this entity, use dana source put -uc your/new/version.dn -n pal.Perception -m "reason for update" -u yourUsername
Version 1 (this version) by barry
Notes for this version: Standard Library Initialisation