Skava Skava / Wiki

Rezerve kompanije

Administratori i vlasnici kompanije otvaraju svoju kompaniju u web aplikaciji i biraju Rezerve. Mogu da zatraže rezerve, preuzmu ZIP fajlove i upravljaju API ključevima za svoj server za rezervne kopije. Ovaj izvoz nije dostupan u mobilnoj aplikaciji.

Opseg i ograničenja

Rezerva sadrži redovne projekatne čatove kompanije, uključujući arhivirane čatove, sa porukama, reakcijama, karticama čatova i priloženim prilogima. Takođe uključuje metapodatke projekata i čatova, imena učesnika i objavljene dokumente kompanije u tim čatovima. Administratori i vlasnici kompanije mogu da naprave rezervne kopije kompanijskih čatova kojima nisu lično prisustvovali.

Direktne poruke, privatne beleške, usluge vidljive samo pojedincima, čatovi između kompanija i lični nacrti su isključeni. Sadržaj kompanijskog diska i spoljnih linkova nije deo ovog izvoza čatova. Nedostajući prilozi uzrokuju neuspeh generisanja. ZIP je izvoz podataka; automatski uvoz nazad u Skava još uvek nije dostupan.

Kvote, inkrementali i zadržavanje

Svaka firma može zatražiti jednu kompletnu rezervnu kopiju u roku od 7 dana i dvije inkrementalne kopije u roku od 24 sata. Ovi klizni prozori počinju od svakog zahtjeva. Preuzimanje istog gotovog fajla ponovo ne troši kvotu za generisanje. Neuspjeli zadaci generisanja se ne uračunavaju u ova ograničenja.

Svaka inkrementalna kopija sadrži izmjene i brisanja od posljednje potpuno prenesene i potvrđene provjerom zbirke rezervne kopije. Lanac je A + B + C: A je kompletna kopija, B sadrži izmjene od A, a C samo daljnje izmjene od B. Obnovite stanje primjenom svih paketa redom. Nepromijenjeni prilozi se odnose na fajlove koji već postoje u ovom lancu.

Preuzimanja ostaju dostupna 24 sata nakon završetka generisanja. Tada se ZIP uklanja, a historija ostaje. Čuvajte kompletnu kopiju i svaku povezanu inkrementalnu kopiju lokalno. Stanje za poređenje ostaje korisno najviše 90 dana nakon kompletne kopije; nakon toga je potrebna nova kompletna kopija. Svaka inkrementalna kopija identifikuje kompletnu kopiju i njenog direktnog prethodnika po ID-ju i SHA-256.

Samo potpuno primljen i potvrđen paket postaje novi prethodnik. Spremna, nepotvrđena inkrementalna kopija blokira drugu inkrementalnu kopiju dok se ne potvrdi ili ne istekne. Nakon isteka nepotvrđenog paketa, sljedeći pokušaj kreće od posljednjeg potvrđenog stanja i uključuje izmjene koje još nisu rezervisane. Ako je potvrđeni dio nedostaje lokalno, preuzmite ga ponovo u roku od 24 sata dostupnosti ili pokrenite novu kompletnu kopiju u skladu sa sedmičnim ograničenjem. Preporučuje se jedan zajednički direktorijum za rezervne kopije po firmi; nezavisni klijenti moraju čuvati isti kompletan lanac.

Postavite API ključ

U sekciji API ključevi, unesite ime poput „Firmni NAS“ i kreirajte ključ. Prikazuje se samo jednom, ističe nakon jedne godine i može se otkazati u bilo kom trenutku. Sačuvajte ga u zaštićenom skladištu tajni vašeg okruženja za rezervne kopije. Ključ pripada firmi i može pristupiti samo rezervnom API-ju te firme. Radi nezavisno od kasnijeg prijavljivanja osobe koja ga je kreirala.

Šaljite ga putem HTTPS-a u zaglavlju Authorization: Bearer YOUR_BACKUP_TOKEN. Izbegavajte ključeve u URL-ovima, javnim skriptama i dnevnicima. Samo administratori i vlasnici firme mogu kreirati, izlistati i otkazati ključeve.

Веб апликација: API кључ са датумом истекања и акцијом за повлачење
Управљање кључевима у веб апликацији: назив, важење и повлачење за сваки програм за резервне копије.

Python: preuzimanje pune rezervne kopije i inkrementalnih promena

Preuzmite Python klijent company_backup.py i postavite ga pored vaše skripte. Zahteva Python 3.10 ili noviji na Linuxu ili macOS-u i koristi samo standardnu biblioteku. Podesite SKAVA_BACKUP_TOKEN u zaštićenom okruženju procesa i zamenite 42 sa ID-om firme iz adrese veb aplikacije.

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")

Planirani zadaci mogu direktno pozvati isti klijent:

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

Klijent zahteva generisanje, prati status, preusmerava preuzimanje na disk, proverava veličinu, SHA-256 i sadržaj ZIP fajla, te potvrđuje primanje. Čuva potpune i inkrementalne rezervne kopije kao odvojene fajlove. Zadržite skriveni fajl stanja u tom direktorijumu: on sadrži informacije o lancu i nastavku rada. Pre zahteva za novi inkrementalni, klijent proverava svaki prethodni ZIP fajl. Nakon prekida, ponovite istu komandu. Istovremeni zadaci za istu kompaniju u istom direktorijumu se sprečavaju.

Tok API-ja bez trajne veze

  1. Zahtev: POST /api/v1/companies/42/backups sa {"kind":"full","request_id":"YOUR_UNIQUE_ID"}. Za inkrementalnu, postavite kind na diff i pošaljite ID lokalne potpune rezervne kopije kao base_id i ID poslednje potvrđene pakete kao parent_id. Odgovor dostavlja job.id. Ponovo koristite isti request_id pri ponovnom pokušaju.
  2. Prati: GET /api/v1/companies/42/backups/JOB_ID, otprilike na svakih deset sekundi. Generisanje se izvršava u pozadini tokom queued ili running. Nijedna veza ne ostaje otvorena između zahteva.
  3. Preuzimanje: Kada je status ready i available: true, pozovite GET /api/v1/companies/42/backups/JOB_ID/download. Samo ovaj prenos održava otvorenu vezu. Ako se prekinе, ponovo preuzmite celu datoteku.
  4. Potvrda primanja: Proverite job.bytes i job.sha256. Izvucite X-Backup-Download-Id i X-Backup-Receipt iz zaglavlja odgovora za preuzimanje. Pošaljite POST /api/v1/companies/42/backups/JOB_ID/downloads/DOWNLOAD_ID/confirm sa {"receipt":"RECEIPT","bytes":12345,"sha256":"SHA256"}. Samo kompletan prenos sa usklađenom potvrdom računa se kao uspešan.

GET /api/v1/companies/42/backups vraća istoriju, paginiranu preko next_offset. Iscrpljene kvote ili privremena ograničenja kapaciteta vraćaju HTTP 429 sa Retry-After. Rezerve se generišu sekvencijalno unutar ograničenja, tako da istovremeni noćni zadaci ne preopterećuju aplikaciju.

Razumevanje istorije preuzimanja

Istorija prikazuje tip (potpuni ili inkrementalni), vreme zahteva, rok važenja, potpunu rezervu, prethodnu verziju i svaki pokušaj preuzimanja sa prenesenim bajtovima. „Spremno" označava generisanu datoteku. „Preneseno" znači da je server poslao sve bajtove. „Provera integriteta potvrđena" znači da je klijent verifikovao i potvrdio kompletno primanje. Prekinuti i neuspešni pokušaji ostaju vidljivi.

Веб апликација: инкрементална резервна копија са претходником, роком истекања преузимања и потврђеним контролним збиром
Историја преузимања приказује ланац резервних копија, прозор од 24 сата и потврђено прихватање свих података.

Web aplikacija potvrđuje primanje u pregledaču pre dijaloškog okna za čuvanje. Ta potvrda ne dokazuje da je fajl trajno sačuvan na vašem računaru. Za automatsko arhiviranje, Python klijent piše fajl na disk pre potvrde primanja. Preuzimanja u web aplikaciji ograničena su na 64 MiB; za veće arhive koristite Python klijent.