Mukhya samagri par jaen

Database Schema

Yah document Duplicati server ke dwara backup operation data store karne ke liye istemal hone wale SQLite database schema ka vivaran deta hai.

Database Location

Database application data directory mein store hota hai:

  • Default Location: /app/data/backups.db
  • Docker Volume: duplistatus_data:/app/data
  • File Name: backups.db

Database Migration System

Duplicati server versions ke beech database schema changes ko handle karne ke liye ek automated migration system ka istemal karta hai.

Migration Version History

Neeche historical migration versions hain jinhone database ko uski vartaman sthiti mein laya:

  • Schema v1.0 (Application v0.6.x aur pehle): machines aur backups tables ke saath prarambhik database schema
  • Schema v2.0 (Application v0.7.x): Missing columns aur configurations table joda gaya
  • Schema v3.0 (Application v0.7.x): machines table ka naam badalkar servers kar diya gaya, server_url column joda gaya
  • Schema v3.1 (Application v0.8.x): Backup data fields ko enhance kiya gaya, server_password column joda gaya
  • Schema v4.0 (Application v0.9.x / v1.0.x): User Access Control (users, sessions, audit_log tables) joda gaya

Vartaman application version (v1.3.x) latest database schema version ke roop mein Schema v4.0 ka istemal karta hai.

Migration Process

  1. Automatic Backup: Migration se pehle backup banata hai
  2. Schema Update: Database structure ko update karta hai
  3. Data Migration: Existing data ko preserve karta hai
  4. Verification: Successful migration ki pushti karta hai

Tables

Servers Table

Monitor kiye ja rahe Duplicati servers ke baare mein information store karta hai.

Fields

FieldTypeDescription
idTEXT PRIMARY KEYUnique server identifier
nameTEXT NOT NULLDuplicati se server naam
server_urlTEXTDuplicati server URL
aliasTEXTUpyogkarta dvara paribhashit mitra naam
noteTEXTUpyogkarta dvara paribhashit notes/vivaran
server_passwordTEXTPramanikaran ke liye server ka password
created_atDATETIMEServer nirman ka samay chinh

Backups Table

Duplicati servers se prapt backup operation data store karta hai.

Key Fields

FieldTypeDescription
idTEXT PRIMARY KEYAnanya backup pahchan
server_idTEXT NOT NULLServers table ka sandarbh
backup_nameTEXT NOT NULLBackup job ka naam
backup_idTEXT NOT NULLDuplicati se backup ID
dateDATETIME NOT NULLBackup execution ka samay
statusTEXT NOT NULLBackup stithi (Safalta, Warning, Truti, Gambhir)
duration_secondsINTEGER NOT NULLSeconds mein Avadhi
sizeINTEGERSource files ka aakar
uploaded_sizeINTEGERUplod kiye gaye data ka aakar
examined_filesINTEGERJaanch kiye gaye files ki sankhya
warningsINTEGERChetavaniyon ki sankhya
errorsINTEGERTrikon ki sankhya
created_atDATETIMERecord nirman ka samay chinh

Sandesh Array (JSON Sanchayan)

KshetraPrakarVivaran
messages_arrayTEXTLog sandeshon ka JSON array
warnings_arrayTEXTWarning sandeshon ka JSON array
errors_arrayTEXTError sandeshon ka JSON array
available_backupsTEXTUpalabdh Backup Sanskaranon ka JSON array

File Karyakshetra Ke Kshetra

KshetraPrakarVivaran
examined_filesINTEGERBackup ke dauran jaanch ki gayi File
opened_filesINTEGERBackup ke liye kholi gayi File
added_filesINTEGERBackup mein jodi gayi nayi File
modified_filesINTEGERBackup mein sanshodhit File
deleted_filesINTEGERBackup se hatayi gayi File
deleted_foldersINTEGERBackup se hataye gaye Folder
added_foldersINTEGERBackup mein jode gaye Folder
modified_foldersINTEGERBackup mein sanshodhit Folder
not_processed_filesINTEGERProcess na ki gayi File
too_large_filesINTEGERProcess karne ke liye bahut badi File
files_with_errorINTEGERTrutiyon wali File
added_symlinksINTEGERJode gaye Symbolic links
modified_symlinksINTEGERSanshodhit Symbolic links
deleted_symlinksINTEGERHataye gaye Symbolic links

File Size Fields

FieldTypeDescription
size_of_examined_filesINTEGERBackup ke dauraan jaanche gaye file ka aakar
size_of_opened_filesINTEGERBackup ke liye khole gaye file ka aakar
size_of_added_filesINTEGERBackup mein jode gaye naye file ka aakar
size_of_modified_filesINTEGERBackup mein sanshodhit kiye gaye file ka aakar

Operation Status Fields

FieldTypeDescription
parsed_resultTEXT NOT NULLProcess ki gayi operation parinaam
main_operationTEXT NOT NULLMukhya operation prakar
interruptedBOOLEANKya backup mein baadha daali gayi thi
partial_backupBOOLEANKya backup anshtik tha
dryrunBOOLEANKya backup ek dry run tha
versionTEXTUpyog kiya gaya Duplicati sanskaran
begin_timeDATETIME NOT NULLBackup shuru hone ka samay
end_timeDATETIME NOT NULLBackup samapt hone ka samay
warnings_actual_lengthINTEGERVastavik chetaavaniyon ki sankhya
errors_actual_lengthINTEGERVastavik trutiyon ki sankhya
messages_actual_lengthINTEGERVastavik sandeshon ki sankhya

Backend Statistics Fields

FieldTypeDescription
bytes_downloadedINTEGERDestination se download kiye gaye bytes
known_file_sizeINTEGERDestination par gyat file ka aakar
last_backup_dateDATETIMEAntim backup tithi destination par
backup_list_countINTEGERBackup sanskaran ki sankhya
reported_quota_errorBOOLEANQuota truti report ki gayi hai
reported_quota_warningBOOLEANQuota warning report ki gayi hai
backend_main_operationTEXTBackend mukhya operation
backend_parsed_resultTEXTBackend parsed parinaam
backend_interruptedBOOLEANBackend operation mein vyavadhan
backend_versionTEXTBackend sanskaran
backend_begin_timeDATETIMEBackend operation shuru hone ka samay
backend_durationTEXTBackend operation ki avadhi
backend_warnings_actual_lengthINTEGERBackend warnings ki sankhya
backend_errors_actual_lengthINTEGERBackend trutiyon ki sankhya

Configurations Table

Application configuration settings store karta hai.

Fields

FieldTypeDescription
keyTEXT PRIMARY KEY NOT NULLConfiguration key
valueTEXTConfiguration value (JSON)

Common Configuration Keys

  • email_config: Email notification settings
  • ntfy_config: NTFY notification settings
  • overdue_tolerance: Vilambit Backup tolerance settings
  • notification_templates: Notification message templates
  • audit_retention_days: Audit Log Retention avadhi (Default: 90 din)

Database Sanskaran Table

Migration ke uddeshyaon ke liye database schema sanskaran ko track karta hai.

Fields

FieldTypeDescription
versionTEXT PRIMARY KEYDatabase sanskaran
applied_atDATETIMEKab migration lagu kiya gaya tha

Upyogkarta Table

Authentication aur access control ke liye upyogkarta account ki jaankari store karta hai.

Fields

FieldTypeDescription
idTEXT PRIMARY KEYAnya upyogkarta identifier
usernameTEXT UNIQUE NOT NULLLogin ke liye Username
password_hashTEXT NOT NULLBcrypt hashed Password
is_adminBOOLEAN NOT NULLKya upyogkarta ke paas Prabandhak adhikar hain
must_change_passwordBOOLEANKya Password badlav anivarya hai
created_atDATETIMEAccount nirman Samay chinh
updated_atDATETIMEAntim Update Samay chinh
last_login_atDATETIMEAntim safal login Samay chinh
last_login_ipTEXTAntim login ka IP pata
failed_login_attemptsINTEGERAsafal login prayason ki sankhya
locked_untilDATETIMEAccount lock samapti (agar lock hai)

Sessions Table

Upyogkarta session data ko authentication aur suraksha ke liye store karta hai.

Fields

FieldTypeDescription
idTEXT PRIMARY KEYSession identifier
user_idTEXTUpyogkarta table ka reference (unauthenticated sessions ke liye nullable)
created_atDATETIMESession creation timestamp
last_accessedDATETIMEAntim access timestamp
expires_atDATETIME NOT NULLSession expiration timestamp
ip_addressTEXTSession origin ka IP address
user_agentTEXTUpyogkarta agent string
csrf_tokenTEXTSession ke liye CSRF token
csrf_expires_atDATETIMECSRF token expiration

Audit Log Table

Upyogkarta actions aur system events ka audit trail store karta hai.

Fields

FieldTypeDescription
idINTEGER PRIMARY KEY AUTOINCREMENTUnique audit log entry identifier
timestampDATETIMEEvent timestamp
user_idTEXTUpyogkarta table ka reference (nullable)
usernameTEXTAction ke samay username
actionTEXT NOT NULLKi gayi action
categoryTEXT NOT NULLAction ka category (e.g., 'authentication', 'settings', 'backup')
target_typeTEXTLakshya ka prakar (udaharan: 'server', 'backup', 'user')
target_idTEXTLakshya ka identifier
detailsTEXTAdhik vivaran (JSON)
ip_addressTEXTAnurodh karne wale ka IP pata
user_agentTEXTUpyogkarta agent string
statusTEXT NOT NULLAction ki stithi ('success', 'failure', 'error')
error_messageTEXTYadi action asafal raha to truti sandesh

Session Prabandhan

Database-Backed Session Storage

Sessions database mein in-memory fallback ke saath store kiye jaate hain:

  • Prathmik Sanchayan: Database-backed sessions table
  • Fallback: In-memory storage (legacy support ya truti ke mamle)
  • Session ID: Cryptographically secure random string
  • Samapti: Configurable session timeout
  • CSRF Suraksha: Cross-site request forgery suraksha
  • Swachalit Safai: Samapt ho chuki sessions swachalit roop se hata di jaati hain

Session API Endpoints

  • POST /api/session: Nayi session banayein
  • GET /api/session: Maujood session ko validate karein
  • DELETE /api/session: Session ko destroy karein
  • GET /api/csrf: CSRF token prapt karein

Indexes

Database mein optimal query performance ke liye kai indexes shamil hain:

  • Prathmik Keys: Sabhi tables mein primary key indexes hain
  • Foreign Keys: Backups table mein Server references, sessions aur audit_log mein user references
  • Query Optimisation: Aksar query kiye jaane wale fields par indexes
  • Taareekh Indexes: Samay-aadhaarit queries ke liye taareekh fields par indexes
  • Upyogkarta Indexes: Upyogkarta ko tezi se lookup karne ke liye Username index
  • Session Indexes: Session prabandhan ke liye expiration aur user_id indexes
  • Audit Indexes: Audit queries ke liye timestamp, user_id, action, category, aur status indexes

Sambandh

  • Servers → Backups: Ek-se-anek sambandh
  • Users → Sessions: Ek-se-anek sambandh (sessions upyogkarta ke bina bhi ho sakti hain)
  • Users → Audit Log: Ek-se-anek sambandh (audit entries upyogkarta ke bina bhi ho sakti hain)
  • Backups → Messages: Embedded JSON arrays
  • Configurations: Key-value storage

Data Types

  • TEXT: String data, JSON arrays
  • INTEGER: Numeric data, file counts, sizes
  • REAL: Floating-point numbers, durations
  • DATETIME: Timestamp data
  • BOOLEAN: True/false values

Backup Status Values

  • Success: Backup safaltapoorvak poora hua
  • Warning: Backup chetaavaniyon ke saath poora hua
  • Error: Backup trutiyon ke saath poora hua
  • Fatal: Backup gambhir roop se asafal hua

Common Queries

Get Latest Backup for a Server

SELECT * FROM backups
WHERE server_id = ?
ORDER BY date DESC
LIMIT 1;

Get All Backups for a Server

SELECT * FROM backups
WHERE server_id = ?
ORDER BY date DESC;

Get Server Summary

SELECT
s.name,
s.alias,
COUNT(b.id) as backup_count,
MAX(b.date) as last_backup,
b.status as last_status
FROM servers s
LEFT JOIN backups b ON s.id = b.server_id
GROUP BY s.id;

Get Overall Summary

SELECT
COUNT(DISTINCT s.id) as total_servers,
COUNT(b.id) as total_backups_runs,
COUNT(DISTINCT s.id || ':' || b.backup_name) as total_backups,
COALESCE(SUM(b.uploaded_size), 0) as total_uploaded_size,
(
SELECT COALESCE(SUM(b2.known_file_size), 0)
FROM backups b2
INNER JOIN (
SELECT server_id, MAX(date) as max_date
FROM backups
GROUP BY server_id
) latest ON b2.server_id = latest.server_id AND b2.date = latest.max_date
) as total_storage_used,
(
SELECT COALESCE(SUM(b2.size_of_examined_files), 0)
FROM backups b2
INNER JOIN (
SELECT server_id, MAX(date) as max_date
FROM backups
GROUP BY server_id
) latest ON b2.server_id = latest.server_id AND b2.date = latest.max_date
) as total_backuped_size
FROM servers s
LEFT JOIN backups b ON b.server_id = s.id;

Database Cleanup

-- Delete old backups (older than 30 days)
DELETE FROM backups
WHERE date < datetime('now', '-30 days');

-- Delete servers with no backups
DELETE FROM servers
WHERE id NOT IN (SELECT DISTINCT server_id FROM backups);

JSON to Database Mapping

API Request Body to Database Columns Mapping

Jab Duplicati backup data ko HTTP POST ke madhyam se bhejta hai, to JSON structure ko database columns mein map kiya jaata hai:

{
"Data": {
"ExaminedFiles": 15399, // → examined_files
"OpenedFiles": 1861, // → opened_files
"AddedFiles": 1861, // → added_files
"SizeOfExaminedFiles": 11086692615, // → size_of_examined_files
"SizeOfOpenedFiles": 13450481, // → size_of_opened_files
"SizeOfAddedFiles": 13450481, // → size_of_added_files
"SizeOfModifiedFiles": 0, // → size_of_modified_files
"ParsedResult": "Success", // → status
"BeginTime": "2025-04-21T23:45:46.9712217Z", // → begin_time and date
"Duration": "00:00:51.3856057", // → duration_seconds (calculated)
"WarningsActualLength": 0, // → warnings_actual_length
"ErrorsActualLength": 0 // → errors_actual_length
},
"Extra": {
"machine-id": "66f5ffc7ff474a73a3c9cba4ac7bfb65", // → server_id
"machine-name": "WSJ-SER5", // → server name
"backup-name": "WSJ-SER5 Local files", // → backup_name
"backup-id": "DB-2" // → backup_id
}
}

Note: Backups table mein size field SizeOfExaminedFiles store karta hai aur uploaded_size backup operation se actual uploaded/transferred size store karta hai.