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));
            }
        }
Example #5
0
 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();
 }