🐛 — Fix bug when changing IP version not removing tasks (fix #72)

This commit is contained in:
Luc Didry 2024-12-09 15:55:40 +01:00
parent 311d86d130
commit 9c8be94c20
No known key found for this signature in database
GPG key ID: EA868E12D0257E3C
2 changed files with 83 additions and 7 deletions

View file

@ -5,6 +5,7 @@
- ✨ — IPv4/IPv6 choice for checks, and choice for a dual-stack check (#69) - ✨ — IPv4/IPv6 choice for checks, and choice for a dual-stack check (#69)
- ⚡ — Mutualize check requests (#68) - ⚡ — Mutualize check requests (#68)
- ✨ — Ability to delay notification after X failures (#71) - ✨ — Ability to delay notification after X failures (#71)
- 🐛 — Fix bug when changing IP version not removing tasks (#72)
## 0.6.1 ## 0.6.1

View file

@ -83,13 +83,22 @@ async def count_results(db: Session):
return db.query(Result).count() return db.query(Result).count()
async def has_config_changed(db: Session, config: schemas.Config) -> bool: async def has_config_changed(db: Session, config: schemas.Config) -> bool: # pylint: disable-msg=too-many-statements
"""Check if websites config has changed by using a hashsum and a config cache""" """Check if websites config has changed by using a hashsum and a config cache"""
websites_hash = sha256(str(config.websites).encode()).hexdigest() websites_hash = sha256(str(config.websites).encode()).hexdigest()
conf_caches = db.query(ConfigCache).all() conf_caches = db.query(ConfigCache).all()
same_config = True same_config = True
keys = [
"websites_hash",
"general_frequency",
"general_recheck_delay",
"general_retry_before_notification",
"general_ipv4",
"general_ipv6",
]
if conf_caches: if conf_caches:
for conf in conf_caches: for conf in conf_caches:
keys.remove(conf.name)
match conf.name: match conf.name:
case "websites_hash": case "websites_hash":
if conf.val != websites_hash: if conf.val != websites_hash:
@ -111,9 +120,62 @@ async def has_config_changed(db: Session, config: schemas.Config) -> bool:
same_config = False same_config = False
conf.val = str(config.general.retry_before_notification) conf.val = str(config.general.retry_before_notification)
conf.updated_at = datetime.now() conf.updated_at = datetime.now()
case "general_ipv4":
if conf.val != str(config.general.ipv4):
same_config = False
conf.val = str(config.general.ipv4)
conf.updated_at = datetime.now()
case "general_ipv6":
if conf.val != str(config.general.ipv6):
same_config = False
conf.val = str(config.general.ipv6)
conf.updated_at = datetime.now()
for i in keys:
match i:
case "websites_hash":
c = ConfigCache(
name="websites_hash",
val=websites_hash,
updated_at=datetime.now(),
)
case "general_frequency":
c = ConfigCache(
name="general_frequency",
val=str(config.general.frequency),
updated_at=datetime.now(),
)
case "general_recheck_delay":
c = ConfigCache(
name="general_recheck_delay",
val=str(config.general.recheck_delay),
updated_at=datetime.now(),
)
case "general_retry_before_notification":
c = ConfigCache(
name="general_retry_before_notification",
val=str(config.general.retry_before_notification),
updated_at=datetime.now(),
)
case "general_ipv4":
c = ConfigCache(
name="general_ipv4",
val=str(config.general.ipv4),
updated_at=datetime.now(),
)
case "general_ipv6":
c = ConfigCache(
name="general_ipv6",
val=str(config.general.ipv6),
updated_at=datetime.now(),
)
db.add(c)
db.commit() db.commit()
if keys:
return True
if same_config: if same_config:
return False return False
@ -136,10 +198,22 @@ async def has_config_changed(db: Session, config: schemas.Config) -> bool:
val=str(config.general.retry_before_notification), val=str(config.general.retry_before_notification),
updated_at=datetime.now(), updated_at=datetime.now(),
) )
gen_ipv4 = ConfigCache(
name="general_ipv4",
val=str(config.general.ipv4),
updated_at=datetime.now(),
)
gen_ipv6 = ConfigCache(
name="general_ipv6",
val=str(config.general.ipv6),
updated_at=datetime.now(),
)
db.add(web_hash) db.add(web_hash)
db.add(gen_freq) db.add(gen_freq)
db.add(gen_recheck) db.add(gen_recheck)
db.add(gen_retry_before_notif) db.add(gen_retry_before_notif)
db.add(gen_ipv4)
db.add(gen_ipv6)
db.commit() db.commit()
return True return True
@ -173,12 +247,6 @@ async def update_from_config(db: Session, config: schemas.Config): # pylint: di
continue continue
for ip_version in ["4", "6"]: for ip_version in ["4", "6"]:
if ip_version == "4" and ipv4 is False:
continue
if ip_version == "6" and ipv6 is False:
continue
for p in website.paths: for p in website.paths:
url = urljoin(domain, str(p.path)) url = urljoin(domain, str(p.path))
for check_key, expected in p.checks: for check_key, expected in p.checks:
@ -194,8 +262,15 @@ async def update_from_config(db: Session, config: schemas.Config): # pylint: di
) )
.all() .all()
) )
if (ip_version == "4" and ipv4 is False) or (
ip_version == "6" and ipv6 is False
):
continue
if existing_tasks: if existing_tasks:
existing_task = existing_tasks[0] existing_task = existing_tasks[0]
seen_tasks.append(existing_task.id) seen_tasks.append(existing_task.id)
if frequency != existing_task.frequency: if frequency != existing_task.frequency: