/// <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, "")); } }
/// <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, "")); } } } }
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); } }
/// <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 }
/// <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++; } }
/// <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()); } } }
/// <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()); } } }
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(); }
/// <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, "")); } } }