Skava Skava / Wiki

Zálohy firmy

Správci a vlastníci firmy otevřou svou firmu v webové aplikaci a vyberou Zálohy. Mohou požádat o zálohu, stáhnout soubory ZIP a spravovat klíče API pro svůj zálohovací server. Tento export není k dispozici v mobilní aplikaci.

Rozsah a omezení

Záloha obsahuje běžné projektové chaty firmy, včetně archivovaných chatů, se zprávami, reakcemi, kartami chatu a jejich příslušnými nahránými přílohami. Obsahuje také metadata projektů a chatů, jména účastníků a zveřejněné dokumenty firmy v těchto chatech. Správci a vlastníci firmy mohou zálohovat firemní chaty, kterým se osobně neúčastní.

Přímé zprávy, soukromé poznámky, služby viditelné pouze pro vás, chaty mezi firmami a osobní koncepty jsou vyloučeny. Obsah firemního úložiště a externích odkazů není součástí tohoto exportu chatů. Chybějící příslušné přílohy způsobí selhání generování. Soubor ZIP je export dat; automatický import zpět do Skavy zatím není k dispozici.

Kvóty, inkrementální zálohy a doba uchování

Každá firma si může vyžádat jednu úplnou zálohu do 7 dnů a dvě inkrementální zálohy do 24 hodin. Tyto pohyblivé okna se spouštějí při každém požadavku. Opětovné stažení stejného hotového souboru nečerpá kvótu na generování. Neúspěšné úlohy generování se do těchto limitů nepočítají.

Každá inkrementální záloha obsahuje změny a smazání od poslední plně přenesené a ověřené kontrolním součtem zálohy. Řetězec je A + B + C: A je úplná záloha, B obsahuje změny od A a C pouze další změny od B. Stav obnovíte aplikováním všech balíčků v pořadí. Nezměněné přílohy odkazují na soubory, které se v tomto řetězci již nacházejí.

Stažení zůstává dostupné po dobu 24 hodin po dokončení generování. Poté se ZIP odstraní, zatímco historie zůstává. Úplnou zálohu a všechny související inkrementální zálohy si ponechte lokálně. Stav pro porovnání zůstává použitelný po dobu nejvýše 90 dnů od úplné zálohy; poté je vyžadována nová úplná záloha. Každá inkrementální záloha identifikuje jak úplnou zálohu, tak jejího přímého předchůdce pomocí ID a SHA-256.

Novým předchůdcem se stává pouze plně přijatý a potvrzený balíček. Hotová, ale nepotvrzená inkrementální záloha blokuje další inkrementální zálohu, dokud není potvrzena nebo nevyprší. Po vypršení nepotvrzeného balíčku začíná další pokus z posledního potvrzeného stavu a zahrnuje změny, které ještě nebyly zálohovány. Pokud je potvrzená část chybí lokálně, stažte ji znovu v rámci její 24hodinové dostupnosti nebo zahajte novou úplnou zálohu podle týdenního limitu. Předvolejte jeden sdílený adresář záloh pro firmu; nezávislí klienti musí udržovat stejný úplný řetězec.

Nastavení klíče API

V sekci Klíče API zadejte název, například „Firemní NAS“, a vytvořte klíč. Zobrazí se pouze jednou, platí jeden rok a lze ho kdykoli zrušit. Uložte ho do chráněného úložiště tajných údajů ve vašem zálohovacím prostředí. Klíč patří firmě a má přístup pouze k zálohovacímu API této firmy. Funguje nezávisle na pozdějším přihlášení jeho tvůrce.

Posílejte ho přes HTTPS v hlavičce Authorization: Bearer YOUR_BACKUP_TOKEN. Klíče nenechávejte v URL, veřejných skriptech ani v logech. Klíče mohou vytvářet, zobrazovat a rušit pouze administrátoři a vlastníci firmy.

Webová aplikace: klíč API s datem vypršení a akcíí pro zrušení
Správa klíčů ve webové aplikaci: název, platnost a zrušení pro každý program zálohování.

Python: stažení kompletní zálohy a přírůstků

Stáhněte si klientský skript company_backup.py v Pythonu a umístěte ho vedle vašeho skriptu. Vyžaduje Python 3.10 nebo novější na Linuxu nebo macOS a používá pouze standardní knihovnu. Nastavte SKAVA_BACKUP_TOKEN v chráněném prostředí procesu a nahraďte 42 identifikátorem firmy z adresy webové aplikace.

import os
from company_backup import BackupClient

client = BackupClient("https://chat.skava.io", 42,
                      os.environ["SKAVA_BACKUP_TOKEN"])
full = client.backup("full", "backups")  # once every 7 days
# Later, up to twice in a rolling 24-hour window:
diff = client.backup("diff", "backups")

Plánované úlohy mohou volat přímo tentýž klient:

python3 company_backup.py --company 42 --kind full --directory backups
python3 company_backup.py --company 42 --kind diff --directory backups

Klient požádá o generování, průběžně ověřuje stav, stahuje soubor na disk, zkontroluje velikost, SHA-256 a obsah ZIP archivu a potvrdí příjem. Úplné a přírůstkové zálohy ukládá jako samostatné soubory. Skrytý stavový soubor v tomto adresáři ponechte: obsahuje informace o řetězci a pokračování. Před požadavkem na další přírůstkovou zálohu klient ověří všechny předchozí ZIP soubory. Po přerušení zopakujte stejný příkaz. Současný běh více úloh pro stejnou firmu ve stejném adresáři je zamezen.

Průběh API bez trvalého spojení

  1. Požadavek: POST /api/v1/companies/42/backups s tělem {"kind":"full","request_id":"YOUR_UNIQUE_ID"}. Pro přírůstkovou zálohu nastavte kind na diff a odešlete ID lokální úplné zálohy jako base_id a ID naposledy potvrzeného balíčku jako parent_id. Odpověď obsahuje job.id. Při opakování požadavku použijte stejné request_id.
  2. Ověřování stavu: GET /api/v1/companies/42/backups/JOB_ID, přibližně každých deset sekund. Generování probíhá na pozadí během stavů queued nebo running. Mezi jednotlivými požadavky zůstává spojení otevřené.
  3. Stahování: Při stavu ready a available: true zavolejte GET /api/v1/companies/42/backups/JOB_ID/download. Pouze tento přenos drží otevřené spojení. Pokud dojde k přerušení, stáhněte celý soubor znovu.
  4. Potvrzení přijetí: Zkontrolujte job.bytes a job.sha256. Z hlaviček odpovědi ke stažení vezměte X-Backup-Download-Id a X-Backup-Receipt. Odešlete POST /api/v1/companies/42/backups/JOB_ID/downloads/DOWNLOAD_ID/confirm s tělem {"receipt":"RECEIPT","bytes":12345,"sha256":"SHA256"}. Úspěšný je pouze kompletní přenos s odpovídajícím potvrzením.

GET /api/v1/companies/42/backups vrací historii, stránkovou přes next_offset. Vyčerpání kvót nebo dočasné limity kapacity vrací HTTP 429 s hlavičkou Retry-After. Zálohy se generují postupně v rámci limitů, takže současná noční úloha nepřetěžuje aplikaci.

Pochopení historie stahování

Historie zobrazuje typ (úplný nebo inkrementální), čas požadavku, platnost, úplnou zálohu, předchozí verzi a každý pokus o stažení včetně přenesených bajtů. Stav „Připraveno“ označuje vygenerovaný soubor. „Přeneseno“ znamená, že server odeslal všechny bajty. „Kontrolní součet potvrzen“ znamená, že klient ověřil a potvrdil úplné přijetí. Přerušené a neúspěšné pokusy zůstávají viditelné.

Webová aplikace: inkrementální záloha s předchůdcem, vypršením stahování a potvrzeným kontrolním součtem
Historie stahování zobrazuje řetězec záloh, 24hodinové okno a ověřené přijetí všech dat.

Webová aplikace ověří přijetí v prohlížeči před otevřením dialogu pro uložení. Toto potvrzení však nedokládá, že byl soubor následně trvale uložen na vašem počítači. U automatických záloh Pythonový klient zapíše soubor na disk předtím, než potvrdí přijetí. Stahování ve webové aplikaci je omezeno na 64 MiB; pro větší archivy použijte Pythonový klient.