public String getMessage(JobConfiguration config) { String message = ""; BuildStillRedConfig srConfig = config.bldStillRedConfig; String actualStatus = build.getStatus(); long actualFinishTime = build.getDuraction() + build.getTimestamp(); if (srConfig.statuses.Contains(actualStatus) && config.lastBuildStatus.Contains(actualStatus)) { if (!String.IsNullOrEmpty(srConfig.message)) { message = String.Format(srConfig.message, actualStatus.ToUpper(), build.getNumber()); } if (!String.IsNullOrEmpty(srConfig.participantMsg)) { String participant = build.getParticipant(); if (!String.IsNullOrEmpty(participant)) { message += String.Format(srConfig.participantMsg, TextUtils.optimizeUserName(participant)); } } } return message; }
public static List<JobConfiguration> prepareJobs(String path) { XmlDocument configXml = readConfigFile(path); List<JobConfiguration> jobsConfig = new List<JobConfiguration>(); Trace.Write("++ done, loaded: "); foreach (XmlNode jobNode in configXml.SelectNodes("//job")) { JobConfiguration config = new JobConfiguration(); config.enabled = true; config.activeMessaging = true; config.name = getValue(jobNode, "ciUri", "name"); config.url = getValue(jobNode, "ciUri", "url"); config.timeout = Convert.ToInt64(getValue(jobNode, "ciUri", "timeout")); config.onTime = getValue(jobNode, "ciUri", "onTime"); config.onDate = getValue(jobNode, "ciUri", "onDate"); config.messengerChatId = getValue(jobNode, "messenger", "chatId"); XmlNode jobMonitoring = jobNode.SelectSingleNode("notifications"); XmlNode buildStatusNode = jobMonitoring.SelectSingleNode("buildStatusChanged"); config.bldStatusChanged = Convert.ToBoolean(getValue(buildStatusNode, "enabled")); config.buildStatusTopicChange = Convert.ToBoolean(getValue(buildStatusNode, "topicChange")); if (config.bldStatusChanged) { XmlNodeList jobStatusNodes = buildStatusNode.SelectNodes("status"); List<BuildStatusConfig> buildStatuses = new List<BuildStatusConfig>(jobStatusNodes.Count); String defaultMessageSend = getValue(buildStatusNode, "messageSend"); String defaultMessageText = getValue(buildStatusNode, "defaultMessage"); String defaultTopicChange = getValue(buildStatusNode, "topicChange"); String defaultTopicText = getValue(buildStatusNode, "defaultTopic"); String defaultParameterName = getValue(buildStatusNode, "defaultParameterName"); String defaultParameterMsg = getValue(buildStatusNode, "defaultParameterMsg"); String defaultTextFromLogKey = getValue(buildStatusNode, "defaultTextFromLogKey"); String defaultTextFromLogMsg = getValue(buildStatusNode, "defaultTextFromLogMsg"); foreach (XmlNode jobStatusNode in jobStatusNodes) { BuildStatusConfig buildStatus = new BuildStatusConfig(); buildStatus.type = getValue(jobStatusNode, "type"); buildStatus.messageSend = Convert.ToBoolean(tryGetValue(jobStatusNode, "messageSend", defaultMessageSend)); buildStatus.messageText = tryGetValue(jobStatusNode, "message", defaultMessageText); buildStatus.topicChange = Convert.ToBoolean(tryGetValue(jobStatusNode, "topicChange", defaultTopicChange)); buildStatus.topicText = tryGetValue(jobStatusNode, "topic", defaultTopicText); buildStatus.participantMsg = getValue(jobStatusNode, "participantMsg"); buildStatus.parameterName = tryGetValue(jobStatusNode, "parameterName", defaultParameterName); buildStatus.parameterMsg = tryGetValue(jobStatusNode, "parameterMsg", defaultParameterMsg); buildStatus.textFromLogKey = tryGetValue(jobStatusNode, "textFromLogKey", defaultTextFromLogKey); buildStatus.textFromLogMsg = tryGetValue(jobStatusNode, "textFromLogMsg", defaultTextFromLogMsg); buildStatuses.Add(buildStatus); } config.bldStatusChangedConfigs = buildStatuses; } XmlNode eachBuildStatusNode = jobMonitoring.SelectSingleNode("statusOfEachBuild"); config.eachBuildStatus = Convert.ToBoolean(getValue(eachBuildStatusNode, "enabled")); if (config.eachBuildStatus) { XmlNodeList singleBuildStatusNodes = eachBuildStatusNode.SelectNodes("status"); List<BuildStatusConfig> eachBuildStatuses = new List<BuildStatusConfig>(singleBuildStatusNodes.Count); String defaultMessageSend = getValue(eachBuildStatusNode, "messageSend"); String defaultMessageText = getValue(eachBuildStatusNode, "defaultMessage"); String defaultParameterName = getValue(eachBuildStatusNode, "defaultParameterName"); String defaultParameterMsg = getValue(eachBuildStatusNode, "defaultParameterMsg"); String defaultTextFromLogKey = getValue(eachBuildStatusNode, "defaultTextFromLogKey"); String defaultTextFromLogMsg = getValue(eachBuildStatusNode, "defaultTextFromLogMsg"); foreach (XmlNode singleBuildStatusNode in singleBuildStatusNodes) { BuildStatusConfig buildStatus = new BuildStatusConfig(); buildStatus.type = getValue(singleBuildStatusNode, "type"); buildStatus.messageSend = Convert.ToBoolean(tryGetValue(singleBuildStatusNode, "messageSend", defaultMessageSend)); buildStatus.messageText = tryGetValue(singleBuildStatusNode, "message", defaultMessageText); buildStatus.participantMsg = getValue(singleBuildStatusNode, "participantMsg"); buildStatus.parameterName = tryGetValue(singleBuildStatusNode, "parameterName", defaultParameterName); buildStatus.parameterMsg = tryGetValue(singleBuildStatusNode, "parameterMsg", defaultParameterMsg); buildStatus.textFromLogKey = tryGetValue(singleBuildStatusNode, "textFromLogKey", defaultTextFromLogKey); buildStatus.textFromLogMsg = tryGetValue(singleBuildStatusNode, "textFromLogMsg", defaultTextFromLogMsg); eachBuildStatuses.Add(buildStatus); } config.eachBuildStatusConfigs = eachBuildStatuses; } XmlNode buildStillRedNode = jobMonitoring.SelectSingleNode("buildStillRed"); config.bldStillRed = Convert.ToBoolean(getValue(buildStillRedNode, "enabled")); if (config.bldStillRed) { BuildStillRedConfig buildStillRedConfig = new BuildStillRedConfig(); buildStillRedConfig.statuses = getValue(buildStillRedNode, "type"); buildStillRedConfig.message = getValue(buildStillRedNode, "message"); buildStillRedConfig.participantMsg = getValue(buildStillRedNode, "participantMsg"); config.bldStillRedConfig = buildStillRedConfig; } XmlNode buildFrozen = jobMonitoring.SelectSingleNode("buildFrozen"); config.bldFroze = Convert.ToBoolean(getValue(buildFrozen, "enabled")); if (config.bldFroze) { config.bldFrozenTimeout = Convert.ToInt32(getValue(buildFrozen, "timeout")); config.bldFrozenMessage = getValue(buildFrozen, "message"); } XmlNode dailyReport = jobMonitoring.SelectSingleNode("dailyReport"); config.dailyReport = Convert.ToBoolean(getValue(dailyReport, "enabled")); if (config.dailyReport) { DailyReportConfig dailyReportConfig = new DailyReportConfig(); dailyReportConfig.dailyTimeFrom = getValue(dailyReport, "timeFrom"); dailyReportConfig.dailyTimeTo = getValue(dailyReport, "timeTo"); XmlNodeList messageNodes = dailyReport.SelectNodes("achieve"); List<DailyMessagesConfig> messages = new List<DailyMessagesConfig>(messageNodes.Count); foreach (XmlNode messageNode in messageNodes) { DailyMessagesConfig messageConfig = new DailyMessagesConfig(); messageConfig.type = getValue(messageNode, "type"); messageConfig.condition = getValue(messageNode, "condition"); String minToGet = getValue(messageNode, "minToGet"); if (!String.IsNullOrEmpty(minToGet)) messageConfig.minToGet = Convert.ToInt16(getValue(messageNode, "minToGet")); String maxToGet = getValue(messageNode, "maxToGet"); if (!String.IsNullOrEmpty(maxToGet)) messageConfig.maxToGet = Convert.ToInt16(getValue(messageNode, "maxToGet")); messageConfig.message = getValue(messageNode, "message"); messages.Add(messageConfig); } dailyReportConfig.messageConfig = messages; config.dailyReportConfig = dailyReportConfig; } XmlNode groupStatusNode = jobMonitoring.SelectSingleNode("groupStatusMonitoring"); config.grpStatusMonitoring = Convert.ToBoolean(getValue(groupStatusNode, "enabled")); if (config.grpStatusMonitoring) { XmlNodeList jobStatusNodes = groupStatusNode.SelectNodes("status"); List<BuildStatusConfig> buildStatuses = new List<BuildStatusConfig>(jobStatusNodes.Count); String defaultTopicChange = getValue(groupStatusNode, "topicChange"); String defaultTopicText = getValue(groupStatusNode, "defaultTopic"); foreach (XmlNode jobStatusNode in jobStatusNodes) { BuildStatusConfig buildStatus = new BuildStatusConfig(); buildStatus.type = getValue(jobStatusNode, "type"); buildStatus.topicChange = Convert.ToBoolean(tryGetValue(jobStatusNode, "topicChange", defaultTopicChange)); buildStatus.topicText = tryGetValue(jobStatusNode, "topic", defaultTopicText); buildStatuses.Add(buildStatus); } config.grpStatusMonitoringConfigs = buildStatuses; } //other config.lastBuildStatus = "success"; Trace.Write("'" + config.name + "', "); jobsConfig.Add(config); } Trace.WriteLine(" jobs"); return jobsConfig; }
public void planTask() { while (config.enabled) { Trace.WriteLine("++ at " + TimeUtils.getCurrentTime() + " thread " + Thread.CurrentThread.Name + " is waiting fox execute"); int seconds = 0; long timeout = config.timeout; if (timeout == 0) { timeout = TimeUtils.getSeconsToTime(config.onTime); } do { Thread.Sleep(1000); seconds++; } while (seconds < timeout); Trace.WriteLine("// thread " + Thread.CurrentThread.Name + " start executing after " + timeout + " seconds of waiting"); config = Config.Instance.Find(x => x.name == config.name); executeJob(); config = Config.Instance.Find(x => x.name == config.name); Trace.WriteLine("-- thread " + Thread.CurrentThread.Name + " is finish work"); } }
public TaskExecutors(JobConfiguration configuration) { config = configuration; updateConfigStatus = ConfigurationManager.AppSettings["updateConfigStatus"]; }