package sfive type StatsSinkServer struct { store sqliteStore quit chan bool done chan bool appendData chan StatisticsData } func (self StatsSinkServer) appendActor() { defer func() { self.done <- true }() for { select { case <-self.quit: return case value := <-self.appendData: err := self.store.Append(value) if err != nil { s5l.Printf("failed to store data: %v\n", err) } } } } func (self StatsSinkServer) Close() { self.quit <- true <-self.done close(self.quit) close(self.done) close(self.appendData) self.store.Close() } func NewServer(dbPath string) (server *StatsSinkServer, err error) { // TODO read configuration and create instance with correct settings server = new(StatsSinkServer) server.store, err = NewStore(dbPath) if err != nil { return } server.quit = make(chan bool) server.done = make(chan bool) server.appendData = make(chan StatisticsData, 100) go server.appendActor() return }