diff --git a/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java b/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java index 4ec8c43..c589eab 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java @@ -4,95 +4,167 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.telegram.telegrambots.bots.TelegramLongPollingBot; +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.objects.Update; +import org.telegram.telegrambots.meta.exceptions.TelegramApiException; +import ru.ldeloff.servermonitorbot.model.Role; import ru.ldeloff.servermonitorbot.model.TelegramBot; +import ru.ldeloff.servermonitorbot.model.User; import ru.ldeloff.servermonitorbot.repository.SshRepository; -import ru.ldeloff.servermonitorbot.service.command.FirstUseCommand; -import ru.ldeloff.servermonitorbot.service.command.GetStatusSessions; -import ru.ldeloff.servermonitorbot.service.command.SwitchToMainMenu; -import ru.ldeloff.servermonitorbot.service.command.cputemp.CpuTempAggregateCommand; -import ru.ldeloff.servermonitorbot.service.command.cputemp.CpuTempCommand; -import ru.ldeloff.servermonitorbot.service.command.hddtemp.HddTempAggregateCommand; -import ru.ldeloff.servermonitorbot.service.command.hddtemp.HddTempCommand; -import ru.ldeloff.servermonitorbot.service.command.uname.UnameAggregateCommand; -import ru.ldeloff.servermonitorbot.service.command.uname.UnameCommand; +import ru.ldeloff.servermonitorbot.service.TelegramBotService; +import ru.ldeloff.servermonitorbot.service.role.RoleService; +import ru.ldeloff.servermonitorbot.service.user.UserService; +import ru.ldeloff.servermonitorbot.utils.ui.TelegramBotKeyboard; +import ru.ldeloff.servermonitorbot.utils.ui.uname.UnameChatButtonAggregate; @Service @Slf4j @RequiredArgsConstructor public class TelegramBotController extends TelegramLongPollingBot { + final TelegramBot telegramBot; final SshRepository sshRepository; - - final FirstUseCommand firstUseCommand; - final GetStatusSessions getStatusSessions; - final UnameAggregateCommand unameAggregateCommand; - final SwitchToMainMenu switchToMainMenu; - final UnameCommand unameCommand; - final CpuTempAggregateCommand cpuTempAggregateCommand; - final CpuTempCommand cpuTempCommand; - final HddTempAggregateCommand hddTempAggregateCommand; - final HddTempCommand hddTempCommand; + final TelegramBotService telegramBotService; + final UserService userService; + final RoleService roleService; @Override public void onUpdateReceived(Update update) { + Role role = getRole(update); if (update.hasMessage()) { if (update.getMessage().hasText()) { String messageText = update.getMessage().getText(); switch (messageText) { case "/start" -> { - firstUseCommand.execute(update, this); + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). OK"); + telegramBotService.firstUse(update, this); + } else { + log.warn("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } case "Статус" -> { - getStatusSessions.execute(update, this); + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). OK"); + telegramBotService.getStatusSessions(update, this); + } else { + log.warn("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } case "uname" -> { - unameAggregateCommand.execute(update, this); - } - case "CPU.temp" -> { - cpuTempAggregateCommand.execute(update, this); - } - case "HDD.temp" -> { - hddTempAggregateCommand.execute(update, this); + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). OK"); + telegramBotService.sendUnameAggregate(update, this); + } else { + log.warn("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } default -> { - switchToMainMenu.execute(update, this); + if (role.getId() < 3) { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). ОК"); + telegramBotService.switchToMainMenu(update, this); + } else { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } } } } else if (update.hasCallbackQuery()) { - String [] tags = update.getCallbackQuery().getData().split(":"); + String messageText = update.getCallbackQuery().getData(); + String [] tags = messageText.split(":"); if (tags.length > 1) { switch (tags[0]) { - case "uname" -> { - unameCommand.execute(update, this); - } - case "CPU.temp" -> { - cpuTempCommand.execute(update, this); - } - case "HDD.temp" -> { - hddTempCommand.execute(update, this); - } - default -> { - switchToMainMenu.execute(update, this); - } + case "uname": + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). ОК"); + telegramBotService.uname(update, this); + } else { + log.info("Получена команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } + break; + default: + if (role.getId() < 3) { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). ОК"); + telegramBotService.switchToMainMenu(update, this); + } else { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } + break; } } else { - switchToMainMenu.execute(update, this); + if (role.getId() < 3) { + log.warn("Неверный формат команды '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). ОК"); + telegramBotService.switchToMainMenu(update, this); + } else { + log.warn("Неверный формат команды '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } } } + @Override public String getBotUsername() { return telegramBot.getBotUsername(); } + @Override public String getBotToken() { return telegramBot.getBotToken(); } + @Override public void onClosing() { super.onClosing(); sshRepository.disconnectSessions(); } + + private Role getRole(Update update) { + Long id = null; + if (update.hasMessage()) { + id = update.getMessage().getChat().getId(); + } else if (update.hasCallbackQuery()) { + id = update.getCallbackQuery().getMessage().getChat().getId(); + } + User user = userService.getByTelegramId(id); + if (user == null) { + return roleService.findRoleById(3L); + } else { + return user.getRole(); + } + } } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/User.java b/src/main/java/ru/ldeloff/servermonitorbot/model/User.java index a32c391..c732b3e 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/model/User.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/model/User.java @@ -18,7 +18,4 @@ public class User { @ManyToOne @JoinColumn(name = "role_id") private Role role; - - @Transient - private String login; } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java new file mode 100644 index 0000000..507a7fc --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java @@ -0,0 +1,14 @@ +package ru.ldeloff.servermonitorbot.service; + +import org.telegram.telegrambots.meta.api.objects.Update; +import ru.ldeloff.servermonitorbot.controller.TelegramBotController; + +public interface TelegramBotService { + + void switchToMainMenu(Update update, TelegramBotController bot); + void getStatusSessions(Update update, TelegramBotController bot); + void sendUnameAggregate(Update update, TelegramBotController bot); + void uname(Update update, TelegramBotController bot); + void firstUse(Update update, TelegramBotController bot); + void notAuthorization(Update update, TelegramBotController bot); +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotServiceImpl.java new file mode 100644 index 0000000..84b24af --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotServiceImpl.java @@ -0,0 +1,91 @@ +package ru.ldeloff.servermonitorbot.service; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Update; +import org.telegram.telegrambots.meta.exceptions.TelegramApiException; +import ru.ldeloff.servermonitorbot.controller.TelegramBotController; +import ru.ldeloff.servermonitorbot.repository.SshRepository; +import ru.ldeloff.servermonitorbot.service.ssh.SshService; +import ru.ldeloff.servermonitorbot.service.uname.UnameService; +import ru.ldeloff.servermonitorbot.utils.ui.TelegramBotKeyboard; +import ru.ldeloff.servermonitorbot.utils.ui.uname.UnameChatButtonAggregate; + +@Slf4j +@Service +@RequiredArgsConstructor +public class TelegramBotServiceImpl implements TelegramBotService { + final TelegramBotKeyboard telegramBotKeyboard; + final UnameChatButtonAggregate unameChatButtonAggregate; + final UnameService unameService; + final SshService sshService; + + @Override + public void firstUse(Update update, TelegramBotController bot) { + SendMessage message = new SendMessage(); + long chatId = 0L; + chatId = update.getMessage().getChatId(); + message.setText("Добро пожаловать " + update.getMessage().getChat().getUserName() + "!"); + message.setChatId(chatId); + sendMessage(telegramBotKeyboard.uiForm(message), bot); + } + + @Override + public void notAuthorization(Update update, TelegramBotController bot) { + long id = 0L; + String login = null; + long chatId = 0L; + if (update.hasMessage()) { + id = update.getMessage().getChat().getId(); + login = update.getMessage().getChat().getUserName(); + chatId = update.getMessage().getChatId(); + } else if (update.hasCallbackQuery()) { + id = update.getCallbackQuery().getMessage().getChat().getId(); + login = update.getCallbackQuery().getMessage().getChat().getUserName(); + chatId = update.getCallbackQuery().getMessage().getChatId(); + } + SendMessage message = new SendMessage(); + message.setText("У пользователя " + login + + " (" + id + ") недостаточно прав для выполнения этой команды"); + message.setChatId(chatId); + sendMessage(message, bot); + } + + @Override + public void switchToMainMenu(Update update, TelegramBotController bot) { + SendMessage message = new SendMessage(); + long chatId = 0L; + try { + chatId = update.getMessage().getChatId(); + } catch (Exception e) { + chatId = update.getCallbackQuery().getMessage().getChatId(); + } + message.setText("Неверная команда и или формат. Попробуем сначала."); + message.setChatId(chatId); + sendMessage(telegramBotKeyboard.uiForm(message), bot); + } + @Override + public void getStatusSessions(Update update, TelegramBotController bot) { + sendMessage(sshService.getStatusSessions(update), bot); + } + @Override + public void sendUnameAggregate(Update update, TelegramBotController bot) { + sendMessage(unameService.sendUnameAggregate(update), bot); + } + + @Override + public void uname(Update update, TelegramBotController bot) { + sendMessage(unameService.uname(update), bot); + } + + private void sendMessage(SendMessage message, TelegramBotController bot) { + try { + bot.execute(message); + } catch (TelegramApiException e) { + e.printStackTrace(); + log.warn(e.getMessage()); + } + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/CommandTemplate.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/CommandTemplate.java deleted file mode 100644 index 0f178d7..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/CommandTemplate.java +++ /dev/null @@ -1,87 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command; - -import lombok.Data; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import org.telegram.telegrambots.meta.api.objects.Update; -import org.telegram.telegrambots.meta.exceptions.TelegramApiException; -import ru.ldeloff.servermonitorbot.controller.TelegramBotController; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.user.UserService; - -@Data -@Slf4j -@RequiredArgsConstructor -public abstract class CommandTemplate { - final UserService userService; - final RoleService roleService; - long expectedRole = 2L; - public abstract SendMessage actionForAuth(User user, SendMessage message); - - public SendMessage actionForNotAuth(User user, SendMessage message) { - message.setText("У пользователя " + user.getLogin() + " (" + user.getTelegramId() - + ") недостаточно прав для выполнения этой команды"); - return message; - } - public void execute(Update update, TelegramBotController bot) { - User user = getUser(update); - String message = getMessage(update); - SendMessage answer = new SendMessage(); - answer.setChatId(user.getTelegramId()); - answer.setText(message); - if (user.getRole().getId() <= expectedRole) { - logSuccess(user, message); - sendMessage(actionForAuth(user, answer), bot); - } else { - logNotAuth(user, message); - sendMessage(actionForNotAuth(user, answer), bot); - } - } - protected void logSuccess(User user, String message) { - log.info("Получена команда '" + message + "' от " + user.getLogin() - + " (" + user.getTelegramId() + "). OK"); - } - protected void logNotAuth(User user, String message) { - log.warn("Получена команда '" + message + "' от " + user.getLogin() - + " (" + user.getTelegramId() + "). Нет прав"); - } - private User getUser(Update update) { - long id = -1L; - String login = null; - if (update.hasMessage()) { - id = update.getMessage().getChat().getId(); - login = update.getMessage().getChat().getUserName(); - } else if (update.hasCallbackQuery()) { - id = update.getCallbackQuery().getMessage().getChat().getId(); - login = update.getCallbackQuery().getMessage().getChat().getUserName(); - } - User user = userService.getByTelegramId(id); - if (user == null) { - user = new User(); - user.setTelegramId(id); - user.setRole(roleService.findRoleById(3L)); - } - user.setLogin(login); - return user; - } - - private String getMessage(Update update) { - if (update.hasMessage()) { - return update.getMessage().getText(); - } else if (update.hasCallbackQuery()) { - return update.getCallbackQuery().getData(); - } - return ""; - } - - private void sendMessage(SendMessage message, TelegramBotController bot) { - try { - bot.execute(message); - } catch (TelegramApiException e) { - e.printStackTrace(); - log.warn(e.getMessage()); - } - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/FirstUseCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/FirstUseCommand.java deleted file mode 100644 index dfab89d..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/FirstUseCommand.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command; - -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.user.UserService; -import ru.ldeloff.servermonitorbot.utils.ui.TelegramBotKeyboard; - -@Service -public class FirstUseCommand extends CommandTemplate { - final TelegramBotKeyboard telegramBotKeyboard; - - public FirstUseCommand(UserService userService, RoleService roleService, TelegramBotKeyboard telegramBotKeyboard) { - super(userService, roleService); - this.telegramBotKeyboard = telegramBotKeyboard; - } - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - message.setText("Добро пожаловать " + user.getLogin() + "!"); - return telegramBotKeyboard.uiForm(message); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/GetStatusSessions.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/GetStatusSessions.java deleted file mode 100644 index af5d29e..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/GetStatusSessions.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command; - -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.ssh.SshService; -import ru.ldeloff.servermonitorbot.service.user.UserService; - -@Service -public class GetStatusSessions extends CommandTemplate { - final SshService sshService; - - public GetStatusSessions(UserService userService, RoleService roleService, SshService sshService) { - super(userService, roleService); - this.sshService = sshService; - } - - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - return sshService.getStatusSessions(message); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/SwitchToMainMenu.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/SwitchToMainMenu.java deleted file mode 100644 index 43dec0e..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/SwitchToMainMenu.java +++ /dev/null @@ -1,35 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.user.UserService; -import ru.ldeloff.servermonitorbot.utils.ui.TelegramBotKeyboard; - -@Service -@Slf4j -public class SwitchToMainMenu extends CommandTemplate { - final TelegramBotKeyboard telegramBotKeyboard; - - public SwitchToMainMenu(UserService userService, RoleService roleService, TelegramBotKeyboard telegramBotKeyboard) { - super(userService, roleService); - this.telegramBotKeyboard = telegramBotKeyboard; - } - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - message.setText("Неверная команда. Попробуем сначала."); - return telegramBotKeyboard.uiForm(message); - } - @Override - public void logSuccess(User user, String message) { - log.warn("Получена несуществующая команда '" + message + "' от " + user.getLogin() - + " (" + user.getTelegramId() + "). OK"); - } - @Override - public void logNotAuth(User user, String message) { - log.warn("Получена несуществующая команда '" + message + "' от " + user.getLogin() - + " (" + user.getTelegramId() + "). Нет прав"); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/cputemp/CpuTempAggregateCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/cputemp/CpuTempAggregateCommand.java deleted file mode 100644 index 90d2eb2..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/cputemp/CpuTempAggregateCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command.cputemp; - -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.command.CommandTemplate; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.user.UserService; -import ru.ldeloff.servermonitorbot.utils.ui.uname.ServerListButtons; - -@Service -public class CpuTempAggregateCommand extends CommandTemplate { - final ServerListButtons serverListButtons; - - public CpuTempAggregateCommand(UserService userService, RoleService roleService, ServerListButtons serverListButtons) { - super(userService, roleService); - this.serverListButtons = serverListButtons; - } - - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - return serverListButtons.uiForm(message); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/cputemp/CpuTempCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/cputemp/CpuTempCommand.java deleted file mode 100644 index fb046c1..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/cputemp/CpuTempCommand.java +++ /dev/null @@ -1,67 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command.cputemp; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.Command; -import ru.ldeloff.servermonitorbot.model.SshServer; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.command.CommandTemplate; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.ssh.SshService; -import ru.ldeloff.servermonitorbot.service.user.UserService; -import ru.ldeloff.servermonitorbot.utils.SshServerUtils; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -@Service -@Slf4j -public class CpuTempCommand extends CommandTemplate { - final SshService sshService; - public CpuTempCommand(UserService userService, RoleService roleService, SshService sshService) { - super(userService, roleService); - this.sshService = sshService; - } - - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - String [] tags = Arrays.stream(message.getText().split(":")) - .map(String::trim) - .toArray(String[]::new); - - if (tags[1].equals("all")) { - message.setText(hddTempAllHost()); - } else { - message.setText(Objects.requireNonNull(hddTempSpecificHost(tags[1]))); - } - return message; - } - - private String hddTempAllHost() { - List servers = SshServerUtils.filterGoodServers(sshService.getSshServers()); - StringBuilder response = new StringBuilder(); - servers.forEach(server -> response.append(hddTempSpecificHost(server.getName())).append("\n")); - return response.toString(); - } - - private String hddTempSpecificHost(String serverName) { - Optional server = sshService.getSshServers() - .stream() - .filter(x -> x.getName().equals(serverName)) - .findFirst(); - if (server.isPresent()) { - Command result = sshService.execute(new Command("cat /sys/class/thermal/thermal_zone0/temp", 100, server.get())); - return server.get().getName() + ": \n" + - (Objects.isNull(result.getResponse()) ? "ошибка при выполнении команды" : - String.format("%.1f", - Double.parseDouble(result.getResponse().replaceAll("\n", ""))/1000)) - + "°C"; - } else { - log.error("Ошибка при выполнении команды 'CPUtemp'. Искомый сервер (" + serverName + ") не найден"); - return null; - } - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/hddtemp/HddTempAggregateCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/hddtemp/HddTempAggregateCommand.java deleted file mode 100644 index 1f0ea18..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/hddtemp/HddTempAggregateCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command.hddtemp; - -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.command.CommandTemplate; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.user.UserService; -import ru.ldeloff.servermonitorbot.utils.ui.uname.ServerListButtons; - -@Service -public class HddTempAggregateCommand extends CommandTemplate { - final ServerListButtons serverListButtons; - - public HddTempAggregateCommand(UserService userService, RoleService roleService, ServerListButtons serverListButtons) { - super(userService, roleService); - this.serverListButtons = serverListButtons; - } - - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - return serverListButtons.uiForm(message); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/hddtemp/HddTempCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/hddtemp/HddTempCommand.java deleted file mode 100644 index 48793cc..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/hddtemp/HddTempCommand.java +++ /dev/null @@ -1,64 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command.hddtemp; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.Command; -import ru.ldeloff.servermonitorbot.model.SshServer; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.command.CommandTemplate; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.ssh.SshService; -import ru.ldeloff.servermonitorbot.service.user.UserService; -import ru.ldeloff.servermonitorbot.utils.SshServerUtils; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -@Service -@Slf4j -public class HddTempCommand extends CommandTemplate { - final SshService sshService; - public HddTempCommand(UserService userService, RoleService roleService, SshService sshService) { - super(userService, roleService); - this.sshService = sshService; - } - - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - String [] tags = Arrays.stream(message.getText().split(":")) - .map(String::trim) - .toArray(String[]::new); - - if (tags[1].equals("all")) { - message.setText(hddTempAllHost()); - } else { - message.setText(Objects.requireNonNull(hddTempSpecificHost(tags[1]))); - } - return message; - } - - private String hddTempAllHost() { - List servers = SshServerUtils.filterGoodServers(sshService.getSshServers()); - StringBuilder response = new StringBuilder(); - servers.forEach(server -> response.append(hddTempSpecificHost(server.getName())).append("\n")); - return response.toString(); - } - - private String hddTempSpecificHost(String serverName) { - Optional server = sshService.getSshServers() - .stream() - .filter(x -> x.getName().equals(serverName)) - .findFirst(); - if (server.isPresent()) { - Command result = sshService.execute(new Command("hddtemp /dev/sd*", 500, server.get())); - return server.get().getName() + ": \n" + - (Objects.isNull(result.getResponse()) ? "ошибка при выполнении команды" : result.getResponse()); - } else { - log.error("Ошибка при выполнении команды 'hddtemp'. Искомый сервер (" + serverName + ") не найден"); - return null; - } - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameAggregateCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameAggregateCommand.java deleted file mode 100644 index 2ac594e..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameAggregateCommand.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command.uname; - -import org.springframework.stereotype.Service; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.command.CommandTemplate; -import ru.ldeloff.servermonitorbot.service.role.RoleService; -import ru.ldeloff.servermonitorbot.service.user.UserService; -import ru.ldeloff.servermonitorbot.utils.ui.uname.ServerListButtons; - -@Service -public class UnameAggregateCommand extends CommandTemplate { - final ServerListButtons serverListButtons; - - public UnameAggregateCommand(UserService userService, RoleService roleService, ServerListButtons serverListButtons) { - super(userService, roleService); - this.serverListButtons = serverListButtons; - } - - @Override - public SendMessage actionForAuth(User user, SendMessage message) { - return serverListButtons.uiForm(message); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshService.java index 126e358..80c4378 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshService.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshService.java @@ -2,14 +2,14 @@ package ru.ldeloff.servermonitorbot.service.ssh; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Update; import ru.ldeloff.servermonitorbot.model.Command; import ru.ldeloff.servermonitorbot.model.SshServer; import java.util.List; public interface SshService { - SendMessage getStatusSessions(SendMessage update); - + SendMessage getStatusSessions(Update update); List getSshServers(); Command execute(Command command); List execute(List commands); diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshServiceImpl.java index f5ebec4..565c3c4 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshServiceImpl.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshServiceImpl.java @@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Update; import ru.ldeloff.servermonitorbot.model.Command; import ru.ldeloff.servermonitorbot.model.SshServer; import ru.ldeloff.servermonitorbot.repository.SshRepository; @@ -18,11 +19,14 @@ import java.util.List; @Service @Slf4j @RequiredArgsConstructor -public class SshServiceImpl implements SshService { +public class SshServiceImpl implements SshService { final SshRepository sshRepository; @Override - public SendMessage getStatusSessions(SendMessage message) { + public SendMessage getStatusSessions(Update update) { + SendMessage message = new SendMessage(); + long chatId = update.getMessage().getChatId(); message.setText(sshRepository.getStatusSessions()); + message.setChatId(chatId); return message; } @Override diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/uname/UnameService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/uname/UnameService.java new file mode 100644 index 0000000..46e9096 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/uname/UnameService.java @@ -0,0 +1,10 @@ +package ru.ldeloff.servermonitorbot.service.uname; + +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Update; + +public interface UnameService { + SendMessage sendUnameAggregate(Update update); + + SendMessage uname(Update update); +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/uname/UnameServiceImpl.java similarity index 51% rename from src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameCommand.java rename to src/main/java/ru/ldeloff/servermonitorbot/service/uname/UnameServiceImpl.java index 94e3b73..e7a3304 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameCommand.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/uname/UnameServiceImpl.java @@ -1,16 +1,15 @@ -package ru.ldeloff.servermonitorbot.service.command.uname; +package ru.ldeloff.servermonitorbot.service.uname; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Update; import ru.ldeloff.servermonitorbot.model.Command; import ru.ldeloff.servermonitorbot.model.SshServer; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.service.command.CommandTemplate; -import ru.ldeloff.servermonitorbot.service.role.RoleService; import ru.ldeloff.servermonitorbot.service.ssh.SshService; -import ru.ldeloff.servermonitorbot.service.user.UserService; import ru.ldeloff.servermonitorbot.utils.SshServerUtils; +import ru.ldeloff.servermonitorbot.utils.ui.uname.UnameChatButtonAggregate; import java.util.Arrays; import java.util.List; @@ -18,32 +17,46 @@ import java.util.Objects; import java.util.Optional; @Service +@RequiredArgsConstructor @Slf4j -public class UnameCommand extends CommandTemplate { +public class UnameServiceImpl implements UnameService { final SshService sshService; - public UnameCommand(UserService userService, RoleService roleService, SshService sshService) { - super(userService, roleService); - this.sshService = sshService; + final UnameChatButtonAggregate unameChatButtonAggregate; + @Override + public SendMessage sendUnameAggregate(Update update) { + SendMessage message = new SendMessage(); + long chatId = update.getMessage().getChatId(); + message.setChatId(chatId); + return unameChatButtonAggregate.uiForm(message); } @Override - public SendMessage actionForAuth(User user, SendMessage message) { - String [] tags = Arrays.stream(message.getText().split(":")) + public SendMessage uname(Update update) { + String messageText = update.getCallbackQuery().getData(); + + String [] tags = Arrays.stream(messageText.split(":")) .map(String::trim) .toArray(String[]::new); + String result; if (tags[1].equals("all")) { - message.setText(unameAllHost()); + result = unameAllHost(); } else { - message.setText(Objects.requireNonNull(unameSpecificHost(tags[1]))); + result = unameSpecificHost(tags[1]); } + SendMessage message = new SendMessage(); + long chatId = update.getCallbackQuery().getMessage().getChatId(); + message.setChatId(chatId); + message.setText(result); return message; } private String unameAllHost() { - List servers = SshServerUtils.filterGoodServers(sshService.getSshServers()); - StringBuilder response = new StringBuilder(); - servers.forEach(server -> response.append(unameSpecificHost(server.getName())).append("\n")); - return response.toString(); + List servers = SshServerUtils.filterGoodServers(sshService.getSshServers()); + StringBuilder response = new StringBuilder(); + servers.forEach(server -> { + response.append(unameSpecificHost(server.getName())).append("\n"); + }); + return response.toString(); } private String unameSpecificHost(String serverName) { diff --git a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java index a7f776c..a07a478 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java @@ -13,9 +13,6 @@ import java.util.ArrayList; public class TelegramBotKeyboard implements UiFormer { private final String STATUS = "Статус"; private final String UNAME = "uname"; - private final String CPU_TEMP = "CPU.temp"; - private final String HDD_TEMP = "HDD.temp"; - @Override public SendMessage uiForm(SendMessage message) { @@ -30,8 +27,6 @@ public class TelegramBotKeyboard implements UiFormer { keyboardRow.add(new KeyboardButton(STATUS)); keyboardRow.add(new KeyboardButton(UNAME)); - keyboardRow.add(new KeyboardButton(CPU_TEMP)); - keyboardRow.add(new KeyboardButton(HDD_TEMP)); replyKeyboardMarkup.setKeyboard(keyboardRows); message.setReplyMarkup(replyKeyboardMarkup); diff --git a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/ServerListButtons.java b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/UnameChatButtonAggregate.java similarity index 83% rename from src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/ServerListButtons.java rename to src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/UnameChatButtonAggregate.java index c6d0b4e..99a9547 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/ServerListButtons.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/UnameChatButtonAggregate.java @@ -1,10 +1,12 @@ package ru.ldeloff.servermonitorbot.utils.ui.uname; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup; import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton; +import ru.ldeloff.servermonitorbot.repository.SshRepository; import ru.ldeloff.servermonitorbot.service.ssh.SshService; import ru.ldeloff.servermonitorbot.utils.ui.UiFormer; @@ -14,7 +16,7 @@ import java.util.Objects; @Component @RequiredArgsConstructor -public class ServerListButtons implements UiFormer { +public class UnameChatButtonAggregate implements UiFormer { private final SshService sshService; @@ -30,7 +32,7 @@ public class ServerListButtons implements UiFormer { List keyboardRow = new ArrayList<>(); InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); inlineKeyboardButton.setText(sshServer.getName()); - inlineKeyboardButton.setCallbackData(message.getText() + ": " + sshServer.getName()); + inlineKeyboardButton.setCallbackData("uname: " + sshServer.getName()); keyboardRow.add(inlineKeyboardButton); keyboard.add(keyboardRow); } @@ -41,14 +43,14 @@ public class ServerListButtons implements UiFormer { List keyboardRow = new ArrayList<>(); InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); inlineKeyboardButton.setText("Все сервера"); - inlineKeyboardButton.setCallbackData(message.getText() + ": all"); + inlineKeyboardButton.setCallbackData("uname: all"); keyboardRow.add(inlineKeyboardButton); keyboard.add(keyboardRow); } inlineKeyboardMarkup.setKeyboard(keyboard); message.setReplyMarkup(inlineKeyboardMarkup); - message.setText("Выполнить " + message.getText() + " для"); + message.setText("Выполнить uname для"); return message; }