mirror of
https://framagit.org/framasoft/framaspace/argos.git
synced 2025-04-28 09:52:38 +02:00
🐛 — Fix bug when changing IP version not removing tasks (fix #72)
This commit is contained in:
parent
311d86d130
commit
9c8be94c20
2 changed files with 83 additions and 7 deletions
|
@ -5,6 +5,7 @@
|
|||
- ✨ — IPv4/IPv6 choice for checks, and choice for a dual-stack check (#69)
|
||||
- ⚡ — Mutualize check requests (#68)
|
||||
- ✨ — Ability to delay notification after X failures (#71)
|
||||
- 🐛 — Fix bug when changing IP version not removing tasks (#72)
|
||||
|
||||
## 0.6.1
|
||||
|
||||
|
|
|
@ -83,13 +83,22 @@ async def count_results(db: Session):
|
|||
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"""
|
||||
websites_hash = sha256(str(config.websites).encode()).hexdigest()
|
||||
conf_caches = db.query(ConfigCache).all()
|
||||
same_config = True
|
||||
keys = [
|
||||
"websites_hash",
|
||||
"general_frequency",
|
||||
"general_recheck_delay",
|
||||
"general_retry_before_notification",
|
||||
"general_ipv4",
|
||||
"general_ipv6",
|
||||
]
|
||||
if conf_caches:
|
||||
for conf in conf_caches:
|
||||
keys.remove(conf.name)
|
||||
match conf.name:
|
||||
case "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
|
||||
conf.val = str(config.general.retry_before_notification)
|
||||
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()
|
||||
|
||||
if keys:
|
||||
return True
|
||||
|
||||
if same_config:
|
||||
return False
|
||||
|
||||
|
@ -136,10 +198,22 @@ async def has_config_changed(db: Session, config: schemas.Config) -> bool:
|
|||
val=str(config.general.retry_before_notification),
|
||||
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(gen_freq)
|
||||
db.add(gen_recheck)
|
||||
db.add(gen_retry_before_notif)
|
||||
db.add(gen_ipv4)
|
||||
db.add(gen_ipv6)
|
||||
db.commit()
|
||||
|
||||
return True
|
||||
|
@ -173,12 +247,6 @@ async def update_from_config(db: Session, config: schemas.Config): # pylint: di
|
|||
continue
|
||||
|
||||
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:
|
||||
url = urljoin(domain, str(p.path))
|
||||
for check_key, expected in p.checks:
|
||||
|
@ -194,8 +262,15 @@ async def update_from_config(db: Session, config: schemas.Config): # pylint: di
|
|||
)
|
||||
.all()
|
||||
)
|
||||
|
||||
if (ip_version == "4" and ipv4 is False) or (
|
||||
ip_version == "6" and ipv6 is False
|
||||
):
|
||||
continue
|
||||
|
||||
if existing_tasks:
|
||||
existing_task = existing_tasks[0]
|
||||
|
||||
seen_tasks.append(existing_task.id)
|
||||
|
||||
if frequency != existing_task.frequency:
|
||||
|
|
Loading…
Reference in a new issue