Advertisement
Guest User

VentSystemMailScheduller

a guest
Jun 24th, 2018
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.53 KB | None | 0 0
  1. package com.corporation.module.schedullers;
  2.  
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.data.mongodb.core.MongoTemplate;
  7. import org.springframework.scheduling.annotation.Scheduled;
  8. import org.springframework.stereotype.Component;
  9.  
  10. import java.util.Calendar;
  11. import java.util.Date;
  12. import java.util.List;
  13. import java.util.concurrent.TimeUnit;
  14.  
  15. /**
  16.  * Цикличная проверка отклика системы управления вентиляцией
  17.  *
  18.  * Если поле даты не обновлялось на текущее время более чем 15 минут,
  19.  * отправляется сообщение на почту с запросом о проверке именно этой системы управления
  20.  * @author kozlov_sv
  21.  * @since 24.06.2018
  22.  */
  23.  
  24. @Component
  25. public class VentCheckScheduller {
  26.  
  27.     /**
  28.      * Логгер
  29.      */
  30.     private static Logger logger = LoggerFactory.getLogger(VentCheckScheduller.class);
  31.  
  32.     /**
  33.      * Mongo template
  34.      */
  35.     @Autowired
  36.     MongoTemplate mongoTemplate;
  37.  
  38.     /**
  39.      * Библиотека для работы с почтой
  40.      */
  41.     @Autowired
  42.     public JavaMailSender javaMailSender;
  43.  
  44.     /**
  45.      * Репозиторий с данными по системе управления вентиляцией
  46.      */
  47.     @Autowired
  48.     private final VentConfigRepository ventConfigRepository;
  49.    
  50.     /**
  51.      * Проверка работоспособности системы управления вентиляцией
  52.      */
  53.     @Scheduled(fixedRate = 600000, initialDelay = 5000) //Проверка осуществляется раз в 10 минут с задержкой в 5 секунд
  54.     public void sendMail() {
  55.         try {
  56.             logger.debug("*** Iteration start ***");
  57.             //Получаем все записи репозитория с конфигурацией вентиляции
  58.             List<VentConfig> ventConfigs = ventConfigRepository.findAll();
  59.  
  60.             for (VentConfig ventConfig : ventConfigs) {
  61.                 logger.info("Current config: " + ventConfig.toString());
  62.                 //Получаем текущее время свервера
  63.                 Calendar thisServerInstance = Calendar.getInstance();
  64.                 Date currentServerDate = thisServerInstance.getTime();
  65.                 logger.info("Server time: " + currentServerDate);
  66.  
  67.                 if(ventConfig.getDateIncome != null && ventConfig.getId != null){
  68.  
  69.                     //Получаем время последней активности системы управления вентиляцией
  70.                     Date ventLastDate = ventConfig.getDateIncome();
  71.                     logger.info("Ventilation system last activeness time :" + ventLastDate);
  72.  
  73.                     // Получаем разницу между текущим временем и временем последней активности
  74.                     Long diffInMinutes = getDateDiff(ventLastDate, currentServerDate, TimeUnit.MINUTES);
  75.                     logger.info("Difference in minutes : " + diffInMinutes);
  76.  
  77.                     // В случае, если разница составляет 15 и более минут, отправляем письмо системным администраторам,
  78.                     // осуществляющим поддержку системы управления вентиляцией.
  79.                     if (differenceInMinutes >= 15) {
  80.                         MailInfoModel mailInfoModel = new MailInfoModel();
  81.                         mailInfoModel.setText("Vent control system error. Please, check control system №" + ventConfig.getId);
  82.                         mailInfoModel.setTo("techsupport@corporate.com");
  83.                         mailInfoModel.setFrom("mailrobot@corporate.com");
  84.                         mailInfoModel.setSubject();
  85.                         sendMail(mailInfoModel);
  86.                     }
  87.                 }
  88.             }
  89.         } catch (Exception e) {
  90.             final String err = "Error while checking vent system";
  91.             logger.error(err, e);
  92.         }
  93.         logger.debug("***Iteration end***");
  94.     }
  95.  
  96.     /**
  97.      * Получение разницы между серверным временем и временем последнего объявления системы управления вентиляцией
  98.      *
  99.      * @param ventLastDate          время последнего объявления системы управления вентиляцией
  100.      * @param currentServerDate     текущее время сервера
  101.      * @param timeUnit              размерность времени
  102.      * @return                      разница в той размерности времени, которая будет передана в аргументы
  103.      */
  104.     public long getDateDiff(Date ventLastDate, Date currentServerDate, TimeUnit timeUnit) {
  105.         long diffInMillies = currentServerDate.getTime() - ventLastDate.getTime();
  106.         long milliseconds = timeUnit.convert(diffInMillies, TimeUnit.MILLISECONDS);
  107.         return milliseconds;
  108.     }
  109.  
  110.     /***
  111.      * Отправка уведомления по почте
  112.      * @param информация для генерирования письма
  113.      * @return результат
  114.      *
  115.      */
  116.     public String sendMail(mailInfoModel) {
  117.  
  118.         MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  119.         MimeMessageHelper mimeMessageHelper = null;
  120.         try {
  121.             mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "utf-8");
  122.             logger.info("***Setting mail body***");
  123.             mimeMessageHelper.setContent(mailInfoModel.getHtmlMsg(), "text/plain; charset=UTF-8");
  124.             mimeMessageHelper.setText(mailInfoModel.getHtmlMsg(), true);
  125.             mimeMessageHelper.setTo(mailInfoModel.getTo());
  126.             mimeMessageHelper.setSubject(mailInfoModel.getSubject());
  127.             mimeMessageHelper.setFrom(mailInfoModel.getFrom());
  128.             logger.info("***Sending mail...***");
  129.             mailSender.send(mimeMessage);
  130.             logger.info("Mail sent to : " + mailInfoModel.getTo());
  131.         } catch (MessagingException e) {
  132.             e.printStackTrace();
  133.             return "Mail sending error :" + e.getMessage()
  134.         }
  135.         return "Success";
  136.     }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement