mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-22 10:58:57 +00:00
wip
This commit is contained in:
parent
f19a9c49af
commit
73184e550a
@ -848,6 +848,14 @@
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr ng-if="connections[deviceCfg.deviceID].connected && deviceCfg.multipleConnections > 1">
|
||||
<th><span class="fas fa-fw fa-random"></span> <span translate>Multiple Connections</span></th>
|
||||
<td class="text-right">
|
||||
<span>
|
||||
1 + {{connections[deviceCfg.deviceID].secondary.length}}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr ng-if="deviceCfg.allowedNetworks.length > 0">
|
||||
<th><span class="fas fa-fw fa-filter"></span> <span translate>Allowed Networks</span></th>
|
||||
<td class="text-right">
|
||||
|
@ -712,15 +712,28 @@ func (m *model) UsageReportingStats(report *contract.Report, version int, previe
|
||||
}
|
||||
}
|
||||
|
||||
type ConnectionInfo struct {
|
||||
protocol.Statistics
|
||||
type ConnectionStats struct {
|
||||
protocol.Statistics // Total for primary + secondaries
|
||||
|
||||
Connected bool `json:"connected"`
|
||||
Paused bool `json:"paused"`
|
||||
Address string `json:"address"`
|
||||
ClientVersion string `json:"clientVersion"`
|
||||
Type string `json:"type"`
|
||||
IsLocal bool `json:"isLocal"`
|
||||
Crypto string `json:"crypto"`
|
||||
|
||||
Address string `json:"address"` // mirror values from Primary, for compatibility with <1.24.0
|
||||
Type string `json:"type"` // mirror values from Primary, for compatibility with <1.24.0
|
||||
IsLocal bool `json:"isLocal"` // mirror values from Primary, for compatibility with <1.24.0
|
||||
Crypto string `json:"crypto"` // mirror values from Primary, for compatibility with <1.24.0
|
||||
|
||||
Primary ConnectionInfo `json:"primary,omitempty"`
|
||||
Secondary []ConnectionInfo `json:"secondary,omitempty"`
|
||||
}
|
||||
|
||||
type ConnectionInfo struct {
|
||||
protocol.Statistics
|
||||
Address string `json:"address"`
|
||||
Type string `json:"type"`
|
||||
IsLocal bool `json:"isLocal"`
|
||||
Crypto string `json:"crypto"`
|
||||
}
|
||||
|
||||
// NumConnections returns the current number of active connected devices.
|
||||
@ -737,30 +750,61 @@ func (m *model) ConnectionStats() map[string]interface{} {
|
||||
|
||||
res := make(map[string]interface{})
|
||||
devs := m.cfg.Devices()
|
||||
conns := make(map[string]ConnectionInfo, len(devs))
|
||||
conns := make(map[string]ConnectionStats, len(devs))
|
||||
for device, deviceCfg := range devs {
|
||||
if device == m.id {
|
||||
continue
|
||||
}
|
||||
hello := m.helloMessages[device]
|
||||
versionString := hello.ClientVersion
|
||||
if hello.ClientName != "syncthing" {
|
||||
versionString = hello.ClientName + " " + hello.ClientVersion
|
||||
}
|
||||
ci := ConnectionInfo{
|
||||
ClientVersion: strings.TrimSpace(versionString),
|
||||
connIDs, ok := m.deviceConns[device]
|
||||
cs := ConnectionStats{
|
||||
Connected: ok,
|
||||
Paused: deviceCfg.Paused,
|
||||
ClientVersion: strings.TrimSpace(versionString),
|
||||
}
|
||||
if connIDs, ok := m.deviceConns[device]; ok {
|
||||
conn := m.conns[connIDs[0]] // XXX: only accounts primary, should account all
|
||||
ci.Type = conn.Type()
|
||||
ci.IsLocal = conn.IsLocal()
|
||||
ci.Crypto = conn.Crypto()
|
||||
ci.Connected = ok
|
||||
ci.Statistics = conn.Statistics()
|
||||
if ok {
|
||||
conn := m.conns[connIDs[0]]
|
||||
|
||||
cs.Primary.Type = conn.Type()
|
||||
cs.Primary.IsLocal = conn.IsLocal()
|
||||
cs.Primary.Crypto = conn.Crypto()
|
||||
cs.Primary.Statistics = conn.Statistics()
|
||||
if addr := conn.RemoteAddr(); addr != nil {
|
||||
ci.Address = addr.String()
|
||||
cs.Primary.Address = addr.String()
|
||||
}
|
||||
|
||||
cs.Type = cs.Primary.Type
|
||||
cs.IsLocal = cs.Primary.IsLocal
|
||||
cs.Crypto = cs.Primary.Crypto
|
||||
cs.Address = cs.Primary.Address
|
||||
cs.Statistics = cs.Primary.Statistics
|
||||
|
||||
for _, connID := range connIDs[1:] {
|
||||
conn = m.conns[connID]
|
||||
sec := ConnectionInfo{
|
||||
Statistics: conn.Statistics(),
|
||||
Address: conn.RemoteAddr().String(),
|
||||
Type: conn.Type(),
|
||||
IsLocal: conn.IsLocal(),
|
||||
Crypto: conn.Crypto(),
|
||||
}
|
||||
if sec.At.After(cs.At) {
|
||||
cs.At = sec.At
|
||||
}
|
||||
if sec.StartedAt.Before(cs.StartedAt) {
|
||||
cs.StartedAt = sec.StartedAt
|
||||
}
|
||||
cs.InBytesTotal += sec.InBytesTotal
|
||||
cs.OutBytesTotal += sec.OutBytesTotal
|
||||
cs.Secondary = append(cs.Secondary, sec)
|
||||
}
|
||||
}
|
||||
|
||||
conns[device.String()] = ci
|
||||
conns[device.String()] = cs
|
||||
}
|
||||
|
||||
res["connections"] = conns
|
||||
@ -2291,7 +2335,11 @@ func (m *model) AddConnection(conn protocol.Connection, hello protocol.Hello) {
|
||||
|
||||
m.evLogger.Log(events.DeviceConnected, event)
|
||||
|
||||
l.Infof(`Device %s client is "%s %s" named "%s" at %s`, deviceID, hello.ClientName, hello.ClientVersion, hello.DeviceName, conn)
|
||||
if len(m.deviceConns[deviceID]) == 1 {
|
||||
l.Infof(`Device %s client is "%s %s" named "%s" at %s`, deviceID.Short(), hello.ClientName, hello.ClientVersion, hello.DeviceName, conn)
|
||||
} else {
|
||||
l.Infof(`Additional connection #%d for device %s at %s`, len(m.deviceConns[deviceID]), deviceID.Short(), conn)
|
||||
}
|
||||
|
||||
m.pmut.Unlock()
|
||||
|
||||
|
@ -1,18 +1,12 @@
|
||||
<configuration version="37">
|
||||
<folder id="default" label="" path="s1/" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
|
||||
<filesystemType>basic</filesystemType>
|
||||
<folder id="default" label="" path="s1/?files=2000&sizeavg=25000000" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
|
||||
<filesystemType>fake</filesystemType>
|
||||
<device id="I6KAH76-66SLLLB-5PFXSOA-UFJCDZC-YAOMLEK-CP2GB32-BV5RQST-3PSROAU" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<device id="MRIW7OK-NETT3M4-N6SBWME-N25O76W-YJKVXPH-FUMQJ3S-P57B74J-GBITBAC" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<device id="373HSRP-QLPNLIE-JYKZVQF-P4PKZ63-R2ZE6K3-YD442U2-JHBGBQG-WWXAHAU" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<device id="7PBCTLL-JJRYBSA-MOWZRKL-MSDMN4N-4US4OMX-SYEXUS4-HSBGNRY-CZXRXAT" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
<minDiskFree unit="%">1</minDiskFree>
|
||||
<versioning>
|
||||
<cleanupIntervalS>3600</cleanupIntervalS>
|
||||
@ -58,6 +52,7 @@
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
<multipleConnections>0</multipleConnections>
|
||||
</device>
|
||||
<device id="MRIW7OK-NETT3M4-N6SBWME-N25O76W-YJKVXPH-FUMQJ3S-P57B74J-GBITBAC" name="s2" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
|
||||
<address>tcp://127.0.0.1:22002</address>
|
||||
@ -68,7 +63,7 @@
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
<multipleConnections>4</multipleConnections>
|
||||
<multipleConnections>9</multipleConnections>
|
||||
</device>
|
||||
<gui enabled="true" tls="false" debugging="true">
|
||||
<address>127.0.0.1:8081</address>
|
||||
@ -184,6 +179,7 @@
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
<multipleConnections>0</multipleConnections>
|
||||
</device>
|
||||
<ignores></ignores>
|
||||
</defaults>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<configuration version="37">
|
||||
<folder id="default" label="" path="s2" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
|
||||
<filesystemType>basic</filesystemType>
|
||||
<filesystemType>fake</filesystemType>
|
||||
<device id="I6KAH76-66SLLLB-5PFXSOA-UFJCDZC-YAOMLEK-CP2GB32-BV5RQST-3PSROAU" introducedBy="">
|
||||
<encryptionPassword></encryptionPassword>
|
||||
</device>
|
||||
@ -16,7 +16,7 @@
|
||||
<fsPath></fsPath>
|
||||
<fsType>basic</fsType>
|
||||
</versioning>
|
||||
<copiers>1</copiers>
|
||||
<copiers>8</copiers>
|
||||
<pullerMaxPendingKiB>0</pullerMaxPendingKiB>
|
||||
<hashers>0</hashers>
|
||||
<order>random</order>
|
||||
@ -31,7 +31,7 @@
|
||||
<markerName>.stfolder</markerName>
|
||||
<copyOwnershipFromParent>false</copyOwnershipFromParent>
|
||||
<modTimeWindowS>0</modTimeWindowS>
|
||||
<maxConcurrentWrites>2</maxConcurrentWrites>
|
||||
<maxConcurrentWrites>8</maxConcurrentWrites>
|
||||
<disableFsync>false</disableFsync>
|
||||
<blockPullOrder>standard</blockPullOrder>
|
||||
<copyRangeMethod>standard</copyRangeMethod>
|
||||
@ -55,7 +55,7 @@
|
||||
<maxRequestKiB>0</maxRequestKiB>
|
||||
<untrusted>false</untrusted>
|
||||
<remoteGUIPort>0</remoteGUIPort>
|
||||
<multipleConnections>4</multipleConnections>
|
||||
<multipleConnections>9</multipleConnections>
|
||||
</device>
|
||||
<device id="MRIW7OK-NETT3M4-N6SBWME-N25O76W-YJKVXPH-FUMQJ3S-P57B74J-GBITBAC" name="s2" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
|
||||
<address>tcp://127.0.0.1:22002</address>
|
||||
|
Loading…
Reference in New Issue
Block a user