Skip to content

Commit

Permalink
[#noissue] Refactor Batch module
Browse files Browse the repository at this point in the history
  • Loading branch information
emeroad committed Aug 4, 2023
1 parent 193c9c3 commit 8806879
Show file tree
Hide file tree
Showing 26 changed files with 496 additions and 287 deletions.
8 changes: 8 additions & 0 deletions batch-alarmsender/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -78,5 +78,13 @@
<groupId>com.navercorp.pinpoint</groupId>
<artifactId>pinpoint-user</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -1,17 +1,63 @@
package com.navercorp.pinpoint.batch.alarm;

import com.navercorp.pinpoint.batch.alarm.sender.MailSender;
import com.navercorp.pinpoint.batch.alarm.sender.SpringSmtpMailSender;
import com.navercorp.pinpoint.batch.alarm.sender.WebhookPayloadFactory;
import com.navercorp.pinpoint.batch.alarm.sender.WebhookSender;
import com.navercorp.pinpoint.batch.alarm.sender.WebhookSenderEmptyImpl;
import com.navercorp.pinpoint.batch.alarm.sender.WebhookSenderImpl;
import com.navercorp.pinpoint.web.service.UserGroupService;
import com.navercorp.pinpoint.web.service.UserService;
import com.navercorp.pinpoint.web.webhook.WebhookModule;
import com.navercorp.pinpoint.web.webhook.service.WebhookService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.Import;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.web.client.RestTemplate;

import javax.mail.MessagingException;

/**
* JavaMailSenderImpl Properties
* <a href="https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.html">...</a>
*/
@Configuration
@ImportResource({
"classpath:applicationContext-batch-sender.xml"
@Import({
AlarmSenderProperties.class,
MailSenderAutoConfiguration.class
})
public class AlarmSenderConfiguration {


@Bean
public AlarmSenderProperties alarmSenderProperties() {
return new AlarmSenderProperties();
public MailSender springMailSender(AlarmSenderProperties alarmSenderProperties,
UserGroupService userGroupService,
JavaMailSenderImpl mailSender) throws MessagingException {
return new SpringSmtpMailSender(alarmSenderProperties, userGroupService, mailSender);
}


@Bean
@ConditionalOnProperty(name = WebhookModule.NAME, havingValue = "true", matchIfMissing = true)
public WebhookSender webhookSender(AlarmSenderProperties alarmSenderProperties,
UserService userService,
RestTemplate restTemplate,
WebhookService webhookService) {
String pinpointUrl = alarmSenderProperties.getPinpointUrl();
String batchEnv = alarmSenderProperties.getBatchEnv();

WebhookPayloadFactory webhookPayloadFactory = new WebhookPayloadFactory(pinpointUrl, batchEnv);
return new WebhookSenderImpl(webhookPayloadFactory, userService, restTemplate, webhookService);
}

@Bean("webhookSender")
@ConditionalOnProperty(name = WebhookModule.NAME, havingValue = "false")
public WebhookSender webhookSenderEmpty() {
return new WebhookSenderEmptyImpl();
}


}
Original file line number Diff line number Diff line change
@@ -1,51 +1,54 @@
package com.navercorp.pinpoint.batch.alarm;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailParseException;

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import java.util.Objects;

public class AlarmSenderProperties {
@Value("${webhook.enable}")
private boolean webhookEnable;

@Value("${alarm.mail.server.url}")
private String emailServerUrl;
private final InternetAddress senderEmailAddress;

@Value("${alarm.mail.sender.address}")
private String senderEmailAddress;
private final String pinpointUrl;

@Value("${pinpoint.url}")
private String pinpointUrl;
private final String batchEnv;

@Value("${batch.server.env}")
private String batchEnv;
public AlarmSenderProperties(@Value("${spring.mail.properties.mail.smtp.from}") String senderEmailAddress,
@Value("${pinpoint.url}") String pinpointUrl,
@Value("${batch.server.env}") String batchEnv) {
Objects.requireNonNull(senderEmailAddress, "senderEmailAddress");
try {
this.senderEmailAddress = new InternetAddress(senderEmailAddress);
} catch (AddressException e) {
throw new MailParseException(e);
}

public boolean isWebhookEnable() {
return webhookEnable;
this.pinpointUrl = Objects.requireNonNull(pinpointUrl, "pinpointUrl");
this.batchEnv = Objects.requireNonNull(batchEnv, "batchEnv");
}

public String getPinpointUrl() {
return pinpointUrl;
}

public String getEmailServerUrl() {
return emailServerUrl;
}

public String getSenderEmailAddress() {
public InternetAddress getSenderEmailAddress() {
return senderEmailAddress;
}


public String getBatchEnv() {
return batchEnv;
}


@Override
public String toString() {
return "AlarmSenderProperties{" +
"emailServerUrl='" + emailServerUrl + '\'' +
", batchEnv='" + batchEnv + '\'' +
", senderEmailAddress='" + senderEmailAddress + '\'' +
", pinpointUrl='" + pinpointUrl + '\'' +
", webhookEnable=" + webhookEnable +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,16 @@
import com.navercorp.pinpoint.batch.alarm.checker.AlarmCheckerInterface;
import com.navercorp.pinpoint.batch.alarm.checker.PinotAlarmCheckerInterface;
import com.navercorp.pinpoint.web.service.UserGroupService;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.apache.logging.log4j.Logger;
import org.springframework.mail.javamail.JavaMailSender;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

Expand All @@ -40,21 +42,20 @@ public class SpringSmtpMailSender implements MailSender {
private final String batchEnv;
private final String pinpointUrl;
private final InternetAddress senderEmailAddress;
private final JavaMailSenderImpl springMailSender;
private final JavaMailSender springMailSender;

public SpringSmtpMailSender(AlarmSenderProperties alarmSenderProperties, UserGroupService userGroupService, JavaMailSenderImpl springMailSender) {
public SpringSmtpMailSender(AlarmSenderProperties alarmSenderProperties,
UserGroupService userGroupService,
JavaMailSender springMailSender) {
Objects.requireNonNull(alarmSenderProperties, "alarmSenderProperties");
this.pinpointUrl = alarmSenderProperties.getPinpointUrl();
this.batchEnv = alarmSenderProperties.getBatchEnv();

this.userGroupService = Objects.requireNonNull(userGroupService, "userGroupService");
this.springMailSender = Objects.requireNonNull(springMailSender, "mailSender");
this.springMailSender = Objects.requireNonNull(springMailSender, "springMailSender");

this.senderEmailAddress = alarmSenderProperties.getSenderEmailAddress();

try {
this.senderEmailAddress = new InternetAddress(alarmSenderProperties.getSenderEmailAddress());
} catch (AddressException e) {
throw new RuntimeException(e);
}
}

@Override
Expand All @@ -65,22 +66,29 @@ public void sendEmail(AlarmCheckerInterface checker, int sequenceCount) {
return;
}

try{
try {
AlarmMailTemplate mailTemplate = new AlarmMailTemplate(checker, pinpointUrl, batchEnv, sequenceCount);
MimeMessage message = springMailSender.createMimeMessage();
message.setFrom(senderEmailAddress);
message.setRecipients(Message.RecipientType.TO, getReceivers(receivers));

final String subject = mailTemplate.createSubject();
message.setSubject(subject);
message.setContent(mailTemplate.createBody(), "text/html");
final MimeMessage message = newMimeMessage(mailTemplate, receivers);

springMailSender.send(message);
logger.info("send email : {}", subject);
} catch(Exception e) {
logger.info("send email : {}", message.getSubject());
} catch (Exception e) {
logger.error("can't send alarm email. {}", checker.toString(), e);
}
}

private MimeMessage newMimeMessage(AlarmMailTemplate mailTemplate, List<String> receivers) throws MessagingException {
MimeMessage message = springMailSender.createMimeMessage();
message.setFrom(this.senderEmailAddress);
message.setRecipients(Message.RecipientType.TO, getReceivers(receivers));

final String subject = mailTemplate.createSubject();
message.setSubject(subject);
message.setContent(mailTemplate.createBody(), "text/html");
return message;
}

@Override
public void sendEmail(PinotAlarmCheckerInterface checker, int index) {
String userGroupId = checker.getUserGroupId(index);
Expand All @@ -89,29 +97,31 @@ public void sendEmail(PinotAlarmCheckerInterface checker, int index) {
return;
}

try{
try {
PinotAlarmMailTemplate mailTemplate = new PinotAlarmMailTemplate(pinpointUrl, batchEnv, checker, index);
MimeMessage message = springMailSender.createMimeMessage();
message.setFrom(senderEmailAddress);
message.setRecipients(Message.RecipientType.TO, getReceivers(receivers));

final String subject = mailTemplate.createSubject();
final String subject = mailTemplate.createSubject();
message.setSubject(subject);
message.setContent(mailTemplate.createBody(), "text/html");
springMailSender.send(message);
logger.info("send email : {}", subject);
} catch(Exception e) {
} catch (Exception e) {
logger.error("can't send alarm email. {}", checker.toString(), e);
}
}

private InternetAddress[] getReceivers(List<String> receivers) throws AddressException {
InternetAddress[] receiverArray = new InternetAddress[receivers.size()];
int index = 0;
for (String receiver : receivers) {
receiverArray[index++] = new InternetAddress(receiver);
private InternetAddress[] getReceivers(List<String> receivers) {
List<InternetAddress> receiverArray = new ArrayList<>(receivers.size());
for (final String receiver : receivers) {
try {
receiverArray.add(new InternetAddress(receiver));
} catch (AddressException e) {
logger.info("address parse error receiver-address:{}", receiver, e);
}
}

return receiverArray;
return receiverArray.toArray(new InternetAddress[0]);
}
}

This file was deleted.

This file was deleted.

11 changes: 6 additions & 5 deletions batch/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-tomcat</artifactId>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->


<dependency>
<groupId>org.springframework</groupId>
Expand Down

0 comments on commit 8806879

Please sign in to comment.