Example #1
0
        /// <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();
            }
        }
Example #2
0
        /// <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();
        }
Example #3
0
        /// <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);
            }
        }
Example #4
0
        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();
        }