Exemplo n.º 1
0
        /// <summary>
        /// 删除一个月前的log
        /// </summary>
        void ClearOverdueLog()
        {
            try
            {
                while (true)
                {
                    if (Signal.IsSystemStoping)
                    {
                        break;
                    }
                    string clearLogTime = "23:00";
                    if (TimeCheckHelper.CheckTime("clearLogTime", clearLogTime))
                    {
                        Common.LogManager.WriteLog(LogFile.Trace, "clear overdue log start");
                        //清理
                        LogTableManager ltm = LogTableManager.Instance;
                        ltm.ClearOverdueLog();
                        Common.LogManager.WriteLog(LogFile.Trace, "clear overdue log end");
                    }

                    System.Threading.Thread.Sleep(1200000);
                }
            }
            catch (Exception ex)
            {
                Common.LogManager.WriteLog(LogFile.System, MessageUtil.GetExceptionMsg(ex, ""));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 用于每天同步 删除pathBk表中job已删除的文件
        /// </summary>
        public void DaySync()
        {
            lock (_lock)
            {
                //获取配置时间
                string syncTime = ConfigUtil.AppSetting("daysyncTime");
                if (TimeCheckHelper.CheckTime("daysyncTime", syncTime))
                {
                    try
                    {
                        #region 判断是否有顶级文件夹未传送
                        new System.Threading.Thread(() =>
                        {
                            CheckTopFolder();
                        }).Start();
                        #endregion
                        #region delete pathBk overdue entry
                        Common.LogManager.WriteLog(Common.LogFile.Trace, "delete pathBk overdue entry start:" + DateTime.Now.ToString());

                        //获取今天产生的delete event entry log文件名
                        string       path = AppDomain.CurrentDomain.BaseDirectory + @"log\FSWDeleteEvent" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                        StreamReader sr   = new StreamReader(path);
                        while (!sr.EndOfStream)
                        {
                            string entry = sr.ReadLine();
                            if (entry.Contains("msID:"))
                            {
                                int firstIndex  = entry.IndexOf("msID:") + 5;
                                int secondIndex = entry.IndexOf(";relativePath:");
                                //获取msid
                                string msid = entry.Substring(firstIndex, secondIndex - firstIndex);
                                //获取relativePath
                                string relativePath = entry.Substring(secondIndex + 14);
                                try
                                {
                                    //删除pathBk里相同的项
                                    SyncDAL sd = new SyncDAL();
                                    sd.DeletePath(msid, relativePath);
                                }
                                catch (Exception ex)
                                {
                                    Common.LogManager.WriteLog(Common.LogFile.Error, MessageUtil.GetExceptionMsg(ex, ""));
                                }
                            }
                        }

                        sr.Close();


                        Common.LogManager.WriteLog(Common.LogFile.Trace, "delete pathBk overdue entry end:" + DateTime.Now.ToString());
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        Common.LogManager.WriteLog(Common.LogFile.Error, MessageUtil.GetExceptionMsg(ex, ""));
                    }
                }
            }
        }
Exemplo n.º 3
0
        public static void Clean()
        {
            string cleanTime = "18:00";

            if (!TimeCheckHelper.CheckTime("cleanTime", cleanTime))
            {
                return;
            }
            try
            {
                //获取monitorservers
                MonitorServerManager monitorServerManager = new MonitorServerManager();
                List <monitorServer> monitorServerList    = monitorServerManager.GetMonitorServerList();

                foreach (monitorServer ms in monitorServerList)
                {
                    //获取job端路径及本地路径
                    string jobPath   = ms.monitorDrive;
                    string localPath = ms.monitorLocalPath;

                    //获取两者第一层子目录
                    List <string> jobPathChilds     = new List <string>();
                    List <string> localPathChilds   = new List <string>();
                    int           nameIndexForjob   = jobPath.Length + 1;
                    int           nameIndexForlocal = localPath.Length + 1;
                    foreach (var jp in Directory.GetFileSystemEntries(jobPath))
                    {
                        jobPathChilds.Add(jp.Substring(nameIndexForjob));
                    }
                    foreach (var lp in Directory.GetFileSystemEntries(localPath))
                    {
                        localPathChilds.Add(lp.Substring(nameIndexForlocal));
                    }

                    //找到并删除job没有的文件夹
                    foreach (string lpc in localPathChilds)
                    {
                        if (!jobPathChilds.Contains(lpc))
                        {
                            /**
                             * 删除
                             */
                            string path = localPath + Path.DirectorySeparatorChar + lpc;
                            logger.Info(path);
                            DeleteFSE(path);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 将SSH方式copy的文件复制到对应的Robocopy目的路径
        /// </summary>
        public void LocalSync(Config config)
        {
            #region 判断robocopy是否结束(ps:由于RoboCopy有时不能正常结束,暂时通过时间配置
            if (TimeCheckHelper.CheckTime("SSHLocalSyncTime", config.SSHLocalSyncTime))
            {
                Common.Util.LogManager.WriteLog(Common.Util.LogFile.LocalSync, "start");
                _localSync(config);
                Common.Util.LogManager.WriteLog(Common.Util.LogFile.LocalSync, "end");

                //执行了一个任务
                Signal.CompletedTaskCount++;
            }
            #endregion
        }
Exemplo n.º 5
0
        /// <summary>
        /// 扫描数据库,判断mac端是否存在
        /// </summary>
        public void LookBackSync(Config config)
        {
            if (TimeCheckHelper.CheckTime("DBSyncTime", config.DBSyncTime))
            {
                //同步数据库 SSH输出 Mac (特殊字符文件)
                Common.Util.LogManager.WriteLog(Common.Util.LogFile.DBSync, "start");

                DBSync(config);

                Common.Util.LogManager.WriteLog(Common.Util.LogFile.DBSync, "end");

                //执行了一个任务
                Signal.CompletedTaskCount++;
            }
        }
Exemplo n.º 6
0
 /// <summary>
 /// 同步
 /// </summary>
 public void Sync()
 {
     lock (_lock)
     {
         //获取配置时间
         string syncTime = ConfigUtil.AppSetting("syncTime");
         if (TimeCheckHelper.CheckTime("syncTime", syncTime))
         {
             Common.LogManager.WriteLog(Common.LogFile.Trace, "Sync start:" + DateTime.Now.ToString());
             //同步数据库 SSH输出 Mac (特殊字符文件)
             StartSync();
             Common.LogManager.WriteLog(Common.LogFile.Trace, "Sync end:" + DateTime.Now.ToString());
         }
     }
 }
Exemplo n.º 7
0
        /// <summary>
        /// 同步 此同步只用于下载查询
        /// </summary>
        public void WeekendSync()
        {
            //获取同步设置dayofweek
            string dayOfWeek = ConfigUtil.AppSetting("dayOfWeek");

            if (!string.IsNullOrWhiteSpace(dayOfWeek) && Regex.IsMatch(dayOfWeek, @"^[0-6]$"))
            {
                DayOfWeek dow = (DayOfWeek)int.Parse(dayOfWeek);
                if (DateTime.Now.DayOfWeek != dow)
                {
                    return;
                }
            }
            else
            {
                Common.LogManager.WriteLog(Common.LogFile.Trace, "please set dayOfWeek correctly  :" + DateTime.Now.ToString());
                return;
            }

            lock (_lock)
            {
                //获取配置时间
                string syncTime = ConfigUtil.AppSetting("syncTime");
                if (TimeCheckHelper.CheckTime("syncTime", syncTime))
                {
                    Common.LogManager.WriteLog(Common.LogFile.Trace, "Sync start:" + DateTime.Now.ToString());
                    ////同步数据库 SSH输出 Mac (特殊字符文件)
                    //StartSync();

                    /**
                     * xiecongwen 20150102
                     * 由于获取文件信息,及进行数据库校验速度过慢,特进行如下修改:
                     *
                     * 1.将ignore日志文件中的文件路径规整到相关数据库表 filelisten log (暂时忽略)
                     * 2.删除pathBK表中所有数据(truncate),将监控目录路径信息备份到此数据库(类似于快照)
                     *   每周执行一次 20150111
                     */
                    //ResolveIgnoreList();

                    BackupPath();
                    //重置monitorfilelisten表
                    TruncateFileListen();
                    Common.LogManager.WriteLog(Common.LogFile.Trace, "Sync end:" + DateTime.Now.ToString());
                }
            }
        }
Exemplo n.º 8
0
        public void Check(Config config)
        {
            ConfigController configCtrl = new ConfigController();

            configCtrl.Save(config);

            config = configCtrl.Get();

            if (MainThread != null)
            {
                MainThread.Start();
            }
            //开始监控
            new Thread(() => {
                IsStoping = false;
                while (true)
                {
                    if (IsStoping)
                    {
                        break;
                    }
                    string syncTime = "checkTime".AppSetting();
                    if (TimeCheckHelper.CheckTime("check", syncTime))
                    {
                        //判断
                        if (!CheckDisk(config))
                        {
                            string content = MessageUtil.LocalIPAddress() + ":" + config.Volume;
                            new SendMail().SendEmailWithSubject(content, "This disk space is insufficient");
                        }
                    }

                    Thread.Sleep(2000);
                }
            }).Start();
        }
Exemplo n.º 9
0
        /// <summary>
        /// 处理文件 暂时只考虑Robocopy
        ///
        /// 构思:读日志、预处理、解析、存数据库
        /// </summary>
        /// <param name="fpath"></param>
        public void Analyse(Config config)
        {
            lock (_lock)
            {
                try
                {
                    //判断当前时间与配置时间是否匹配
                    if (TimeCheckHelper.CheckTime("readLogTime", config.ReadLogTime))
                    {
                        Common.Util.LogManager.WriteLog(Common.Util.LogFile.LogAnalyser, "start");

                        #region process
                        FileSystemUtil fsu = new FileSystemUtil();

                        //获取所有日志文件
                        IEnumerable <FileInfo> copyLogList = GetFileInfos(config.Path.InputLogPath);
                        if (copyLogList == null)
                        {
                            //执行了一个任务
                            Signal.CompletedTaskCount++;

                            Common.Util.LogManager.WriteLog(Common.Util.LogFile.LogAnalyser, "copyLogList is null");
                            return;
                        }

                        foreach (FileInfo fileinfo in copyLogList)
                        {
                            Common.Util.LogManager.WriteLog(Common.Util.LogFile.LogAnalyser, fileinfo.FullName);
                            #region 处理日志文件
                            ILogReader ilr = null;
                            try
                            {
                                //获取出错文件
                                ilr = new RoboCopyLogReader()
                                {
                                    Path = fileinfo.FullName
                                };
                                ErrorPathInfo epi = ilr.GetErrorList();
                                if (epi != null && epi.PathList != null && epi.PathList.Count > 0)
                                {
                                    //预先过滤不必要文件
                                    ErrorPathFilter.PreFilter(epi);
                                    if (epi.PathList.Count > 0)
                                    {
                                        //获取文件详细信息,然后判断是否更新,若更新则执行copy
                                        SSHCopyManager scm = new SSHCopyManager();
                                        scm.SSHCopy(config, epi);
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                Common.Util.LogManager.WriteLog(Common.Util.LogFile.LogAnalyser, MessageUtil.GetExceptionMsg(ex, ""));
                                break;
                            }
                            finally
                            {
                                //释放资源
                                if (ilr != null)
                                {
                                    ilr.Dispose();
                                }
                            }
                            #endregion

                            //删除日志文件
                            fsu.DeleteFile(fileinfo);
                        }
                        #endregion

                        Common.Util.LogManager.WriteLog(Common.Util.LogFile.LogAnalyser, "end");

                        //执行了一个任务
                        Signal.CompletedTaskCount++;
                    }
                }
                catch (System.Exception ex)
                {
                    Common.Util.LogManager.WriteLog(Common.Util.LogFile.LogAnalyser, MessageUtil.GetExceptionMsg(ex, ""));
                }
            }
        }