diff --git a/src/components/Settings/SettingsJobsCache/index.tsx b/src/components/Settings/SettingsJobsCache/index.tsx
index d5eaa2b9..17e8beee 100644
--- a/src/components/Settings/SettingsJobsCache/index.tsx
+++ b/src/components/Settings/SettingsJobsCache/index.tsx
@@ -66,6 +66,15 @@ const messages: { [messageName: string]: MessageDescriptor } = defineMessages(
dnscacheage: 'Age',
dnscachenetworkerrors: 'Network Errors',
flushdnscache: 'Flush DNS Cache',
+ dnsCacheGlobalStats: 'Global DNS Cache Stats',
+ dnsCacheGlobalStatsDescription:
+ 'These stats are aggregated across all DNS cache entries.',
+ size: 'Size',
+ hits: 'Hits',
+ misses: 'Misses',
+ failures: 'Failures',
+ ipv4Fallbacks: 'IPv4 Fallbacks',
+ hitRate: 'Hit Rate',
unknownJob: 'Unknown Job',
'plex-recently-added-scan': 'Plex Recently Added Scan',
'plex-full-scan': 'Plex Full Library Scan',
@@ -649,6 +658,94 @@ const SettingsJobs = () => {
+
+
+ {intl.formatMessage(messages.dnsCacheGlobalStats)}
+
+
+ {intl.formatMessage(messages.dnsCacheGlobalStatsDescription)}
+
+
+
+
+
+
+ {Object.entries(cacheData?.dnsCache.stats || {})
+ .filter(([statName]) => statName !== 'maxSize')
+ .map(([statName]) => (
+
+ {messages[statName]
+ ? intl.formatMessage(messages[statName])
+ : statName}
+
+ ))}
+
+
+
+
+ {Object.entries(cacheData?.dnsCache.stats || {})
+ .filter(([statName]) => statName !== 'maxSize')
+ .map(([statName, statValue]) => (
+
+ {statName === 'hitRate'
+ ? intl.formatNumber(statValue, {
+ style: 'percent',
+ maximumFractionDigits: 2,
+ })
+ : intl.formatNumber(statValue)}
+
+ ))}
+
+
+
+ {/*
+
+
+
+ {intl.formatMessage(messages.dnscacheglobalsize)}
+
+
+ {intl.formatMessage(messages.dnscacheglobalhits)}
+
+
+ {intl.formatMessage(messages.dnscacheglobalmisses)}
+
+
+ {intl.formatMessage(messages.dnscacheglobalhitrate)}
+
+
+ {intl.formatMessage(messages.dnscacheglobalfailures)}
+
+
+ {intl.formatMessage(messages.dnscacheglobalipv4fallbacks)}
+
+
+
+
+ {Object.entries(cacheData?.dnsCache.stats || {}).map(
+ ([key, value]) => (
+
+ {hostname}
+ {data.activeAddress}
+ {intl.formatNumber(data.hits)}
+ {intl.formatNumber(data.misses)}
+ {formatAge(data.age)}
+ {intl.formatNumber(data.networkErrors)}
+
+
+
+
+ )
+ )}
+
+
*/}
+
{intl.formatMessage(messages.imagecache)}