summaryrefslogtreecommitdiff
path: root/src/hub/src/spreadspace.org/sfive/s5srv.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5srv.go')
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5srv.go43
1 files changed, 37 insertions, 6 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5srv.go b/src/hub/src/spreadspace.org/sfive/s5srv.go
index 0bd220a..3e17e2c 100644
--- a/src/hub/src/spreadspace.org/sfive/s5srv.go
+++ b/src/hub/src/spreadspace.org/sfive/s5srv.go
@@ -7,12 +7,34 @@ type appendManyToken struct {
response chan bool
}
+type queryStatsResult struct {
+ stats StatsResult
+ err error
+}
+
+type queryStatsToken struct {
+ filter *StatsFilter
+ response chan queryStatsResult
+}
+
+type getUpdatesAfterResult struct {
+ values []StatisticsData
+ err error
+}
+
+type getUpdatesAfterToken struct {
+ id int
+ response chan getUpdatesAfterResult
+}
+
type StatsSinkServer struct {
- store sqliteStore
- quit chan bool
- done chan bool
- appendData chan StatisticsData
- appendManyData chan appendManyToken // chan []StatisticsData
+ store sqliteStore
+ quit chan bool
+ done chan bool
+ appendData chan StatisticsData
+ appendManyData chan appendManyToken // chan []StatisticsData
+ getStatsChan chan queryStatsToken
+ getUpdatesAfterChan chan getUpdatesAfterToken
}
func (self StatsSinkServer) appendActor() {
@@ -42,6 +64,12 @@ func (self StatsSinkServer) appendActor() {
} else {
token.response <- true
}
+ case token := <-self.getStatsChan:
+ stats, err := self.store.GetStats(token.filter)
+ token.response <- queryStatsResult{stats, err}
+ case token := <-self.getUpdatesAfterChan:
+ values, err := self.store.GetUpdatesAfter(token.id)
+ token.response <- getUpdatesAfterResult{values, err}
}
}
}
@@ -53,6 +81,7 @@ func (self StatsSinkServer) Close() {
close(self.done)
close(self.appendData)
close(self.appendManyData)
+ close(self.getStatsChan)
self.store.Close()
}
@@ -66,8 +95,10 @@ func NewServer(mysql bool, dbPath string) (server *StatsSinkServer, err error) {
server.quit = make(chan bool)
server.done = make(chan bool)
- server.appendData = make(chan StatisticsData, 100)
+ server.appendData = make(chan StatisticsData, 5)
server.appendManyData = make(chan appendManyToken, 5)
+ server.getStatsChan = make(chan queryStatsToken, 5)
+ server.getUpdatesAfterChan = make(chan getUpdatesAfterToken, 5)
go server.appendActor()
return
}