|
|
@@ -18,163 +18,177 @@ import (
|
|
|
)
|
|
|
|
|
|
type Report struct {
|
|
|
- // Generated
|
|
|
- Received time.Time `json:"-"` // Only from DB
|
|
|
- Date string `json:"date,omitempty"`
|
|
|
- Address string `json:"address,omitempty"`
|
|
|
-
|
|
|
// v1 fields
|
|
|
|
|
|
- UniqueID string `json:"uniqueID,omitempty" since:"1"`
|
|
|
- Version string `json:"version,omitempty" since:"1"`
|
|
|
- LongVersion string `json:"longVersion,omitempty" since:"1"`
|
|
|
- Platform string `json:"platform,omitempty" since:"1"`
|
|
|
- NumFolders int `json:"numFolders,omitempty" since:"1"`
|
|
|
- NumDevices int `json:"numDevices,omitempty" since:"1"`
|
|
|
- TotFiles int `json:"totFiles,omitempty" since:"1"`
|
|
|
- FolderMaxFiles int `json:"folderMaxFiles,omitempty" since:"1"`
|
|
|
- TotMiB int `json:"totMiB,omitempty" since:"1"`
|
|
|
- FolderMaxMiB int `json:"folderMaxMiB,omitempty" since:"1"`
|
|
|
- MemoryUsageMiB int `json:"memoryUsageMiB,omitempty" since:"1"`
|
|
|
- SHA256Perf float64 `json:"sha256Perf,omitempty" since:"1"`
|
|
|
- HashPerf float64 `json:"hashPerf,omitempty" since:"1"` // Was previously not stored server-side
|
|
|
- MemorySize int `json:"memorySize,omitempty" since:"1"`
|
|
|
+ UniqueID string `json:"uniqueID,omitempty" metric:"-" since:"1"`
|
|
|
+ Version string `json:"version,omitempty" metric:"reports_total,gaugeVec:version" since:"1"`
|
|
|
+ LongVersion string `json:"longVersion,omitempty" metric:"-" since:"1"`
|
|
|
+ Platform string `json:"platform,omitempty" metric:"-" since:"1"`
|
|
|
+ NumFolders int `json:"numFolders,omitempty" metric:"num_folders,summary" since:"1"`
|
|
|
+ NumDevices int `json:"numDevices,omitempty" metric:"num_devices,summary" since:"1"`
|
|
|
+ TotFiles int `json:"totFiles,omitempty" metric:"total_files,summary" since:"1"`
|
|
|
+ FolderMaxFiles int `json:"folderMaxFiles,omitempty" metric:"folder_max_files,summary" since:"1"`
|
|
|
+ TotMiB int `json:"totMiB,omitempty" metric:"total_data_mib,summary" since:"1"`
|
|
|
+ FolderMaxMiB int `json:"folderMaxMiB,omitempty" metric:"folder_max_data_mib,summary" since:"1"`
|
|
|
+ MemoryUsageMiB int `json:"memoryUsageMiB,omitempty" metric:"memory_usage_mib,summary" since:"1"`
|
|
|
+ SHA256Perf float64 `json:"sha256Perf,omitempty" metric:"sha256_perf_mibps,summary" since:"1"`
|
|
|
+ HashPerf float64 `json:"hashPerf,omitempty" metric:"hash_perf_mibps,summary" since:"1"`
|
|
|
+ MemorySize int `json:"memorySize,omitempty" metric:"memory_size_mib,summary" since:"1"`
|
|
|
|
|
|
// v2 fields
|
|
|
|
|
|
- URVersion int `json:"urVersion,omitempty" since:"2"`
|
|
|
- NumCPU int `json:"numCPU,omitempty" since:"2"`
|
|
|
+ URVersion int `json:"urVersion,omitempty" metric:"reports_by_urversion_total,gaugeVec:version" since:"2"`
|
|
|
+ NumCPU int `json:"numCPU,omitempty" metric:"num_cpu,summary" since:"2"`
|
|
|
+
|
|
|
FolderUses struct {
|
|
|
- SendOnly int `json:"sendonly,omitempty" since:"2"`
|
|
|
- SendReceive int `json:"sendreceive,omitempty" since:"2"` // Was previously not stored server-side
|
|
|
- ReceiveOnly int `json:"receiveonly,omitempty" since:"2"`
|
|
|
- IgnorePerms int `json:"ignorePerms,omitempty" since:"2"`
|
|
|
- IgnoreDelete int `json:"ignoreDelete,omitempty" since:"2"`
|
|
|
- AutoNormalize int `json:"autoNormalize,omitempty" since:"2"`
|
|
|
- SimpleVersioning int `json:"simpleVersioning,omitempty" since:"2"`
|
|
|
- ExternalVersioning int `json:"externalVersioning,omitempty" since:"2"`
|
|
|
- StaggeredVersioning int `json:"staggeredVersioning,omitempty" since:"2"`
|
|
|
- TrashcanVersioning int `json:"trashcanVersioning,omitempty" since:"2"`
|
|
|
+ SendOnly int `json:"sendonly,omitempty" metric:"folder_feature{feature=ModeSendonly},summary" since:"2"`
|
|
|
+ SendReceive int `json:"sendreceive,omitempty" metric:"folder_feature{feature=ModeSendReceive},summary" since:"2"`
|
|
|
+ ReceiveOnly int `json:"receiveonly,omitempty" metric:"folder_feature{feature=ModeReceiveOnly},summary" since:"2"`
|
|
|
+ IgnorePerms int `json:"ignorePerms,omitempty" metric:"folder_feature{feature=IgnorePerms},summary" since:"2"`
|
|
|
+ IgnoreDelete int `json:"ignoreDelete,omitempty" metric:"folder_feature{feature=IgnoreDelete},summary" since:"2"`
|
|
|
+ AutoNormalize int `json:"autoNormalize,omitempty" metric:"folder_feature{feature=AutoNormalize},summary" since:"2"`
|
|
|
+ SimpleVersioning int `json:"simpleVersioning,omitempty" metric:"folder_feature{feature=VersioningSimple},summary" since:"2"`
|
|
|
+ ExternalVersioning int `json:"externalVersioning,omitempty" metric:"folder_feature{feature=VersioningExternal},summary" since:"2"`
|
|
|
+ StaggeredVersioning int `json:"staggeredVersioning,omitempty" metric:"folder_feature{feature=VersioningStaggered},summary" since:"2"`
|
|
|
+ TrashcanVersioning int `json:"trashcanVersioning,omitempty" metric:"folder_feature{feature=VersioningTrashcan},summary" since:"2"`
|
|
|
} `json:"folderUses,omitempty" since:"2"`
|
|
|
|
|
|
DeviceUses struct {
|
|
|
- Introducer int `json:"introducer,omitempty" since:"2"`
|
|
|
- CustomCertName int `json:"customCertName,omitempty" since:"2"`
|
|
|
- CompressAlways int `json:"compressAlways,omitempty" since:"2"`
|
|
|
- CompressMetadata int `json:"compressMetadata,omitempty" since:"2"`
|
|
|
- CompressNever int `json:"compressNever,omitempty" since:"2"`
|
|
|
- DynamicAddr int `json:"dynamicAddr,omitempty" since:"2"`
|
|
|
- StaticAddr int `json:"staticAddr,omitempty" since:"2"`
|
|
|
+ Introducer int `json:"introducer,omitempty" metric:"device_feature{feature=Introducer},summary" since:"2"`
|
|
|
+ CustomCertName int `json:"customCertName,omitempty" metric:"device_feature{feature=CustomCertName},summary" since:"2"`
|
|
|
+ CompressAlways int `json:"compressAlways,omitempty" metric:"device_feature{feature=CompressAlways},summary" since:"2"`
|
|
|
+ CompressMetadata int `json:"compressMetadata,omitempty" metric:"device_feature{feature=CompressMetadata},summary" since:"2"`
|
|
|
+ CompressNever int `json:"compressNever,omitempty" metric:"device_feature{feature=CompressNever},summary" since:"2"`
|
|
|
+ DynamicAddr int `json:"dynamicAddr,omitempty" metric:"device_feature{feature=AddressDynamic},summary" since:"2"`
|
|
|
+ StaticAddr int `json:"staticAddr,omitempty" metric:"device_feature{feature=AddressStatic},summary" since:"2"`
|
|
|
} `json:"deviceUses,omitempty" since:"2"`
|
|
|
|
|
|
Announce struct {
|
|
|
- GlobalEnabled bool `json:"globalEnabled,omitempty" since:"2"`
|
|
|
- LocalEnabled bool `json:"localEnabled,omitempty" since:"2"`
|
|
|
- DefaultServersDNS int `json:"defaultServersDNS,omitempty" since:"2"`
|
|
|
- DefaultServersIP int `json:"defaultServersIP,omitempty" since:"2"` // Deprecated and not provided client-side anymore
|
|
|
- OtherServers int `json:"otherServers,omitempty" since:"2"`
|
|
|
+ GlobalEnabled bool `json:"globalEnabled,omitempty" metric:"discovery_feature_count{feature=GlobalEnabled},gauge" since:"2"`
|
|
|
+ LocalEnabled bool `json:"localEnabled,omitempty" metric:"discovery_feature_count{feature=LocalEnabled},gauge" since:"2"`
|
|
|
+ DefaultServersDNS int `json:"defaultServersDNS,omitempty" metric:"discovery_default_servers,summary" since:"2"`
|
|
|
+ OtherServers int `json:"otherServers,omitempty" metric:"discovery_other_servers,summary" since:"2"`
|
|
|
} `json:"announce,omitempty" since:"2"`
|
|
|
|
|
|
Relays struct {
|
|
|
- Enabled bool `json:"enabled,omitempty" since:"2"`
|
|
|
- DefaultServers int `json:"defaultServers,omitempty" since:"2"`
|
|
|
- OtherServers int `json:"otherServers,omitempty" since:"2"`
|
|
|
+ Enabled bool `json:"enabled,omitempty" metric:"relay_feature_enabled,gauge" since:"2"`
|
|
|
+ DefaultServers int `json:"defaultServers,omitempty" metric:"relay_feature_count{feature=DefaultServers},summary" since:"2"`
|
|
|
+ OtherServers int `json:"otherServers,omitempty" metric:"relay_feature_count{feature=OtherServers},summary" since:"2"`
|
|
|
} `json:"relays,omitempty" since:"2"`
|
|
|
|
|
|
- UsesRateLimit bool `json:"usesRateLimit,omitempty" since:"2"`
|
|
|
- UpgradeAllowedManual bool `json:"upgradeAllowedManual,omitempty" since:"2"`
|
|
|
- UpgradeAllowedAuto bool `json:"upgradeAllowedAuto,omitempty" since:"2"`
|
|
|
+ UsesRateLimit bool `json:"usesRateLimit,omitempty" metric:"feature_count{feature=RateLimitsEnabled},gauge" since:"2"`
|
|
|
+ UpgradeAllowedManual bool `json:"upgradeAllowedManual,omitempty" metric:"feature_count{feature=UpgradeAllowedManual},gauge" since:"2"`
|
|
|
+ UpgradeAllowedAuto bool `json:"upgradeAllowedAuto,omitempty" metric:"feature_count{feature=UpgradeAllowedAuto},gauge" since:"2"`
|
|
|
|
|
|
// V2.5 fields (fields that were in v2 but never added to the database
|
|
|
- UpgradeAllowedPre bool `json:"upgradeAllowedPre,omitempty" since:"2"`
|
|
|
- RescanIntvs []int `json:"rescanIntvs,omitempty" since:"2"`
|
|
|
+ UpgradeAllowedPre bool `json:"upgradeAllowedPre,omitempty" metric:"upgrade_allowed_pre,gauge" since:"2"`
|
|
|
+ RescanIntvs []int `json:"rescanIntvs,omitempty" metric:"folder_rescan_intervals,summary" since:"2"`
|
|
|
|
|
|
// v3 fields
|
|
|
|
|
|
- Uptime int `json:"uptime,omitempty" since:"3"`
|
|
|
- NATType string `json:"natType,omitempty" since:"3"`
|
|
|
- AlwaysLocalNets bool `json:"alwaysLocalNets,omitempty" since:"3"`
|
|
|
- CacheIgnoredFiles bool `json:"cacheIgnoredFiles,omitempty" since:"3"`
|
|
|
- OverwriteRemoteDeviceNames bool `json:"overwriteRemoteDeviceNames,omitempty" since:"3"`
|
|
|
- ProgressEmitterEnabled bool `json:"progressEmitterEnabled,omitempty" since:"3"`
|
|
|
- CustomDefaultFolderPath bool `json:"customDefaultFolderPath,omitempty" since:"3"`
|
|
|
- WeakHashSelection string `json:"weakHashSelection,omitempty" since:"3"` // Deprecated and not provided client-side anymore
|
|
|
- CustomTrafficClass bool `json:"customTrafficClass,omitempty" since:"3"`
|
|
|
- CustomTempIndexMinBlocks bool `json:"customTempIndexMinBlocks,omitempty" since:"3"`
|
|
|
- TemporariesDisabled bool `json:"temporariesDisabled,omitempty" since:"3"`
|
|
|
- TemporariesCustom bool `json:"temporariesCustom,omitempty" since:"3"`
|
|
|
- LimitBandwidthInLan bool `json:"limitBandwidthInLan,omitempty" since:"3"`
|
|
|
- CustomReleaseURL bool `json:"customReleaseURL,omitempty" since:"3"`
|
|
|
- RestartOnWakeup bool `json:"restartOnWakeup,omitempty" since:"3"`
|
|
|
- CustomStunServers bool `json:"customStunServers,omitempty" since:"3"`
|
|
|
+ Uptime int `json:"uptime,omitempty" metric:"uptime_seconds,summary" since:"3"`
|
|
|
+ NATType string `json:"natType,omitempty" metric:"nat_detection,gaugeVec:type" since:"3"`
|
|
|
+
|
|
|
+ AlwaysLocalNets bool `json:"alwaysLocalNets,omitempty" metric:"feature_count{feature=AlwaysLocalNets},gauge" since:"3"`
|
|
|
+ CacheIgnoredFiles bool `json:"cacheIgnoredFiles,omitempty" metric:"feature_count{feature=CacheIgnoredFiles},gauge" since:"3"`
|
|
|
+ OverwriteRemoteDeviceNames bool `json:"overwriteRemoteDeviceNames,omitempty" metric:"feature_count{feature=OverwriteRemoteDeviceNames},gauge" since:"3"`
|
|
|
+ ProgressEmitterEnabled bool `json:"progressEmitterEnabled,omitempty" metric:"feature_count{feature=ProgressEmitterEnabled},gauge" since:"3"`
|
|
|
+ CustomDefaultFolderPath bool `json:"customDefaultFolderPath,omitempty" metric:"feature_count{feature=CustomDefaultFolderPath},gauge" since:"3"`
|
|
|
+ CustomTrafficClass bool `json:"customTrafficClass,omitempty" metric:"feature_count{feature=CustomTrafficClass},gauge" since:"3"`
|
|
|
+ CustomTempIndexMinBlocks bool `json:"customTempIndexMinBlocks,omitempty" metric:"feature_count{feature=CustomTempIndexMinBlocks},gauge" since:"3"`
|
|
|
+ TemporariesDisabled bool `json:"temporariesDisabled,omitempty" metric:"feature_count{feature=TemporariesDisabled},gauge" since:"3"`
|
|
|
+ TemporariesCustom bool `json:"temporariesCustom,omitempty" metric:"feature_count{feature=TemporariesCustom},gauge" since:"3"`
|
|
|
+ LimitBandwidthInLan bool `json:"limitBandwidthInLan,omitempty" metric:"feature_count{feature=LimitBandwidthInLAN},gauge" since:"3"`
|
|
|
+ CustomReleaseURL bool `json:"customReleaseURL,omitempty" metric:"feature_count{feature=CustomReleaseURL},gauge" since:"3"`
|
|
|
+ RestartOnWakeup bool `json:"restartOnWakeup,omitempty" metric:"feature_count{feature=RestartOnWakeup},gauge" since:"3"`
|
|
|
+ CustomStunServers bool `json:"customStunServers,omitempty" metric:"feature_count{feature=CustomSTUNServers},gauge" since:"3"`
|
|
|
|
|
|
FolderUsesV3 struct {
|
|
|
- ScanProgressDisabled int `json:"scanProgressDisabled,omitempty" since:"3"`
|
|
|
- ConflictsDisabled int `json:"conflictsDisabled,omitempty" since:"3"`
|
|
|
- ConflictsUnlimited int `json:"conflictsUnlimited,omitempty" since:"3"`
|
|
|
- ConflictsOther int `json:"conflictsOther,omitempty" since:"3"`
|
|
|
- DisableSparseFiles int `json:"disableSparseFiles,omitempty" since:"3"`
|
|
|
- DisableTempIndexes int `json:"disableTempIndexes,omitempty" since:"3"`
|
|
|
- AlwaysWeakHash int `json:"alwaysWeakHash,omitempty" since:"3"`
|
|
|
- CustomWeakHashThreshold int `json:"customWeakHashThreshold,omitempty" since:"3"`
|
|
|
- FsWatcherEnabled int `json:"fsWatcherEnabled,omitempty" since:"3"`
|
|
|
- PullOrder map[string]int `json:"pullOrder,omitempty" since:"3"`
|
|
|
- FilesystemType map[string]int `json:"filesystemType,omitempty" since:"3"`
|
|
|
- FsWatcherDelays []int `json:"fsWatcherDelays,omitempty" since:"3"`
|
|
|
- CustomMarkerName int `json:"customMarkerName,omitempty" since:"3"`
|
|
|
- CopyOwnershipFromParent int `json:"copyOwnershipFromParent,omitempty" since:"3"`
|
|
|
- ModTimeWindowS []int `json:"modTimeWindowS,omitempty" since:"3"`
|
|
|
- MaxConcurrentWrites []int `json:"maxConcurrentWrites,omitempty" since:"3"`
|
|
|
- DisableFsync int `json:"disableFsync,omitempty" since:"3"`
|
|
|
- BlockPullOrder map[string]int `json:"blockPullOrder,omitempty" since:"3"`
|
|
|
- CopyRangeMethod map[string]int `json:"copyRangeMethod,omitempty" since:"3"`
|
|
|
- CaseSensitiveFS int `json:"caseSensitiveFS,omitempty" since:"3"`
|
|
|
- ReceiveEncrypted int `json:"receiveencrypted,omitempty" since:"3"`
|
|
|
+ ScanProgressDisabled int `json:"scanProgressDisabled,omitempty" metric:"folder_feature{feature=ScanProgressDisabled},summary" since:"3"`
|
|
|
+ ConflictsDisabled int `json:"conflictsDisabled,omitempty" metric:"folder_feature{feature=ConflictsDisabled},summary" since:"3"`
|
|
|
+ ConflictsUnlimited int `json:"conflictsUnlimited,omitempty" metric:"folder_feature{feature=ConflictsUnlimited},summary" since:"3"`
|
|
|
+ ConflictsOther int `json:"conflictsOther,omitempty" metric:"folder_feature{feature=ConflictsOther},summary" since:"3"`
|
|
|
+ DisableSparseFiles int `json:"disableSparseFiles,omitempty" metric:"folder_feature{feature=DisableSparseFiles},summary" since:"3"`
|
|
|
+ DisableTempIndexes int `json:"disableTempIndexes,omitempty" metric:"folder_feature{feature=DisableTempIndexes},summary" since:"3"`
|
|
|
+ AlwaysWeakHash int `json:"alwaysWeakHash,omitempty" metric:"folder_feature{feature=AlwaysWeakhash},summary" since:"3"`
|
|
|
+ CustomWeakHashThreshold int `json:"customWeakHashThreshold,omitempty" metric:"folder_feature{feature=CustomWeakhashThreshold},summary" since:"3"`
|
|
|
+ FsWatcherEnabled int `json:"fsWatcherEnabled,omitempty" metric:"folder_feature{feature=FSWatcherEnabled},summary" since:"3"`
|
|
|
+ PullOrder map[string]int `json:"pullOrder,omitempty" metric:"folder_pull_order,summaryVec:order" since:"3"`
|
|
|
+ FilesystemType map[string]int `json:"filesystemType,omitempty" metric:"folder_file_system_type,summaryVec:type" since:"3"`
|
|
|
+ FsWatcherDelays []int `json:"fsWatcherDelays,omitempty" metric:"folder_fswatcher_delays,summary" since:"3"`
|
|
|
+ CustomMarkerName int `json:"customMarkerName,omitempty" metric:"folder_feature{feature=CustomMarkername},summary" since:"3"`
|
|
|
+ CopyOwnershipFromParent int `json:"copyOwnershipFromParent,omitempty" metric:"folder_feature{feature=CopyParentOwnership},summary" since:"3"`
|
|
|
+ ModTimeWindowS []int `json:"modTimeWindowS,omitempty" metric:"folder_modtime_window_s,summary" since:"3"`
|
|
|
+ MaxConcurrentWrites []int `json:"maxConcurrentWrites,omitempty" metric:"folder_max_concurrent_writes,summary" since:"3"`
|
|
|
+ DisableFsync int `json:"disableFsync,omitempty" metric:"folder_feature{feature=DisableFsync},summary" since:"3"`
|
|
|
+ BlockPullOrder map[string]int `json:"blockPullOrder,omitempty" metric:"folder_block_pull_order:summaryVec:order" since:"3"`
|
|
|
+ CopyRangeMethod map[string]int `json:"copyRangeMethod,omitempty" metric:"folder_copy_range_method:summaryVec:method" since:"3"`
|
|
|
+ CaseSensitiveFS int `json:"caseSensitiveFS,omitempty" metric:"folder_feature{feature=CaseSensitiveFS},summary" since:"3"`
|
|
|
+ ReceiveEncrypted int `json:"receiveencrypted,omitempty" metric:"folder_feature{feature=ReceiveEncrypted},summary" since:"3"`
|
|
|
+ SendXattrs int `json:"sendXattrs,omitempty" metric:"folder_feature{feature=SendXattrs},summary" since:"3"`
|
|
|
+ SyncXattrs int `json:"syncXattrs,omitempty" metric:"folder_feature{feature=SyncXattrs},summary" since:"3"`
|
|
|
+ SendOwnership int `json:"sendOwnership,omitempty" metric:"folder_feature{feature=SendOwnership},summary" since:"3"`
|
|
|
+ SyncOwnership int `json:"syncOwnership,omitempty" metric:"folder_feature{feature=SyncOwnership},summary" since:"3"`
|
|
|
} `json:"folderUsesV3,omitempty" since:"3"`
|
|
|
|
|
|
DeviceUsesV3 struct {
|
|
|
- Untrusted int `json:"untrusted,omitempty" since:"3"`
|
|
|
+ Untrusted int `json:"untrusted,omitempty" metric:"device_feature{feature=Untrusted},summary" since:"3"`
|
|
|
+ UsesRateLimit int `json:"usesRateLimit,omitempty" metric:"device_feature{feature=RateLimitsEnabled},summary" since:"3"`
|
|
|
+ MultipleConnections int `json:"multipleConnections,omitempty" metric:"device_feature{feature=MultipleConnections},summary" since:"3"`
|
|
|
} `json:"deviceUsesV3,omitempty" since:"3"`
|
|
|
|
|
|
GUIStats struct {
|
|
|
- Enabled int `json:"enabled,omitempty" since:"3"`
|
|
|
- UseTLS int `json:"useTLS,omitempty" since:"3"`
|
|
|
- UseAuth int `json:"useAuth,omitempty" since:"3"`
|
|
|
- InsecureAdminAccess int `json:"insecureAdminAccess,omitempty" since:"3"`
|
|
|
- Debugging int `json:"debugging,omitempty" since:"3"`
|
|
|
- InsecureSkipHostCheck int `json:"insecureSkipHostCheck,omitempty" since:"3"`
|
|
|
- InsecureAllowFrameLoading int `json:"insecureAllowFrameLoading,omitempty" since:"3"`
|
|
|
- ListenLocal int `json:"listenLocal,omitempty" since:"3"`
|
|
|
- ListenUnspecified int `json:"listenUnspecified,omitempty" since:"3"`
|
|
|
- Theme map[string]int `json:"theme,omitempty" since:"3"`
|
|
|
+ Enabled int `json:"enabled,omitempty" metric:"gui_feature_count{feature=Enabled},summary" since:"3"`
|
|
|
+ UseTLS int `json:"useTLS,omitempty" metric:"gui_feature_count{feature=TLS},summary" since:"3"`
|
|
|
+ UseAuth int `json:"useAuth,omitempty" metric:"gui_feature_count{feature=Authentication},summary" since:"3"`
|
|
|
+ InsecureAdminAccess int `json:"insecureAdminAccess,omitempty" metric:"gui_feature_count{feature=InsecureAdminAccess},summary" since:"3"`
|
|
|
+ Debugging int `json:"debugging,omitempty" metric:"gui_feature_count{feature=Debugging},summary" since:"3"`
|
|
|
+ InsecureSkipHostCheck int `json:"insecureSkipHostCheck,omitempty" metric:"gui_feature_count{feature=InsecureSkipHostCheck},summary" since:"3"`
|
|
|
+ InsecureAllowFrameLoading int `json:"insecureAllowFrameLoading,omitempty" metric:"gui_feature_count{feature=InsecureAllowFrameLoading},summary" since:"3"`
|
|
|
+ ListenLocal int `json:"listenLocal,omitempty" metric:"gui_feature_count{feature=ListenLocal},summary" since:"3"`
|
|
|
+ ListenUnspecified int `json:"listenUnspecified,omitempty" metric:"gui_feature_count{feature=ListenUnspecified},summary" since:"3"`
|
|
|
+ Theme map[string]int `json:"theme,omitempty" metric:"gui_theme,summaryVec:theme" since:"3"`
|
|
|
} `json:"guiStats,omitempty" since:"3"`
|
|
|
|
|
|
BlockStats struct {
|
|
|
- Total int `json:"total,omitempty" since:"3"`
|
|
|
- Renamed int `json:"renamed,omitempty" since:"3"`
|
|
|
- Reused int `json:"reused,omitempty" since:"3"`
|
|
|
- Pulled int `json:"pulled,omitempty" since:"3"`
|
|
|
- CopyOrigin int `json:"copyOrigin,omitempty" since:"3"`
|
|
|
- CopyOriginShifted int `json:"copyOriginShifted,omitempty" since:"3"`
|
|
|
- CopyElsewhere int `json:"copyElsewhere,omitempty" since:"3"`
|
|
|
+ Total int `json:"total,omitempty" metric:"blocks_processed_total,gauge" since:"3"`
|
|
|
+ Renamed int `json:"renamed,omitempty" metric:"blocks_processed{source=renamed},gauge" since:"3"`
|
|
|
+ Reused int `json:"reused,omitempty" metric:"blocks_processed{source=reused},gauge" since:"3"`
|
|
|
+ Pulled int `json:"pulled,omitempty" metric:"blocks_processed{source=pulled},gauge" since:"3"`
|
|
|
+ CopyOrigin int `json:"copyOrigin,omitempty" metric:"blocks_processed{source=copy_origin},gauge" since:"3"`
|
|
|
+ CopyOriginShifted int `json:"copyOriginShifted,omitempty" metric:"blocks_processed{source=copy_origin_shifted},gauge" since:"3"`
|
|
|
+ CopyElsewhere int `json:"copyElsewhere,omitempty" metric:"blocks_processed{source=copy_elsewhere},gauge" since:"3"`
|
|
|
} `json:"blockStats,omitempty" since:"3"`
|
|
|
|
|
|
TransportStats map[string]int `json:"transportStats,omitempty" since:"3"`
|
|
|
|
|
|
IgnoreStats struct {
|
|
|
- Lines int `json:"lines,omitempty" since:"3"`
|
|
|
- Inverts int `json:"inverts,omitempty" since:"3"`
|
|
|
- Folded int `json:"folded,omitempty" since:"3"`
|
|
|
- Deletable int `json:"deletable,omitempty" since:"3"`
|
|
|
- Rooted int `json:"rooted,omitempty" since:"3"`
|
|
|
- Includes int `json:"includes,omitempty" since:"3"`
|
|
|
- EscapedIncludes int `json:"escapedIncludes,omitempty" since:"3"`
|
|
|
- DoubleStars int `json:"doubleStars,omitempty" since:"3"`
|
|
|
- Stars int `json:"stars,omitempty" since:"3"`
|
|
|
+ Lines int `json:"lines,omitempty" metric:"folder_ignore_lines_total,summary" since:"3"`
|
|
|
+ Inverts int `json:"inverts,omitempty" metric:"folder_ignore_lines{kind=inverts},summary" since:"3"`
|
|
|
+ Folded int `json:"folded,omitempty" metric:"folder_ignore_lines{kind=folded},summary" since:"3"`
|
|
|
+ Deletable int `json:"deletable,omitempty" metric:"folder_ignore_lines{kind=deletable},summary" since:"3"`
|
|
|
+ Rooted int `json:"rooted,omitempty" metric:"folder_ignore_lines{kind=rooted},summary" since:"3"`
|
|
|
+ Includes int `json:"includes,omitempty" metric:"folder_ignore_lines{kind=includes},summary" since:"3"`
|
|
|
+ EscapedIncludes int `json:"escapedIncludes,omitempty" metric:"folder_ignore_lines{kind=escapedIncludes},summary" since:"3"`
|
|
|
+ DoubleStars int `json:"doubleStars,omitempty" metric:"folder_ignore_lines{kind=doubleStars},summary" since:"3"`
|
|
|
+ Stars int `json:"stars,omitempty" metric:"folder_ignore_lines{kind=stars},summary" since:"3"`
|
|
|
} `json:"ignoreStats,omitempty" since:"3"`
|
|
|
|
|
|
// V3 fields added late in the RC
|
|
|
- WeakHashEnabled bool `json:"weakHashEnabled,omitempty" since:"3"` // Deprecated and not provided client-side anymore
|
|
|
+ WeakHashEnabled bool `json:"weakHashEnabled,omitempty" metric:"-" since:"3"` // Deprecated and not provided client-side anymore
|
|
|
+
|
|
|
+ // Added in post processing
|
|
|
+ Received time.Time `json:"received,omitempty"`
|
|
|
+ Date string `json:"date,omitempty"`
|
|
|
+ Address string `json:"address,omitempty"`
|
|
|
+ OS string `json:"os" metric:"reports_total,gaugeVec:os"`
|
|
|
+ Arch string `json:"arch" metric:"reports_total,gaugeVec:arch"`
|
|
|
+ Compiler string `json:"compiler" metric:"builder,gaugeVec:compiler"`
|
|
|
+ Builder string `json:"builder" metric:"builder,gaugeVec:builder"`
|
|
|
+ Distribution string `json:"distribution" metric:"builder,gaugeVec:distribution"`
|
|
|
+ Country string `json:"country" metric:"location,gaugeVec:country"`
|
|
|
+ CountryCode string `json:"countryCode" metric:"location,gaugeVec:countryCode"`
|
|
|
+ MajorVersion string `json:"majorVersion" metric:"reports_by_major_total,gaugeVec:version"`
|
|
|
}
|
|
|
|
|
|
func New() *Report {
|
|
|
@@ -206,182 +220,6 @@ func (r *Report) ClearForVersion(version int) error {
|
|
|
return clear(r, version)
|
|
|
}
|
|
|
|
|
|
-func (r *Report) FieldPointers() []interface{} {
|
|
|
- // All the fields of the Report, in the same order as the database fields.
|
|
|
- return []interface{}{
|
|
|
- &r.Received, &r.UniqueID, &r.Version, &r.LongVersion, &r.Platform,
|
|
|
- &r.NumFolders, &r.NumDevices, &r.TotFiles, &r.FolderMaxFiles,
|
|
|
- &r.TotMiB, &r.FolderMaxMiB, &r.MemoryUsageMiB, &r.SHA256Perf,
|
|
|
- &r.MemorySize, &r.Date,
|
|
|
- // V2
|
|
|
- &r.URVersion, &r.NumCPU, &r.FolderUses.SendOnly, &r.FolderUses.IgnorePerms,
|
|
|
- &r.FolderUses.IgnoreDelete, &r.FolderUses.AutoNormalize, &r.DeviceUses.Introducer,
|
|
|
- &r.DeviceUses.CustomCertName, &r.DeviceUses.CompressAlways,
|
|
|
- &r.DeviceUses.CompressMetadata, &r.DeviceUses.CompressNever,
|
|
|
- &r.DeviceUses.DynamicAddr, &r.DeviceUses.StaticAddr,
|
|
|
- &r.Announce.GlobalEnabled, &r.Announce.LocalEnabled,
|
|
|
- &r.Announce.DefaultServersDNS, &r.Announce.DefaultServersIP,
|
|
|
- &r.Announce.OtherServers, &r.Relays.Enabled, &r.Relays.DefaultServers,
|
|
|
- &r.Relays.OtherServers, &r.UsesRateLimit, &r.UpgradeAllowedManual,
|
|
|
- &r.UpgradeAllowedAuto, &r.FolderUses.SimpleVersioning,
|
|
|
- &r.FolderUses.ExternalVersioning, &r.FolderUses.StaggeredVersioning,
|
|
|
- &r.FolderUses.TrashcanVersioning,
|
|
|
-
|
|
|
- // V2.5
|
|
|
- &r.UpgradeAllowedPre,
|
|
|
-
|
|
|
- // V3
|
|
|
- &r.Uptime, &r.NATType, &r.AlwaysLocalNets, &r.CacheIgnoredFiles,
|
|
|
- &r.OverwriteRemoteDeviceNames, &r.ProgressEmitterEnabled, &r.CustomDefaultFolderPath,
|
|
|
- &r.WeakHashSelection, &r.CustomTrafficClass, &r.CustomTempIndexMinBlocks,
|
|
|
- &r.TemporariesDisabled, &r.TemporariesCustom, &r.LimitBandwidthInLan,
|
|
|
- &r.CustomReleaseURL, &r.RestartOnWakeup, &r.CustomStunServers,
|
|
|
-
|
|
|
- &r.FolderUsesV3.ScanProgressDisabled, &r.FolderUsesV3.ConflictsDisabled,
|
|
|
- &r.FolderUsesV3.ConflictsUnlimited, &r.FolderUsesV3.ConflictsOther,
|
|
|
- &r.FolderUsesV3.DisableSparseFiles, &r.FolderUsesV3.DisableTempIndexes,
|
|
|
- &r.FolderUsesV3.AlwaysWeakHash, &r.FolderUsesV3.CustomWeakHashThreshold,
|
|
|
- &r.FolderUsesV3.FsWatcherEnabled,
|
|
|
-
|
|
|
- &r.GUIStats.Enabled, &r.GUIStats.UseTLS, &r.GUIStats.UseAuth,
|
|
|
- &r.GUIStats.InsecureAdminAccess,
|
|
|
- &r.GUIStats.Debugging, &r.GUIStats.InsecureSkipHostCheck,
|
|
|
- &r.GUIStats.InsecureAllowFrameLoading, &r.GUIStats.ListenLocal,
|
|
|
- &r.GUIStats.ListenUnspecified,
|
|
|
-
|
|
|
- &r.BlockStats.Total, &r.BlockStats.Renamed,
|
|
|
- &r.BlockStats.Reused, &r.BlockStats.Pulled, &r.BlockStats.CopyOrigin,
|
|
|
- &r.BlockStats.CopyOriginShifted, &r.BlockStats.CopyElsewhere,
|
|
|
-
|
|
|
- &r.IgnoreStats.Lines, &r.IgnoreStats.Inverts, &r.IgnoreStats.Folded,
|
|
|
- &r.IgnoreStats.Deletable, &r.IgnoreStats.Rooted, &r.IgnoreStats.Includes,
|
|
|
- &r.IgnoreStats.EscapedIncludes, &r.IgnoreStats.DoubleStars, &r.IgnoreStats.Stars,
|
|
|
-
|
|
|
- // V3 added late in the RC
|
|
|
- &r.WeakHashEnabled,
|
|
|
- &r.Address,
|
|
|
-
|
|
|
- // Receive only folders
|
|
|
- &r.FolderUses.ReceiveOnly,
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-func (*Report) FieldNames() []string {
|
|
|
- // The database fields that back this struct in PostgreSQL
|
|
|
- return []string{
|
|
|
- // V1
|
|
|
- "Received",
|
|
|
- "UniqueID",
|
|
|
- "Version",
|
|
|
- "LongVersion",
|
|
|
- "Platform",
|
|
|
- "NumFolders",
|
|
|
- "NumDevices",
|
|
|
- "TotFiles",
|
|
|
- "FolderMaxFiles",
|
|
|
- "TotMiB",
|
|
|
- "FolderMaxMiB",
|
|
|
- "MemoryUsageMiB",
|
|
|
- "SHA256Perf",
|
|
|
- "MemorySize",
|
|
|
- "Date",
|
|
|
- // V2
|
|
|
- "ReportVersion",
|
|
|
- "NumCPU",
|
|
|
- "FolderRO",
|
|
|
- "FolderIgnorePerms",
|
|
|
- "FolderIgnoreDelete",
|
|
|
- "FolderAutoNormalize",
|
|
|
- "DeviceIntroducer",
|
|
|
- "DeviceCustomCertName",
|
|
|
- "DeviceCompressionAlways",
|
|
|
- "DeviceCompressionMetadata",
|
|
|
- "DeviceCompressionNever",
|
|
|
- "DeviceDynamicAddr",
|
|
|
- "DeviceStaticAddr",
|
|
|
- "AnnounceGlobalEnabled",
|
|
|
- "AnnounceLocalEnabled",
|
|
|
- "AnnounceDefaultServersDNS",
|
|
|
- "AnnounceDefaultServersIP",
|
|
|
- "AnnounceOtherServers",
|
|
|
- "RelayEnabled",
|
|
|
- "RelayDefaultServers",
|
|
|
- "RelayOtherServers",
|
|
|
- "RateLimitEnabled",
|
|
|
- "UpgradeAllowedManual",
|
|
|
- "UpgradeAllowedAuto",
|
|
|
- // v0.12.19+
|
|
|
- "FolderSimpleVersioning",
|
|
|
- "FolderExternalVersioning",
|
|
|
- "FolderStaggeredVersioning",
|
|
|
- "FolderTrashcanVersioning",
|
|
|
- // V2.5
|
|
|
- "UpgradeAllowedPre",
|
|
|
- // V3
|
|
|
- "Uptime",
|
|
|
- "NATType",
|
|
|
- "AlwaysLocalNets",
|
|
|
- "CacheIgnoredFiles",
|
|
|
- "OverwriteRemoteDeviceNames",
|
|
|
- "ProgressEmitterEnabled",
|
|
|
- "CustomDefaultFolderPath",
|
|
|
- "WeakHashSelection",
|
|
|
- "CustomTrafficClass",
|
|
|
- "CustomTempIndexMinBlocks",
|
|
|
- "TemporariesDisabled",
|
|
|
- "TemporariesCustom",
|
|
|
- "LimitBandwidthInLan",
|
|
|
- "CustomReleaseURL",
|
|
|
- "RestartOnWakeup",
|
|
|
- "CustomStunServers",
|
|
|
-
|
|
|
- "FolderScanProgressDisabled",
|
|
|
- "FolderConflictsDisabled",
|
|
|
- "FolderConflictsUnlimited",
|
|
|
- "FolderConflictsOther",
|
|
|
- "FolderDisableSparseFiles",
|
|
|
- "FolderDisableTempIndexes",
|
|
|
- "FolderAlwaysWeakHash",
|
|
|
- "FolderCustomWeakHashThreshold",
|
|
|
- "FolderFsWatcherEnabled",
|
|
|
-
|
|
|
- "GUIEnabled",
|
|
|
- "GUIUseTLS",
|
|
|
- "GUIUseAuth",
|
|
|
- "GUIInsecureAdminAccess",
|
|
|
- "GUIDebugging",
|
|
|
- "GUIInsecureSkipHostCheck",
|
|
|
- "GUIInsecureAllowFrameLoading",
|
|
|
- "GUIListenLocal",
|
|
|
- "GUIListenUnspecified",
|
|
|
-
|
|
|
- "BlocksTotal",
|
|
|
- "BlocksRenamed",
|
|
|
- "BlocksReused",
|
|
|
- "BlocksPulled",
|
|
|
- "BlocksCopyOrigin",
|
|
|
- "BlocksCopyOriginShifted",
|
|
|
- "BlocksCopyElsewhere",
|
|
|
-
|
|
|
- "IgnoreLines",
|
|
|
- "IgnoreInverts",
|
|
|
- "IgnoreFolded",
|
|
|
- "IgnoreDeletable",
|
|
|
- "IgnoreRooted",
|
|
|
- "IgnoreIncludes",
|
|
|
- "IgnoreEscapedIncludes",
|
|
|
- "IgnoreDoubleStars",
|
|
|
- "IgnoreStars",
|
|
|
-
|
|
|
- // V3 added late in the RC
|
|
|
- "WeakHashEnabled",
|
|
|
- "Address",
|
|
|
-
|
|
|
- // Receive only folders
|
|
|
- "FolderRecvOnly",
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
func (r Report) Value() (driver.Value, error) {
|
|
|
// This needs to be string, yet we read back bytes..
|
|
|
bs, err := json.Marshal(r)
|