/// <summary> /// 计时器触发,发送一周编译报告 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _sendWeeklyReportTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { string config = System.AppDomain.CurrentDomain.BaseDirectory; int p = config.LastIndexOf("\\"); string parent = config.Substring(0, p - 25); string mailWeekReportPath = parent + "\\common\\WeeklyReport.html"; string mdbPath = parent + "\\common\\res\\CILog.mdb"; string xmlPath = parent + "\\common\\res\\CIconfig.xml"; ConfigController configController = new ConfigController(); ConfigInfo configInfo = configController.ConfigQuery("config/preferences", xmlPath); DayOfWeek today = DateTime.Now.DayOfWeek; bool orMonday = (today.ToString() == "Monday"); bool timeNow = (DateTime.Now.ToShortTimeString() == "8:30"); if (orMonday == false) { _notSendReport = true; } if (orMonday && timeNow && _notSendReport) { _notSendReport = false; //发送一周总结报告邮件 SendMailSlack sendReportMail = new SendMailSlack(null, null, null, null, configInfo, mailWeekReportPath); bool sendSuccess = sendReportMail.SendWeeklyReportFromMongodb(); } }
/// <summary> /// 执行发送邮件的操作 /// </summary> /// <param name="projectInfo">projectInfoGetLocal的信息</param> /// <param name="ifSlack">是否向slack发信息</param> /// <param name="ifMail">是否发送邮件</param> private void SendSlackMail(ProjectInfo projectInfo, string mailPath, string xmlPath) { SendMailSlack sendMailSlack = new SendMailSlack(projectInfo, mailPath, updateLog, xmlPath, infoStatXmlPath); Thread sendMail = new Thread(sendMailSlack.SendMail); Thread sendSlack = new Thread(sendMailSlack.SendSlack); // Thread sendLogMessage = new Thread(sendMailSlack.SendLogMessage); sendMail.Start(); sendSlack.Start(); // sendLogMessage.Start(); }
/// <summary> /// 计时器触发,发送一周编译报告 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _sendWeeklyReportTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { string config = System.AppDomain.CurrentDomain.BaseDirectory; int p = config.LastIndexOf("\\"); string parent = config.Substring(0, p - 25); string mailWeekReportPath = parent + "\\common\\WeeklyReport.html"; DayOfWeek today = DateTime.Now.DayOfWeek; bool orMonday = (today.ToString() == "Monday"); bool timeNow = (DateTime.Now.ToShortTimeString() == "8:30"); if (orMonday == false) { _notSendReport = true; } if (orMonday && timeNow && _notSendReport) { //发送一周总结报告邮件 SendMailSlack sendReportMail = new SendMailSlack(null, mailWeekReportPath, null, null, parent + "\\common\\res\\InfoStatics.xml"); bool sendSuccess = sendReportMail.SendWeeklyReport(); _notSendReport = false; //进行数据清空 //进行成员数据清空 Dictionary <string, string> clearMemberZero = new Dictionary <string, string>(); clearMemberZero.Add("Week", "0"); clearMemberZero.Add("Success", "0"); clearMemberZero.Add("Failure", "0"); _projectController.ClearTimesAfterSendReport("config/Member", parent + "\\common\\res\\InfoStatics.xml", clearMemberZero, "memberTimes"); //进行总提交次数清空 Dictionary <string, string> clearWeekTotalZero = new Dictionary <string, string>(); clearWeekTotalZero.Add("CommitTimes", "0"); clearWeekTotalZero.Add("BuildTimes", "0"); clearWeekTotalZero.Add("BuildSuccessTimes", "0"); clearWeekTotalZero.Add("BuildFailedTimes", "0"); _projectController.ClearTimesAfterSendReport("config/WeekTotal", parent + "\\common\\res\\InfoStatics.xml", clearWeekTotalZero, "totalTimes"); //projects进行清空 _projectController.ClearTimesAfterSendReport("config/Projects", parent + "\\common\\res\\InfoStatics.xml", null, null); } }
private void fun() { string config = System.AppDomain.CurrentDomain.BaseDirectory; int p = config.LastIndexOf("\\"); string parent = config.Substring(0, p - 25); string xmlPath = parent + "\\common\\res\\CIconfig.xml"; string buildXmlPath = parent + "\\common\\res\\BuildResultLogs.xml"; string lastXmlPath = parent + "\\common\\res\\LastestInfo.xml"; infoStatXmlPath = parent + "\\common\\res\\InfoStatics.xml"; string mailPath = parent + "\\common\\SendMail.html"; string mailWeekReportPath = parent + "\\common\\WeeklyReport.html"; List <ProjectInfo> projectInfos = _projectController.ProjectQuery("/config/Projects", true, xmlPath); List <ProjectInfo> lastResults = _projectController.ReadLog("/config/Projects", buildXmlPath); // Thread.Sleep(40000); foreach (var projectInfo in projectInfos) { if (projectInfo.Statusproperty == "true") { //保存修改前的版本以便回滚 ProjectInfo lastestInfo = _projectController.ProjectQuery("config/lastest", false, lastXmlPath).First(); //将当前运行项目及运行状态存储 Dictionary <string, string> startValue = new Dictionary <string, string>(); startValue.Add("projectName", projectInfo.Nameproperty); startValue.Add("result", "running"); _projectController.ModifyProject(startValue, null, lastXmlPath, "lastest"); //更新项目,若版本号未变则无需编译否则编译 Boolean updateResult = UpdateProject(projectInfo, xmlPath, buildXmlPath); //如果无需编译,则结果会滚到改变前的版本 //测试语句 //if(false) if (updateResult) { Dictionary <string, string> revertLastInfo = new Dictionary <string, string>(); revertLastInfo.Add("projectName", lastestInfo.Nameproperty); revertLastInfo.Add("result", lastestInfo.Result); _projectController.ModifyProject(revertLastInfo, null, lastXmlPath, "lastest"); } else { //发送更新信息 ProjectInfo projectInfoGetLocal = _svnController.GetLocalInfo(projectInfo); projectInfoGetLocal.Revision = _latestRevision; Dictionary <string, string> setValue = new Dictionary <string, string>(); setValue.Add("Name", projectInfoGetLocal.Author.Split('\\')[1]); _projectController.CommitStat("update", setValue, "config/Member", infoStatXmlPath); //检查infoStatics文件夹中有没有提交的项目,若是有则进行相对应的节点数值加1处理,若是没有,则进行创建,并进行初始化 List <ProjectInfo> checkProjectInfos = _projectController.ProjectQuery("/config/Projects", true, infoStatXmlPath); //进行创建 bool whetherCreateAtInfoStatics = true; foreach (ProjectInfo proName in checkProjectInfos) { if (proName.Nameproperty == projectInfo.Nameproperty) { whetherCreateAtInfoStatics = false; break; } } if (checkProjectInfos.Count == 0 || whetherCreateAtInfoStatics) { var childNodes = new Dictionary <string, string>(); var property = new Dictionary <string, string>(); childNodes.Add("Commit", "1"); childNodes.Add("Build", "0"); childNodes.Add("Success", "0"); childNodes.Add("Failed", "0"); property.Add("Name", projectInfo.Nameproperty); _projectController.AddProject(childNodes, property, infoStatXmlPath); } //进行加1处理 else { Dictionary <string, string> projectName = new Dictionary <string, string>(); projectName.Add("Name", projectInfo.Nameproperty); _projectController.CommitStat("projectsCommit", projectName, "config/Projects", infoStatXmlPath); } //将更新记录记入统计 //Dictionary<string, string> setUpdateValue = new Dictionary<string, string>(); //setUpdateValue.Add("Name", projectInfoGetLocal.Author.Split('\\')[1]); //_projectController.CommitStat("update", setUpdateValue, "config/Member", infoStatXmlPath); SendMailSlack sendMailSlack = new SendMailSlack(projectInfoGetLocal, null, updateLog, xmlPath, infoStatXmlPath); Thread sendLogMessage = new Thread(sendMailSlack.SendLogMessage); sendLogMessage.Start(); //编译项目 ProjectInfo buildFinishedInfo = BuildProject(projectInfoGetLocal, xmlPath); //存储编译信息 SaveInfo(buildFinishedInfo, buildXmlPath, lastXmlPath); if (buildFinishedInfo.Result == "successful") { _projectController.CommitStat("success", setValue, "config/Member", infoStatXmlPath); Dictionary <string, string> projectName = new Dictionary <string, string>(); projectName.Add("Name", projectInfo.Nameproperty); _projectController.CommitStat("projectSuccess", projectName, "config/Projects", infoStatXmlPath); } else if (buildFinishedInfo.Result == "failed") { _projectController.CommitStat("failure", setValue, "config/Member", infoStatXmlPath); Dictionary <string, string> projectName = new Dictionary <string, string>(); projectName.Add("Name", projectInfo.Nameproperty); _projectController.CommitStat("projectFailed", projectName, "config/Projects", infoStatXmlPath); } //先从本地svn完善项目信息后自动发送邮件 // ProjectInfo projectInfoGetLocal = _svnController.GetLocalInfo(buildFinishedInfo); SendSlackMail(buildFinishedInfo, mailPath, xmlPath); } } } XmlNodeList xmlNodeLost = _configController.FindConfigInfo("/config/preferences/UpdateInterval", xmlPath); int updateInterval = int.Parse(xmlNodeLost[0].InnerText); Thread.Sleep(updateInterval * 60000); Thread t = new Thread(fun); t.Start(); }