2015-06-17 15:44:52 +00:00
package ICCC
import (
"fmt"
"github.com/SommerEngineering/Ocean/ICCC/Scheme"
"github.com/SommerEngineering/Ocean/Log"
LM "github.com/SommerEngineering/Ocean/Log/Meta"
"github.com/SommerEngineering/Ocean/Shutdown"
"gopkg.in/mgo.v2/bson"
)
2015-07-10 12:36:47 +00:00
// Internal function for the timer-logic thread.
func cacheTimerLogic ( ) {
2015-06-18 15:44:22 +00:00
// Case: This server goes down now.
2015-06-17 15:44:52 +00:00
if Shutdown . IsDown ( ) {
return
}
2015-07-10 12:36:47 +00:00
// Get the current counts:
lastCountListener := cacheListenerDatabase . Len ( )
lastCountHosts := cacheHostDatabase . Len ( )
2015-06-17 15:44:52 +00:00
2015-07-10 12:36:47 +00:00
// Define the queries:
selectionListeners := bson . D { { ` IsActive ` , true } }
selectionHosts := bson . D { }
// Get the iterators:
entriesIteratorListeners := collectionListener . Find ( selectionListeners ) . Iter ( )
entriesIteratorHosts := collectionHosts . Find ( selectionHosts ) . Iter ( )
//
// Execute the listeners first:
//
entryListener := Scheme . Listener { }
2015-06-17 15:44:52 +00:00
cacheListenerDatabaseLock . Lock ( )
2015-06-18 15:44:22 +00:00
// Re-init the cache:
2015-06-17 15:44:52 +00:00
cacheListenerDatabase . Init ( )
2015-06-18 15:44:22 +00:00
// Loop over all entries
2015-07-10 12:36:47 +00:00
for entriesIteratorListeners . Next ( & entryListener ) {
cacheListenerDatabase . PushBack ( entryListener )
2015-06-17 15:44:52 +00:00
}
cacheListenerDatabaseLock . Unlock ( )
2015-07-10 12:36:47 +00:00
Log . LogShort ( senderName , LM . CategorySYSTEM , LM . LevelINFO , LM . MessageNameEXECUTE , ` The listener cache was refreshed with the values from the database. ` , fmt . Sprintf ( ` last count=%d ` , lastCountListener ) , fmt . Sprintf ( ` new count=%d ` , cacheListenerDatabase . Len ( ) ) )
//
// Execute now the hosts:
//
2015-06-17 15:44:52 +00:00
2015-07-10 12:36:47 +00:00
entryHost := Scheme . Host { }
cacheHostDatabaseLock . Lock ( )
2015-06-17 15:44:52 +00:00
2015-07-10 12:36:47 +00:00
// Re-init the cache:
cacheHostDatabase . Init ( )
// Loop over all entries
for entriesIteratorHosts . Next ( & entryHost ) {
cacheHostDatabase . PushBack ( entryHost )
2015-06-17 15:44:52 +00:00
}
2015-07-10 12:36:47 +00:00
cacheHostDatabaseLock . Unlock ( )
Log . LogShort ( senderName , LM . CategorySYSTEM , LM . LevelINFO , LM . MessageNameEXECUTE , ` The host cache was refreshed with the values from the database. ` , fmt . Sprintf ( ` last count=%d ` , lastCountHosts ) , fmt . Sprintf ( ` new count=%d ` , cacheHostDatabase . Len ( ) ) )
2015-06-17 15:44:52 +00:00
}