|
@@ -53,6 +53,7 @@ type apiService struct {
|
|
|
statics *staticsServer
|
|
|
model modelIntf
|
|
|
eventSub events.BufferedSubscription
|
|
|
+ diskEventSub events.BufferedSubscription
|
|
|
discoverer discover.CachingMux
|
|
|
connectionsService connectionsIntf
|
|
|
fss *folderSummaryService
|
|
@@ -113,7 +114,7 @@ type connectionsIntf interface {
|
|
|
Status() map[string]interface{}
|
|
|
}
|
|
|
|
|
|
-func newAPIService(id protocol.DeviceID, cfg configIntf, httpsCertFile, httpsKeyFile, assetDir string, m modelIntf, eventSub events.BufferedSubscription, discoverer discover.CachingMux, connectionsService connectionsIntf, errors, systemLog logger.Recorder) *apiService {
|
|
|
+func newAPIService(id protocol.DeviceID, cfg configIntf, httpsCertFile, httpsKeyFile, assetDir string, m modelIntf, eventSub events.BufferedSubscription, diskEventSub events.BufferedSubscription, discoverer discover.CachingMux, connectionsService connectionsIntf, errors, systemLog logger.Recorder) *apiService {
|
|
|
service := &apiService{
|
|
|
id: id,
|
|
|
cfg: cfg,
|
|
@@ -122,6 +123,7 @@ func newAPIService(id protocol.DeviceID, cfg configIntf, httpsCertFile, httpsKey
|
|
|
statics: newStaticsServer(cfg.GUI().Theme, assetDir),
|
|
|
model: m,
|
|
|
eventSub: eventSub,
|
|
|
+ diskEventSub: diskEventSub,
|
|
|
discoverer: discoverer,
|
|
|
connectionsService: connectionsService,
|
|
|
systemConfigMut: sync.NewMutex(),
|
|
@@ -229,7 +231,8 @@ func (s *apiService) Serve() {
|
|
|
getRestMux.HandleFunc("/rest/db/need", s.getDBNeed) // folder [perpage] [page]
|
|
|
getRestMux.HandleFunc("/rest/db/status", s.getDBStatus) // folder
|
|
|
getRestMux.HandleFunc("/rest/db/browse", s.getDBBrowse) // folder [prefix] [dirsonly] [levels]
|
|
|
- getRestMux.HandleFunc("/rest/events", s.getEvents) // since [limit]
|
|
|
+ getRestMux.HandleFunc("/rest/events", s.getIndexEvents) // since [limit]
|
|
|
+ getRestMux.HandleFunc("/rest/events/disk", s.getDiskEvents) // since [limit]
|
|
|
getRestMux.HandleFunc("/rest/stats/device", s.getDeviceStats) // -
|
|
|
getRestMux.HandleFunc("/rest/stats/folder", s.getFolderStats) // -
|
|
|
getRestMux.HandleFunc("/rest/svc/deviceid", s.getDeviceID) // id
|
|
@@ -993,15 +996,22 @@ func (s *apiService) postDBIgnores(w http.ResponseWriter, r *http.Request) {
|
|
|
s.getDBIgnores(w, r)
|
|
|
}
|
|
|
|
|
|
-func (s *apiService) getEvents(w http.ResponseWriter, r *http.Request) {
|
|
|
+func (s *apiService) getIndexEvents(w http.ResponseWriter, r *http.Request) {
|
|
|
+ s.fss.gotEventRequest()
|
|
|
+ s.getEvents(w, r, s.eventSub)
|
|
|
+}
|
|
|
+
|
|
|
+func (s *apiService) getDiskEvents(w http.ResponseWriter, r *http.Request) {
|
|
|
+ s.getEvents(w, r, s.diskEventSub)
|
|
|
+}
|
|
|
+
|
|
|
+func (s *apiService) getEvents(w http.ResponseWriter, r *http.Request, eventSub events.BufferedSubscription) {
|
|
|
qs := r.URL.Query()
|
|
|
sinceStr := qs.Get("since")
|
|
|
limitStr := qs.Get("limit")
|
|
|
since, _ := strconv.Atoi(sinceStr)
|
|
|
limit, _ := strconv.Atoi(limitStr)
|
|
|
|
|
|
- s.fss.gotEventRequest()
|
|
|
-
|
|
|
// Flush before blocking, to indicate that we've received the request and
|
|
|
// that it should not be retried. Must set Content-Type header before
|
|
|
// flushing.
|
|
@@ -1009,7 +1019,7 @@ func (s *apiService) getEvents(w http.ResponseWriter, r *http.Request) {
|
|
|
f := w.(http.Flusher)
|
|
|
f.Flush()
|
|
|
|
|
|
- evs := s.eventSub.Since(since, nil)
|
|
|
+ evs := eventSub.Since(since, nil)
|
|
|
if 0 < limit && limit < len(evs) {
|
|
|
evs = evs[len(evs)-limit:]
|
|
|
}
|