feat: watcher icin anti-ban interval ve jitter politikasini ekle

This commit is contained in:
2026-03-13 12:39:44 +03:00
parent 4a11526445
commit af547ea384
6 changed files with 82 additions and 6 deletions

View File

@@ -121,6 +121,10 @@ export const WatcherPage = () => {
() => watchers.find((watcher) => watcher.id === selectedWatcherId) ?? null,
[selectedWatcherId, watchers]
);
const selectedTrackerDefinition = useMemo(
() => watcherTrackers.find((entry) => entry.key === tracker) ?? null,
[tracker, watcherTrackers]
);
const load = async () => {
const [trackersRes, categoriesRes, watchersRes, summaryRes, itemsRes] =
@@ -229,6 +233,17 @@ export const WatcherPage = () => {
});
return;
}
if (
selectedTrackerDefinition &&
intervalMinutes < selectedTrackerDefinition.minIntervalMinutes
) {
pushAlert({
title: "Izleme araligi cok dusuk",
description: `${selectedTrackerDefinition.label} icin minimum izleme araligi ${selectedTrackerDefinition.minIntervalMinutes} dakikadir.`,
variant: "warn",
});
return;
}
setSaving(true);
try {
if (selectedWatcher) {
@@ -629,6 +644,16 @@ export const WatcherPage = () => {
</Select>
</label>
</div>
{selectedTrackerDefinition ? (
<div className="rounded-xl border border-amber-200 bg-amber-50/80 px-4 py-3 text-xs text-amber-900">
<div className="font-semibold">
{selectedTrackerDefinition.label} icin minimum izleme araligi: {selectedTrackerDefinition.minIntervalMinutes} dakika
</div>
<div className="mt-1 text-amber-800/90">
Onerilen kullanim: {selectedTrackerDefinition.recommendedIntervalLabel}. Scheduler sabit bot paterni olusmaması icin calisma zamanina otomatik jitter ekler.
</div>
</div>
) : null}
<label className="block space-y-2">
<span className="text-xs font-semibold uppercase tracking-[0.18em] text-slate-500">

View File

@@ -85,6 +85,9 @@ export interface WatcherTracker {
label: string;
cliSiteKey: string;
supportsRemoveBookmark: boolean;
minIntervalMinutes: number;
jitterSeconds: number;
recommendedIntervalLabel: string;
}
export interface Watcher {