mirror of
https://git.vectorsigma.ru/public/AdGuardHome.git
synced 2026-08-04 04:19:52 +00:00
Pull request 2438: AGDNS-3021-cache-enabled
Merge in DNS/adguard-home from AGDNS-3021-cache-enabled to master
Squashed commit of the following:
commit b92dd03cd07e3fec55b70f29e3db57823c40c419
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Tue Aug 5 19:18:59 2025 +0300
all: imp chlog
commit 26338b6a484555b8a995fc523d861b496925c535
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Tue Aug 5 18:20:06 2025 +0300
all: fix chlog
commit 8b9a40080e335a715bbc6ff70984433d5349fb32
Merge: 9e915b0b2 86de4e75f
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Tue Aug 5 18:17:20 2025 +0300
Merge branch 'master' into AGDNS-3021-cache-enabled
commit 9e915b0b203bf746d5eb940552a41897aba3683e
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Mon Aug 4 17:45:47 2025 +0300
client: imp docs
commit 8391be798a18bc04809dbcfbebdba3999e95401a
Author: Ildar Kamalov <ik@adguard.com>
Date: Mon Aug 4 16:26:32 2025 +0300
ADG-10416 fix cache size error styles
commit 02c33fed2c3e2b09f42062c3531b40152d45b0b6
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Thu Jul 24 17:59:00 2025 +0300
bamboo-specs: fix ci
commit 7fbe7a5ec051a01d820b0973eb4bba12ee618ba5
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Wed Jul 23 20:32:25 2025 +0300
all: imp docs
commit e681868d93785484465fe3744634081615d36be7
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Tue Jul 22 14:36:32 2025 +0300
all: imp docs
commit a5e7cc5223f6aad095a72647fe68463232ef7736
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Thu Jul 17 20:49:55 2025 +0300
all: add tests
commit 1ec3ec24ae2cf33a1aa95f168ebdc13aa06e7fa4
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Wed Jul 16 22:16:37 2025 +0300
all: http api
commit fe49206905c46fe49c57a0d66368fce57405477b
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date: Tue Jul 15 20:26:23 2025 +0300
all: cache enabled
This commit is contained in:
@@ -655,7 +655,10 @@
|
||||
"safe_search": "Safe Search",
|
||||
"blocklist": "Blocklist",
|
||||
"milliseconds_abbreviation": "ms",
|
||||
"cache_enabled": "Enable cache",
|
||||
"cache_enabled_desc": "Store DNS responses locally.",
|
||||
"cache_size": "Cache size",
|
||||
"cache_size_validation": "The cache size must be greater than zero when enabled.",
|
||||
"cache_size_desc": "DNS cache size (in bytes). To disable caching, set to 0.",
|
||||
"cache_ttl_min_override": "Override minimum TTL",
|
||||
"cache_ttl_max_override": "Override maximum TTL",
|
||||
|
||||
@@ -32,6 +32,7 @@ const INPUTS_FIELDS = [
|
||||
];
|
||||
|
||||
type FormData = {
|
||||
cache_enabled: boolean;
|
||||
cache_size: number;
|
||||
cache_ttl_min: number;
|
||||
cache_ttl_max: number;
|
||||
@@ -54,10 +55,11 @@ const Form = ({ initialValues, onSubmit }: CacheFormProps) => {
|
||||
handleSubmit,
|
||||
watch,
|
||||
control,
|
||||
formState: { isSubmitting, isDirty },
|
||||
formState: { isSubmitting },
|
||||
} = useForm<FormData>({
|
||||
mode: 'onBlur',
|
||||
defaultValues: {
|
||||
cache_enabled: initialValues?.cache_enabled || false,
|
||||
cache_size: initialValues?.cache_size || 0,
|
||||
cache_ttl_min: initialValues?.cache_ttl_min || 0,
|
||||
cache_ttl_max: initialValues?.cache_ttl_max || 0,
|
||||
@@ -65,10 +67,13 @@ const Form = ({ initialValues, onSubmit }: CacheFormProps) => {
|
||||
},
|
||||
});
|
||||
|
||||
const cache_enabled = watch('cache_enabled');
|
||||
const cache_size = watch('cache_size');
|
||||
const cache_ttl_min = watch('cache_ttl_min');
|
||||
const cache_ttl_max = watch('cache_ttl_max');
|
||||
|
||||
const minExceedsMax = cache_ttl_min > 0 && cache_ttl_max > 0 && cache_ttl_min > cache_ttl_max;
|
||||
const cacheSizeZeroWhenEnabled = cache_enabled && cache_size === 0;
|
||||
|
||||
const handleClearCache = () => {
|
||||
if (window.confirm(t('confirm_dns_cache_clear'))) {
|
||||
@@ -79,6 +84,24 @@ const Form = ({ initialValues, onSubmit }: CacheFormProps) => {
|
||||
return (
|
||||
<form onSubmit={handleSubmit(onSubmit)}>
|
||||
<div className="row">
|
||||
<div className="col-12 col-md-7">
|
||||
<div className="form__group form__group--settings">
|
||||
<Controller
|
||||
name="cache_enabled"
|
||||
control={control}
|
||||
render={({ field }) => (
|
||||
<Checkbox
|
||||
{...field}
|
||||
data-testid="dns_cache_enabled"
|
||||
title={t('cache_enabled')}
|
||||
subtitle={t('cache_enabled_desc')}
|
||||
disabled={processingSetConfig}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{INPUTS_FIELDS.map(({ name, title, description, placeholder }) => (
|
||||
<div className="col-12" key={name}>
|
||||
<div className="col-12 col-md-7 p-0">
|
||||
@@ -102,6 +125,12 @@ const Form = ({ initialValues, onSubmit }: CacheFormProps) => {
|
||||
setValueAs: (value) => replaceZeroWithEmptyString(value),
|
||||
})}
|
||||
/>
|
||||
|
||||
{name === CACHE_CONFIG_FIELDS.cache_size && cacheSizeZeroWhenEnabled && (
|
||||
<span className="form__message form__message--error">
|
||||
{t('cache_size_validation')}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -133,7 +162,7 @@ const Form = ({ initialValues, onSubmit }: CacheFormProps) => {
|
||||
type="submit"
|
||||
data-testid="dns_save"
|
||||
className="btn btn-success btn-standard btn-large"
|
||||
disabled={isSubmitting || !isDirty || processingSetConfig || minExceedsMax}>
|
||||
disabled={isSubmitting || processingSetConfig || minExceedsMax || cacheSizeZeroWhenEnabled}>
|
||||
{t('save_btn')}
|
||||
</button>
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import { RootState } from '../../../../initialState';
|
||||
const CacheConfig = () => {
|
||||
const { t } = useTranslation();
|
||||
const dispatch = useDispatch();
|
||||
const { cache_size, cache_ttl_max, cache_ttl_min, cache_optimistic } = useSelector(
|
||||
const { cache_enabled, cache_size, cache_ttl_max, cache_ttl_min, cache_optimistic } = useSelector(
|
||||
(state: RootState) => state.dnsConfig,
|
||||
shallowEqual,
|
||||
);
|
||||
@@ -32,6 +32,7 @@ const CacheConfig = () => {
|
||||
<div className="form">
|
||||
<Form
|
||||
initialValues={{
|
||||
cache_enabled,
|
||||
cache_size: replaceZeroWithEmptyString(cache_size),
|
||||
cache_ttl_max: replaceZeroWithEmptyString(cache_ttl_max),
|
||||
cache_ttl_min: replaceZeroWithEmptyString(cache_ttl_min),
|
||||
|
||||
@@ -322,6 +322,7 @@ export type DnsConfigData = {
|
||||
ratelimit_subnet_len_ipv6?: number;
|
||||
edns_cs_use_custom?: boolean;
|
||||
edns_cs_custom_ip?: string;
|
||||
cache_enabled?: boolean;
|
||||
cache_size?: number;
|
||||
cache_ttl_max?: number;
|
||||
cache_ttl_min?: number;
|
||||
|
||||
Reference in New Issue
Block a user