15 #ifndef hifi_DomainContentBackupManager_h
16 #define hifi_DomainContentBackupManager_h
18 #include <RegisteredMetaTypes.h>
26 #include <unordered_map>
28 #include <GenericThread.h>
30 #include "BackupHandler.h"
31 #include "DomainServerSettingsManager.h"
33 #include <shared/MiniPromises.h>
35 #include <PortableHighResolutionClock.h>
37 const QString DATETIME_FORMAT_RE {
"\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}" };
38 const QString AUTOMATIC_BACKUP_PREFIX {
"autobackup-" };
39 const QString MANUAL_BACKUP_PREFIX {
"backup-" };
40 const QString INSTALLED_CONTENT =
"installed_content";
41 const QString INSTALLED_CONTENT_FILENAME =
"filename";
42 const QString INSTALLED_CONTENT_NAME =
"name";
43 const QString INSTALLED_CONTENT_CREATION_TIME =
"creation_time";
44 const QString INSTALLED_CONTENT_INSTALL_TIME =
"install_time";
45 const QString INSTALLED_CONTENT_INSTALLED_BY =
"installed_by";
47 struct BackupItemInfo {
48 BackupItemInfo(QString pId, QString pName, QString pAbsolutePath, QDateTime pCreatedAt,
bool pIsManualBackup) :
49 id(pId), name(pName), absolutePath(pAbsolutePath), createdAt(pCreatedAt), isManualBackup(pIsManualBackup) { };
58 struct ConsolidatedBackupInfo {
66 QString absoluteFilePath;
67 std::chrono::system_clock::time_point createdAt;
77 QString extensionFormat;
78 int maxBackupVersions;
79 qint64 lastBackupSeconds;
82 static const std::chrono::seconds DEFAULT_PERSIST_INTERVAL;
84 DomainContentBackupManager(
const QString& rootBackupDirectory,
86 std::chrono::milliseconds persistInterval = DEFAULT_PERSIST_INTERVAL,
87 bool debugTimestampNow =
false);
89 std::vector<BackupItemInfo> getAllBackups();
90 void addBackupHandler(BackupHandlerPointer handler);
92 void replaceData(QByteArray data);
93 ConsolidatedBackupInfo consolidateBackup(QString fileName);
96 void getAllBackupsAndStatus(MiniPromise::Promise promise);
97 void createManualBackup(MiniPromise::Promise promise,
const QString& name);
98 void recoverFromBackup(MiniPromise::Promise promise,
const QString& backupName,
const QString& username);
99 void recoverFromUploadedBackup(MiniPromise::Promise promise, QByteArray uploadedBackup, QString username);
100 void recoverFromUploadedFile(MiniPromise::Promise promise, QString uploadedFilename, QString username, QString sourceFilename);
101 void deleteBackup(MiniPromise::Promise promise,
const QString& backupName);
104 void loadCompleted();
105 void recoveryCompleted();
109 virtual void setup()
override;
110 virtual bool process()
override;
111 virtual void shutdown()
override;
114 void removeOldBackupVersions(
const BackupRule& rule);
115 void refreshBackupRules();
116 bool getMostRecentBackup(
const QString& format, QString& mostRecentBackupFileName, QDateTime& mostRecentBackupTime);
117 int64_t getMostRecentBackupTimeInSecs(
const QString& format);
118 void parseBackupRules(
const QVariantList& backupRules);
120 std::pair<bool, QString> createBackup(
const QString& prefix,
const QString& name);
122 bool recoverFromBackupZip(
const QString& backupName, QuaZip& backupZip,
const QString& username,
const QString& sourceFilename,
bool rollingBack =
false);
125 void removeOldConsolidatedBackups();
126 void consolidateBackupInternal(QString fileName);
131 QTimer _consolidatedBackupCleanupTimer;
133 const QString _consolidatedBackupDirectory;
134 const QString _backupDirectory;
135 std::vector<BackupHandlerPointer> _backupHandlers;
136 std::chrono::milliseconds _persistInterval { 0 };
138 std::mutex _consolidatedBackupsMutex;
139 std::unordered_map<QString, ConsolidatedBackupInfo> _consolidatedBackups;
141 std::atomic<bool> _isRecovering {
false };
142 QString _recoveryError;
143 QString _recoveryFilename { };
145 p_high_resolution_clock::time_point _lastCheck;
146 std::vector<BackupRule> _backupRules;
Manages the domain-wide settings.
Definition: DomainServerSettingsManager.h:75
Definition: GenericThread.h:23
virtual bool process()=0
Override this function to do whatever your class actually does, return false to exit thread early.