Ocean/ICCC/CacheTimerLogic.go
2015-07-10 14:36:47 +02:00

68 lines
1.9 KiB
Go

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"
)
// Internal function for the timer-logic thread.
func cacheTimerLogic() {
// Case: This server goes down now.
if Shutdown.IsDown() {
return
}
// Get the current counts:
lastCountListener := cacheListenerDatabase.Len()
lastCountHosts := cacheHostDatabase.Len()
// 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{}
cacheListenerDatabaseLock.Lock()
// Re-init the cache:
cacheListenerDatabase.Init()
// Loop over all entries
for entriesIteratorListeners.Next(&entryListener) {
cacheListenerDatabase.PushBack(entryListener)
}
cacheListenerDatabaseLock.Unlock()
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:
//
entryHost := Scheme.Host{}
cacheHostDatabaseLock.Lock()
// Re-init the cache:
cacheHostDatabase.Init()
// Loop over all entries
for entriesIteratorHosts.Next(&entryHost) {
cacheHostDatabase.PushBack(entryHost)
}
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()))
}