You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2019/04/19 12:22:12 UTC
[ignite-teamcity-bot] branch ignite-11779 updated: IGNITE-11779
Support configurable notifications for non-master branches
This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch ignite-11779
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/ignite-11779 by this push:
new 018c573 IGNITE-11779 Support configurable notifications for non-master branches
018c573 is described below
commit 018c57338737695ac9f48ae9a09db6a04e73caf9
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Fri Apr 19 15:22:07 2019 +0300
IGNITE-11779 Support configurable notifications for non-master branches
---
conf/branches.json | 12 +++--
.../org/apache/ignite/ci/conf/PasswordEncoder.java | 14 +++--
.../org/apache/ignite/ci/mail/EmailSender.java | 33 ++++--------
...NotificationsConfig.java => EmailSettings.java} | 48 +++++++----------
.../ci/tcbot/conf/LocalFilesBasedConfig.java | 7 +--
.../ignite/ci/tcbot/conf/NotificationsConfig.java | 62 ++++++++++++++++------
.../ignite/ci/tcbot/issue/IssueDetector.java | 7 ++-
7 files changed, 99 insertions(+), 84 deletions(-)
diff --git a/conf/branches.json b/conf/branches.json
index e757811..5c0ec1d 100644
--- a/conf/branches.json
+++ b/conf/branches.json
@@ -43,10 +43,14 @@
}
],
"notifications": {
-
- /** */
- "emailUsername": "ignitetcbot@gmail.com",
- ""
+ /* Email sending settings, only smtp.gmail.com is now supported. */
+ "email": {
+ /* Username, equal to from: field */
+ "username": "ignitetcbot@gmail.com",
+ /** Email password encoded using Password Encoder. */
+ //todo specify password
+ "pwd": "",
+ }
},
"branches": [
{
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/PasswordEncoder.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/PasswordEncoder.java
index 8cf5f88..9d04779 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/PasswordEncoder.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/PasswordEncoder.java
@@ -95,15 +95,23 @@ public class PasswordEncoder {
Preconditions.checkState(decode.equals(pass));
}
- public static void main1(String[] args) {
- String pass = "mmm";
+ public static void mainEncodeEmailPassword(String[] args) {
+ String pass = "Enter Password Here";
String encode = encode(pass);
- System.err.println("Encoded: " + HelperConfig.ENCODED_PASSWORD + "=" + encode);
+ System.err.println("\"notifications\": {\n" +
+ " \"email\": {\n" +
+ " \"pwd\": \"" + encode+ "\",\n" +
+ " }\n" +
+ " } ");
String decode = decode(encode);
Preconditions.checkState(decode.equals(pass));
}
public static void main(String[] args) {
+ mainEncodeEmailPassword(args);
+ }
+
+ public static void main1(String[] args) {
encodeJiraTok("ignitetcbot", "21313");
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java
index adec91d..f047312 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/mail/EmailSender.java
@@ -29,31 +29,20 @@ import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
-import org.apache.ignite.ci.HelperConfig;
-import org.apache.ignite.ci.conf.PasswordEncoder;
+import org.apache.ignite.ci.tcbot.conf.NotificationsConfig;
/**
* Class for sending email with configured credentials.
*/
public class EmailSender {
- public static void main(String[] args) {
+ public static boolean sendEmail(String to, String subject, String html, String plainText,
+ NotificationsConfig notifications) {
- // Recipient's email ID needs to be mentioned.
- String to = "dpavlov.spb@gmail.com";
+ String user = notifications.emailUsernameMandatory();
- String html = "<p>This is actual message</p>";
+ String from = user;
- String subject = "This is the Subject Line!";
-
- sendEmail(to, subject, html, "This is actual message.");
- }
-
- public static void sendEmail(String to, String subject, String html, String plainText) {
- Properties cfgProps = HelperConfig.loadEmailSettings();
- String from = HelperConfig.getMandatoryProperty(cfgProps, HelperConfig.USERNAME, HelperConfig.MAIL_PROPS);
- String enc = HelperConfig.getMandatoryProperty(cfgProps, HelperConfig.ENCODED_PASSWORD, HelperConfig.MAIL_PROPS);
-
- String pwd = PasswordEncoder.decode(enc);
+ final String pwd = notifications.emailPasswordClearMandatory();
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
@@ -62,16 +51,13 @@ public class EmailSender {
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
- // Sender's email ID needs to be mentioned
- // Setup mail getOrCreateCreds
- // Get the default Session object.
-
Session ses = Session.getInstance(props,
new Authenticator() {
@Override protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(from, pwd);
+ return new PasswordAuthentication(user, pwd);
}
});
+
try {
// Create a default MimeMessage object.
MimeMessage msg = new MimeMessage(ses);
@@ -102,9 +88,12 @@ public class EmailSender {
Transport.send(msg);
System.out.println("Sent message successfully to [" + to + "]...");
+
+ return true;
}
catch (MessagingException mex) {
mex.printStackTrace();
}
+ return false;
}
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/EmailSettings.java
similarity index 55%
copy from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java
copy to ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/EmailSettings.java
index ae7e7aa..55b028e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/EmailSettings.java
@@ -14,52 +14,40 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.ignite.ci.tcbot.conf;
-import jdk.internal.joptsimple.internal.Strings;
-
-/**
- * Notifications Config
- */
-public class NotificationsConfig {
+public class EmailSettings {
/** Email to send notifications from. */
- String emailUsername;
- /** Email password. */
- String emailPwd;
-
- /** Slack auth token. Not encoded using Password encoder */
- String slackAuthTok;
-
- public boolean isEmpty() {
- return Strings.isNullOrEmpty(emailUsername)
- && Strings.isNullOrEmpty(emailPwd)
- && Strings.isNullOrEmpty(slackAuthTok);
- }
+ private String username;
- public String slackAuthToken() {
- return slackAuthTok;
- }
+ /** Email password, encoded using Password Encoder. */
+ private String pwd;
/**
* @return Email to send notifications from.
*/
- public String emailUsername() {
- return emailUsername;
+ public String username() {
+ return username;
}
+ /**
+ * @param username New email to send notifications from.
+ */
+ public void username(String username) {
+ this.username = username;
+ }
/**
- * @return Email password.
+ * @return Email password, encoded using Password Encoder.
*/
- public String emailPassword() {
- return emailPwd;
+ public String password() {
+ return pwd;
}
/**
- * @param emailPwd New email password.
+ * @param pwd New email password, encoded using Password Encoder.
*/
- public void emailPassword(String emailPwd) {
- this.emailPwd = emailPwd;
+ public void password(String pwd) {
+ this.pwd = pwd;
}
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
index 39f0ef2..d20647b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
@@ -76,12 +76,7 @@ public class LocalFilesBasedConfig implements ITcBotConfig {
if (notifications != null && !notifications.isEmpty())
return notifications;
- Properties cfgProps = HelperConfig.loadEmailSettings();
- final String authTok = cfgProps.getProperty(HelperConfig.SLACK_AUTH_TOKEN);
-
- NotificationsConfig cfg = new NotificationsConfig();
- cfg.slackAuthTok = authTok;
- return notifications;
+ return NotificationsConfig.backwardConfig();
}
/** {@inheritDoc} */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java
index ae7e7aa..cefbe7f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/NotificationsConfig.java
@@ -17,23 +17,43 @@
package org.apache.ignite.ci.tcbot.conf;
-import jdk.internal.joptsimple.internal.Strings;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import java.util.Properties;
+import javax.annotation.Nonnull;
+import org.apache.ignite.ci.HelperConfig;
+import org.apache.ignite.ci.conf.PasswordEncoder;
+import org.jetbrains.annotations.NotNull;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
/**
* Notifications Config
*/
public class NotificationsConfig {
- /** Email to send notifications from. */
- String emailUsername;
- /** Email password. */
- String emailPwd;
+ /** Email. */
+ private EmailSettings email = new EmailSettings();
/** Slack auth token. Not encoded using Password encoder */
- String slackAuthTok;
+ private String slackAuthTok;
+
+ @NotNull public static NotificationsConfig backwardConfig() {
+ Properties cfgProps = HelperConfig.loadEmailSettings();
+
+ NotificationsConfig cfg = new NotificationsConfig();
+
+ cfg.slackAuthTok = cfgProps.getProperty(HelperConfig.SLACK_AUTH_TOKEN);
+
+ cfg.email.username(cfgProps.getProperty(HelperConfig.USERNAME));
+
+ cfg.email.password(cfgProps.getProperty(HelperConfig.ENCODED_PASSWORD));
+
+ return cfg;
+ }
public boolean isEmpty() {
- return Strings.isNullOrEmpty(emailUsername)
- && Strings.isNullOrEmpty(emailPwd)
+ return (email == null || Strings.isNullOrEmpty(email.username()))
+ && (email == null || Strings.isNullOrEmpty(email.password()))
&& Strings.isNullOrEmpty(slackAuthTok);
}
@@ -45,21 +65,29 @@ public class NotificationsConfig {
* @return Email to send notifications from.
*/
public String emailUsername() {
- return emailUsername;
+ return email == null ? null : email.username();
}
+ public String emailUsernameMandatory() {
+ String username = emailUsername();
- /**
- * @return Email password.
- */
- public String emailPassword() {
- return emailPwd;
+ Preconditions.checkState(!isNullOrEmpty(username),
+ "notifications/email/username property should be filled in branches.json");
+
+ return username;
}
+
/**
- * @param emailPwd New email password.
+ * @return Email password.
*/
- public void emailPassword(String emailPwd) {
- this.emailPwd = emailPwd;
+ @Nonnull
+ public String emailPasswordClearMandatory() {
+ Preconditions.checkNotNull(email,
+ "notifications/email/pwd property should be filled in branches.json");
+ Preconditions.checkState(!isNullOrEmpty(email.password()),
+ "notifications/email/pwd property should be filled in branches.json");
+
+ return PasswordEncoder.decode(email.password());
}
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
index 634263d..a3b9610 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
@@ -47,6 +47,7 @@ import org.apache.ignite.ci.mail.EmailSender;
import org.apache.ignite.ci.mail.SlackSender;
import org.apache.ignite.ci.tcbot.chain.TrackedBranchChainsProcessor;
import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.ci.tcbot.conf.NotificationsConfig;
import org.apache.ignite.ci.tcbot.conf.TcServerConfig;
import org.apache.ignite.ci.tcbot.user.IUserStorage;
import org.apache.ignite.ci.teamcity.ignited.IRunHistory;
@@ -191,6 +192,8 @@ public class IssueDetector {
if (toBeSent.isEmpty())
return "Noting to notify, " + issuesChecked + " issues checked";
+ NotificationsConfig notifications = cfg.notifications();
+
StringBuilder res = new StringBuilder();
Collection<Notification> values = toBeSent.values();
for (Notification next : values) {
@@ -200,7 +203,7 @@ public class IssueDetector {
List<String> messages = next.toSlackMarkup();
for (String msg : messages) {
- final boolean snd = SlackSender.sendMessage(slackUser, msg, cfg.notifications());
+ final boolean snd = SlackSender.sendMessage(slackUser, msg, notifications);
res.append("Send ").append(slackUser).append(": ").append(snd);
if (!snd)
@@ -211,7 +214,7 @@ public class IssueDetector {
String builds = next.buildIdToIssue.keySet().toString();
String subj = "[MTCGA]: " + next.countIssues() + " new failures in builds " + builds + " needs to be handled";
- EmailSender.sendEmail(next.addr, subj, next.toHtml(), next.toPlainText());
+ EmailSender.sendEmail(next.addr, subj, next.toHtml(), next.toPlainText(), notifications);
res.append("Send ").append(next.addr).append(" subject: ").append(subj);
}
}