Consolidator
============

todo:
-----
- integration test
- sample consolidation: tt


Idee
----

- Daemon, der ber den Datenbestand luft um Konsolidierungen zu erstellen
- Serverkomponente (d.h. alle Sessions profitieren)
- multithreaded ???
	- Vorteil: insgesamt bessere Response-Zeiten (z.B. ein Thread TimeTracking, 1 Thread Jobs)
	- aber: Connections pro Thread


Konsolidierung
--------------

- kann persistent sein
- hat Zeitstempel und Verfallsdatum
- kann mehrere (sehr viele) Zielwerte haben
- hat genau eine Quelltabelle (z.B. TimeTrackings)
- Zielwerte immer numerisch?


Beispiele fr Konsolidierungen
------------------------------

- kummulierte Zeiten fr Job in Interval
- kummulierte Zeiten fr Job von letzter Schtzung bis heute
- letzte Schtzung fr Job
- erstes/letztes Erfassunsdatum fr Job


Consolidation-Request
---------------------

- Anforderung einer Konsolidierung
- einmalige/regelmige
- mit Prioritt


Pseudo-Code
-----------

Consolidator.loop():

	while( true ) {
	
		request = nextRequest();
		
		foreach( document in query( request.getSourceType() ) ) {
		
			foreach( currentRequest in requestsOfType( request.getSourceType() ) ) {
			
				currentRequest.iterate( document )
				
			}
		
		}
	
	}


Consolidator.getConsolidation( consolidationKey, maxAge, priority ):

	consolidation = load( consolidationKey );
	if( consolidation != null ) {
		if( now() - consolidation.getTimestamp() <= maxAge ) {
			return consolidation;
		}
	}
	
	// need new consolidation:
	
	consolidation = scheduleAndWait( consolidation );
	
	return consolidation






