diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go
index 5f48c945..6ee627d4 100644
--- a/cmd/syncthing/gui.go
+++ b/cmd/syncthing/gui.go
@@ -129,6 +129,7 @@ func startGUI(cfg config.GUIConfiguration, assetDir string, m *model.Model) erro
getRestMux.HandleFunc("/rest/upgrade", restGetUpgrade)
getRestMux.HandleFunc("/rest/version", restGetVersion)
getRestMux.HandleFunc("/rest/stats/device", withModel(m, restGetDeviceStats))
+ getRestMux.HandleFunc("/rest/stats/folder", withModel(m, restGetFolderStats))
// Debug endpoints, not for general use
getRestMux.HandleFunc("/rest/debug/peerCompletion", withModel(m, restGetPeerCompletion))
@@ -343,6 +344,12 @@ func restGetDeviceStats(m *model.Model, w http.ResponseWriter, r *http.Request)
json.NewEncoder(w).Encode(res)
}
+func restGetFolderStats(m *model.Model, w http.ResponseWriter, r *http.Request) {
+ var res = m.FolderStatistics()
+ w.Header().Set("Content-Type", "application/json; charset=utf-8")
+ json.NewEncoder(w).Encode(res)
+}
+
func restGetConfig(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
json.NewEncoder(w).Encode(cfg.Raw())
diff --git a/gui/assets/lang/lang-en.json b/gui/assets/lang/lang-en.json
index 612aed59..dbc9cf51 100644
--- a/gui/assets/lang/lang-en.json
+++ b/gui/assets/lang/lang-en.json
@@ -57,6 +57,7 @@
"Introducer": "Introducer",
"Inversion of the given condition (i.e. do not exclude)": "Inversion of the given condition (i.e. do not exclude)",
"Keep Versions": "Keep Versions",
+ "Last File Synced": "Last File Synced",
"Last seen": "Last seen",
"Latest Release": "Latest Release",
"Legend:": "Legend:",
@@ -90,7 +91,9 @@
"Save": "Save",
"Scanning": "Scanning",
"Select the devices to share this folder with.": "Select the devices to share this folder with.",
+ "Select the folders to share with this device.": "Select the folders to share with this device.",
"Settings": "Settings",
+ "Share Folders With Device": "Share Folders With Device",
"Share With Devices": "Share With Devices",
"Shared With": "Shared With",
"Short identifier for the folder. Must be the same on all cluster devices.": "Short identifier for the folder. Must be the same on all cluster devices.",
diff --git a/gui/index.html b/gui/index.html
index 64848c7a..f6205dc5 100644
--- a/gui/index.html
+++ b/gui/index.html
@@ -153,6 +153,14 @@
Shared With |
{{sharesFolder(folder)}} |
+
+ | Last File Synced |
+
+
+ {{folderStats[folder.ID].LastFile.Filename | basename}}
+
+ |
+
@@ -276,8 +284,8 @@
| Last seen |
- Never |
- {{stats[deviceCfg.DeviceID].LastSeen | date:"yyyy-MM-dd HH:mm"}} |
+ Never |
+ {{deviceStats[deviceCfg.DeviceID].LastSeen | date:"yyyy-MM-dd HH:mm"}} |
| Folders |
diff --git a/gui/scripts/syncthing/core/controllers/syncthingController.js b/gui/scripts/syncthing/core/controllers/syncthingController.js
index 4f08d932..c11d72de 100644
--- a/gui/scripts/syncthing/core/controllers/syncthingController.js
+++ b/gui/scripts/syncthing/core/controllers/syncthingController.js
@@ -17,6 +17,7 @@ angular.module('syncthing.core')
refreshConfig();
refreshConnectionStats();
refreshDeviceStats();
+ refreshFolderStats();
$http.get(urlbase + '/version').success(function (data) {
$scope.version = data.version;
@@ -52,7 +53,8 @@ angular.module('syncthing.core')
$scope.folders = {};
$scope.seenError = '';
$scope.upgradeInfo = null;
- $scope.stats = {};
+ $scope.deviceStats = {};
+ $scope.folderStats = {};
$scope.progress = {};
$(window).bind('beforeunload', function () {
@@ -112,6 +114,7 @@ angular.module('syncthing.core')
$scope.$on('LocalIndexUpdated', function (event, arg) {
var data = arg.data;
refreshFolder(data.folder);
+ refreshFolderStats();
// Update completion status for all devices that we share this folder with.
$scope.folders[data.folder].Devices.forEach(function (deviceCfg) {
@@ -364,15 +367,27 @@ angular.module('syncthing.core')
var refreshDeviceStats = debounce(function () {
$http.get(urlbase + "/stats/device").success(function (data) {
- $scope.stats = data;
- for (var device in $scope.stats) {
- $scope.stats[device].LastSeen = new Date($scope.stats[device].LastSeen);
- $scope.stats[device].LastSeenDays = (new Date() - $scope.stats[device].LastSeen) / 1000 / 86400;
+ $scope.deviceStats = data;
+ for (var device in $scope.deviceStats) {
+ $scope.deviceStats[device].LastSeen = new Date($scope.deviceStats[device].LastSeen);
+ $scope.deviceStats[device].LastSeenDays = (new Date() - $scope.deviceStats[device].LastSeen) / 1000 / 86400;
}
console.log("refreshDeviceStats", data);
});
}, 500);
+ var refreshFolderStats = debounce(function () {
+ $http.get(urlbase + "/stats/folder").success(function (data) {
+ $scope.folderStats = data;
+ for (var folder in $scope.folderStats) {
+ if ($scope.folderStats[folder].LastFile) {
+ $scope.folderStats[folder].LastFile.At = new Date($scope.folderStats[folder].LastFile.At);
+ }
+ }
+ console.log("refreshfolderStats", data);
+ });
+ }, 500);
+
$scope.refresh = function () {
refreshSystem();
refreshConnectionStats();
diff --git a/internal/auto/gui.files.go b/internal/auto/gui.files.go
index dda4e108..720ae337 100644
--- a/internal/auto/gui.files.go
+++ b/internal/auto/gui.files.go
@@ -67,7 +67,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["assets/lang/lang-de.json"] = bs
- bs, _ = base64.StdEncoding.DecodeString("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")
+ bs, _ = base64.StdEncoding.DecodeString("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")
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets["assets/lang/lang-en.json"] = bs
@@ -142,7 +142,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["assets/lang/valid-langs.js"] = bs
- bs, _ = base64.StdEncoding.DecodeString("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")
+ bs, _ = base64.StdEncoding.DecodeString("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")
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets["index.html"] = bs
@@ -162,7 +162,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["scripts/syncthing/core/controllers/eventController.js"] = bs
- bs, _ = base64.StdEncoding.DecodeString("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")
+ bs, _ = base64.StdEncoding.DecodeString("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")
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
assets["scripts/syncthing/core/controllers/syncthingController.js"] = bs
diff --git a/internal/model/model.go b/internal/model/model.go
index e99db243..a7b95412 100644
--- a/internal/model/model.go
+++ b/internal/model/model.go
@@ -98,6 +98,7 @@ type Model struct {
deviceStatRefs map[protocol.DeviceID]*stats.DeviceStatisticsReference // deviceID -> statsRef
folderIgnores map[string]*ignore.Matcher // folder -> matcher object
folderRunners map[string]service // folder -> puller or scanner
+ folderStatRefs map[string]*stats.FolderStatisticsReference // folder -> statsRef
fmut sync.RWMutex // protects the above
folderState map[string]folderState // folder -> state
@@ -137,6 +138,7 @@ func NewModel(cfg *config.Wrapper, deviceName, clientName, clientVersion string,
deviceStatRefs: make(map[protocol.DeviceID]*stats.DeviceStatisticsReference),
folderIgnores: make(map[string]*ignore.Matcher),
folderRunners: make(map[string]service),
+ folderStatRefs: make(map[string]*stats.FolderStatisticsReference),
folderState: make(map[string]folderState),
folderStateChanged: make(map[string]time.Time),
protoConn: make(map[protocol.DeviceID]protocol.Connection),
@@ -283,6 +285,15 @@ func (m *Model) DeviceStatistics() map[string]stats.DeviceStatistics {
return res
}
+// Returns statistics about each folder
+func (m *Model) FolderStatistics() map[string]stats.FolderStatistics {
+ var res = make(map[string]stats.FolderStatistics)
+ for id := range m.cfg.Folders() {
+ res[id] = m.folderStatRef(id).GetStatistics()
+ }
+ return res
+}
+
// Returns the completion status, in percent, for the given device and folder.
func (m *Model) Completion(device protocol.DeviceID, folder string) float64 {
defer m.leveldbPanicWorkaround()
@@ -873,6 +884,23 @@ func (m *Model) deviceWasSeen(deviceID protocol.DeviceID) {
m.deviceStatRef(deviceID).WasSeen()
}
+func (m *Model) folderStatRef(folder string) *stats.FolderStatisticsReference {
+ m.fmut.Lock()
+ defer m.fmut.Unlock()
+
+ if sr, ok := m.folderStatRefs[folder]; ok {
+ return sr
+ } else {
+ sr = stats.NewFolderStatisticsReference(m.db, folder)
+ m.folderStatRefs[folder] = sr
+ return sr
+ }
+}
+
+func (m *Model) receivedFile(folder, filename string) {
+ m.folderStatRef(folder).ReceivedFile(filename)
+}
+
func sendIndexes(conn protocol.Connection, folder string, fs *files.Set, ignores *ignore.Matcher) {
deviceID := conn.ID()
name := conn.Name()
diff --git a/internal/model/puller.go b/internal/model/puller.go
index 6d3f7405..371c143c 100644
--- a/internal/model/puller.go
+++ b/internal/model/puller.go
@@ -830,6 +830,7 @@ func (p *Puller) finisherRoutine(in <-chan *sharedPullerState) {
}
p.performFinish(state)
+ p.model.receivedFile(p.folder, state.file.Name)
if p.progressEmitter != nil {
p.progressEmitter.Deregister(state)
}
diff --git a/internal/stats/folder.go b/internal/stats/folder.go
new file mode 100644
index 00000000..0a4c199e
--- /dev/null
+++ b/internal/stats/folder.go
@@ -0,0 +1,133 @@
+// Copyright (C) 2014 The Syncthing Authors.
+//
+// This program is free software: you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation, either version 3 of the License, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program. If not, see .
+
+package stats
+
+import (
+ "encoding/binary"
+ "time"
+
+ "github.com/syndtr/goleveldb/leveldb"
+)
+
+const (
+ folderStatisticTypeLastFile = iota
+)
+
+var folderStatisticsTypes = []byte{
+ folderStatisticTypeLastFile,
+}
+
+type FolderStatistics struct {
+ LastFile *LastFile
+}
+
+type FolderStatisticsReference struct {
+ db *leveldb.DB
+ folder string
+}
+
+func NewFolderStatisticsReference(db *leveldb.DB, folder string) *FolderStatisticsReference {
+ return &FolderStatisticsReference{
+ db: db,
+ folder: folder,
+ }
+}
+
+func (s *FolderStatisticsReference) key(stat byte) []byte {
+ k := make([]byte, 1+1+64)
+ k[0] = keyTypeFolderStatistic
+ k[1] = stat
+ copy(k[1+1:], s.folder[:])
+ return k
+}
+
+func (s *FolderStatisticsReference) GetLastFile() *LastFile {
+ value, err := s.db.Get(s.key(folderStatisticTypeLastFile), nil)
+ if err != nil {
+ if err != leveldb.ErrNotFound {
+ l.Warnln("FolderStatisticsReference: Failed loading last file filename value for", s.folder, ":", err)
+ }
+ return nil
+ }
+
+ file := LastFile{}
+ err = file.UnmarshalBinary(value)
+ if err != nil {
+ l.Warnln("FolderStatisticsReference: Failed loading last file value for", s.folder, ":", err)
+ return nil
+ }
+ return &file
+}
+
+func (s *FolderStatisticsReference) ReceivedFile(filename string) {
+ f := LastFile{
+ Filename: filename,
+ At: time.Now(),
+ }
+ if debug {
+ l.Debugln("stats.FolderStatisticsReference.ReceivedFile:", s.folder)
+ }
+
+ value, err := f.MarshalBinary()
+ if err != nil {
+ l.Warnln("FolderStatisticsReference: Failed serializing last file value for", s.folder, ":", err)
+ return
+ }
+
+ err = s.db.Put(s.key(folderStatisticTypeLastFile), value, nil)
+ if err != nil {
+ l.Warnln("Failed update last file value for", s.folder, ":", err)
+ }
+}
+
+// Never called, maybe because it's worth while to keep the data
+// or maybe because we have no easy way of knowing that a folder has been removed.
+func (s *FolderStatisticsReference) Delete() error {
+ for _, stype := range folderStatisticsTypes {
+ err := s.db.Delete(s.key(stype), nil)
+ if debug && err == nil {
+ l.Debugln("stats.FolderStatisticsReference.Delete:", s.folder, stype)
+ }
+ if err != nil && err != leveldb.ErrNotFound {
+ return err
+ }
+ }
+ return nil
+}
+
+func (s *FolderStatisticsReference) GetStatistics() FolderStatistics {
+ return FolderStatistics{
+ LastFile: s.GetLastFile(),
+ }
+}
+
+type LastFile struct {
+ At time.Time
+ Filename string
+}
+
+func (f *LastFile) MarshalBinary() ([]byte, error) {
+ buf := make([]byte, 8+len(f.Filename))
+ binary.BigEndian.PutUint64(buf[:8], uint64(f.At.Unix()))
+ copy(buf[8:], []byte(f.Filename))
+ return buf, nil
+}
+
+func (f *LastFile) UnmarshalBinary(buf []byte) error {
+ f.At = time.Unix(int64(binary.BigEndian.Uint64(buf[:8])), 0)
+ f.Filename = string(buf[8:])
+ return nil
+}
diff --git a/internal/stats/leveldb.go b/internal/stats/leveldb.go
index e613c17f..77353bfe 100644
--- a/internal/stats/leveldb.go
+++ b/internal/stats/leveldb.go
@@ -18,4 +18,5 @@ package stats
// Same key space as files/leveldb.go keyType* constants
const (
keyTypeDeviceStatistic = iota + 30
+ keyTypeFolderStatistic
)