private List <BackupContainer <T> > loadBackupContainers <T>(string fileName, string backupName) { List <BackupContainer <T> > result = new List <BackupContainer <T> >(); StreamReader reader = new StreamReader(fileName, Encoding.UTF8); try { reader.BaseStream.Position = 0; while (!reader.EndOfStream) { string json = reader.ReadLine(); BackupContainer <object> res = HelperSerialization.JSONDeserialization <BackupContainer <object> >(json); BackupContainer <T> clearRes = new BackupContainer <T>(res.Id, default, res.TimeString, res.Reason, res.ByWho);
public BackupSystem(Logger logger = null, string configFile = "") { this._logger = logger; this._configDirectoryBackups = $"{Directory.GetCurrentDirectory()}/backup"; this._configDateTimeFormat = "yyyy.MM.dd@HH-mm-ss-fffffff#zz"; if ((configFile != "") && (File.Exists(configFile))) { if (!HelperSerialization.TryJSONFileDeserialization <BackupConfig>(configFile, out BackupConfig config)) { logger.Critical(String.Format("BackupSystem config parsing error! Check directory '{0}/{1}' ", Directory.GetCurrentDirectory(), configFile)); throw new Exception("BackupSystem config parsing error!"); } this._configDirectoryBackups = Directory.GetCurrentDirectory() + "/" + config.DirectoryBackups; this._configDateTimeFormat = config.DateTimeFullFormatString; } }
public void MakeBackupFull <T>(string name, Dictionary <string, T> objs, string reasonId = "", string byWho = "") { string timeString = DateTime.Now.ToString(this._configDateTimeFormat); string dir = $"{this._configDirectoryBackups}/{name}/"; string fileName = $"{dir}/full/{timeString}.json"; string backup = ""; try { lock (this.getLocker(name)) { Directory.CreateDirectory($"{dir}/full"); Directory.CreateDirectory($"{dir}/stacks"); string stackFileName = $"{dir}/stack.json"; string newStackFileName = $"{dir}/stacks/{timeString}.json"; if (File.Exists(stackFileName)) { File.Move(stackFileName, newStackFileName); } StreamWriter writer = new StreamWriter(fileName, true, Encoding.UTF8); foreach (string id in objs.Keys) { backup = HelperSerialization.JSONSerialization(new BackupContainer <object>(id, objs[id], timeString, reasonId, byWho)); writer.WriteLine(backup); } writer.Flush(); writer.Close(); } } catch (Exception e) { if (this._logger != null) { this._logger.Error(e, String.Format("Error of full making backup '{0}' obj='{1}'.", name, objs.ToJSON())); } return; } if (this._logger != null) { this._logger.Info(String.Format("Made full backup '{0}'.", name)); } }
private void makeBackup(string name, object obj, object id, string reasonId = "", string byWho = "", bool delete = false) { string idStr = id.ToString(); string timeString = DateTime.Now.ToString(this._configDateTimeFormat); string dir = $"{this._configDirectoryBackups}/{name}/"; string fileName = $"{dir}/stack.json"; string backup = ""; try { BackupContainer <object> bc = new BackupContainer <object>(idStr, obj, timeString, reasonId, byWho); bc.Delete = delete; backup = HelperSerialization.JSONSerialization(bc); lock (this.getLocker(name)) { Directory.CreateDirectory(dir); StreamWriter writer = new StreamWriter(fileName, true, Encoding.UTF8); long size = writer.BaseStream.Length; writer.WriteLine(backup); writer.Flush(); writer.Close(); if (size > 8000000) //больше 8 мб { Directory.CreateDirectory($"{dir}/stacks"); string newFileName = $"{dir}/stacks/{timeString}.json"; File.Move(fileName, newFileName); } } } catch (Exception e) { if (this._logger != null) { this._logger.Error(e, String.Format("Error of making backup '{0}' obj='{1}'.", name, obj.ToJSON())); } return; } if (this._logger != null) { this._logger.Info(String.Format("Made backup '{0}'.", name)); } }
public Logger(string configFile = "") { this._typeForImmediatelyFlush.Add(LogType.Error); this._typeForImmediatelyFlush.Add(LogType.Critical); this._configLogDirectory = Directory.GetCurrentDirectory() + "/"; this._configLogFile = _configLogDirectory + "logs_" + DateTime.Now.Ticks + ".txt"; this._configErrorFile = _configLogDirectory + "errors_" + DateTime.Now.Ticks + ".txt"; if ((configFile != "") && (File.Exists(configFile))) { if (!HelperSerialization.TryJSONFileDeserialization <LoggerConfig>(configFile, out LoggerConfig config)) { throw new Exception("Logger config parsing error!"); } this._configLogDirectory = this._configLogDirectory + config.Directory + "/"; if (!Directory.Exists(this._configLogDirectory)) { Directory.CreateDirectory(this._configLogDirectory); } if (config.LogRotationViaSeconds == 0) { this._configLogFile = this._configLogDirectory + "logs.txt"; this._configErrorFile = this._configLogDirectory + "errors.txt"; } else { DateTime now = DateTime.Now; this._configLogFile = this._configLogDirectory + "logs_" + now.Ticks + ".txt"; this._configErrorFile = this._configLogDirectory + "errors_" + now.Ticks + ".txt"; } this._configSecondsToFlush = config.FlushDataViaSeconds; this._configSecondsToRotate = config.LogRotationViaSeconds; this._typeForLogging = this.parserLogTypes(config.LogTypeForLogging); this._typeForConsole = this.parserLogTypes(config.LogTypeForShowInConsole); this._typeForImmediatelyFlush = this.parserLogTypes(config.LogTypeForImmediatelyFlush); } this._writerLog = new StreamWriter(this._configLogFile, true, Encoding.UTF8); this._writerError = new StreamWriter(this._configErrorFile, true, Encoding.UTF8); this._timer = new Thread(this.timerTick); this._timer.Start(); }