diff --git a/pom.xml b/pom.xml index fbc64ec..10966a9 100644 --- a/pom.xml +++ b/pom.xml @@ -47,18 +47,8 @@ jsch 0.1.55 - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.liquibase - liquibase-core - - - org.postgresql - postgresql - + + diff --git a/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java b/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java index bac7aed..deb3255 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java @@ -1,8 +1,5 @@ package ru.ldeloff.servermonitorbot.config; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import ru.ldeloff.servermonitorbot.model.SshServer; @@ -11,8 +8,14 @@ import java.util.List; @Configuration @ConfigurationProperties(prefix = "ssh") -@Getter -@Setter public class SshConfig { private List servers; + + public List getServers() { + return servers; + } + + public void setServers(List servers) { + this.servers = servers; + } } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/config/UserConfig.java b/src/main/java/ru/ldeloff/servermonitorbot/config/UserConfig.java deleted file mode 100644 index 9c9e51d..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/config/UserConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.ldeloff.servermonitorbot.config; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import ru.ldeloff.servermonitorbot.model.dto.InitUserDto; - -import java.util.List; - -@Configuration -@ConfigurationProperties(prefix = "bot") -@Getter -@Setter -public class UserConfig { - private List users; -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java b/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java deleted file mode 100644 index 4ec8c43..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java +++ /dev/null @@ -1,98 +0,0 @@ -package ru.ldeloff.servermonitorbot.controller; - -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.objects.Update; -import ru.ldeloff.servermonitorbot.model.TelegramBot; -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; - -@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; - - @Override - public void onUpdateReceived(Update update) { - if (update.hasMessage()) { - if (update.getMessage().hasText()) { - String messageText = update.getMessage().getText(); - switch (messageText) { - case "/start" -> { - firstUseCommand.execute(update, this); - } - case "Статус" -> { - getStatusSessions.execute(update, this); - } - case "uname" -> { - unameAggregateCommand.execute(update, this); - } - case "CPU.temp" -> { - cpuTempAggregateCommand.execute(update, this); - } - case "HDD.temp" -> { - hddTempAggregateCommand.execute(update, this); - } - default -> { - switchToMainMenu.execute(update, this); - } - } - } - } else if (update.hasCallbackQuery()) { - String [] tags = update.getCallbackQuery().getData().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); - } - } - } else { - switchToMainMenu.execute(update, this); - } - } - } - @Override - public String getBotUsername() { - return telegramBot.getBotUsername(); - } - @Override - public String getBotToken() { - return telegramBot.getBotToken(); - } - @Override - public void onClosing() { - super.onClosing(); - sshRepository.disconnectSessions(); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/init/AddUsers.java b/src/main/java/ru/ldeloff/servermonitorbot/init/AddUsers.java deleted file mode 100644 index 560d72e..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/init/AddUsers.java +++ /dev/null @@ -1,34 +0,0 @@ -package ru.ldeloff.servermonitorbot.init; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; -import ru.ldeloff.servermonitorbot.config.UserConfig; -import ru.ldeloff.servermonitorbot.mapper.UserMapper; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.model.dto.InitUserDto; -import ru.ldeloff.servermonitorbot.service.user.UserService; - -import java.util.List; - -@Component -public class AddUsers implements ApplicationRunner { - final List initUsers; - final UserService userService; - final UserMapper userMapper; - - @Autowired - public AddUsers(UserConfig userConfig, UserService userService, UserMapper userMapper) { - this.initUsers = userConfig.getUsers(); - this.userService = userService; - this.userMapper = userMapper; - } - - @Override - public void run(ApplicationArguments args) throws Exception { - initUsers.forEach(initUserDto -> { - User user = userService.saveOrUpdateUser(userMapper.dtoToUser(initUserDto)); - }); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java b/src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java index d429b0e..7aae5d7 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java @@ -3,18 +3,18 @@ package ru.ldeloff.servermonitorbot.init; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; -import ru.ldeloff.servermonitorbot.repository.SshRepository; +import ru.ldeloff.servermonitorbot.service.SshService; @Component public class SshConnect implements ApplicationRunner { - final SshRepository sshRepository; + final SshService sshService; - public SshConnect(SshRepository sshRepository) { - this.sshRepository = sshRepository; + public SshConnect(SshService sshService) { + this.sshService = sshService; } @Override public void run(ApplicationArguments args) throws Exception { - sshRepository.connectToAllServer(); + sshService.connectToAllServer(); } } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/init/StartBot.java b/src/main/java/ru/ldeloff/servermonitorbot/init/StartBot.java index 5530238..c97bc49 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/init/StartBot.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/init/StartBot.java @@ -9,16 +9,17 @@ import org.springframework.stereotype.Component; import org.telegram.telegrambots.meta.TelegramBotsApi; import org.telegram.telegrambots.meta.exceptions.TelegramApiException; import org.telegram.telegrambots.updatesreceivers.DefaultBotSession; -import ru.ldeloff.servermonitorbot.controller.TelegramBotController; +import ru.ldeloff.servermonitorbot.model.TelegramBot; +import ru.ldeloff.servermonitorbot.service.TelegramBotService; @Slf4j @Component @NoArgsConstructor public class StartBot implements ApplicationRunner { - private TelegramBotController telegramBot; + private TelegramBotService telegramBot; @Autowired - public StartBot(TelegramBotController telegramBot) { + public StartBot(TelegramBotService telegramBot) { this.telegramBot = telegramBot; } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/mapper/UserMapper.java b/src/main/java/ru/ldeloff/servermonitorbot/mapper/UserMapper.java deleted file mode 100644 index aa7811a..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/mapper/UserMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.ldeloff.servermonitorbot.mapper; - -import org.springframework.stereotype.Component; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.model.dto.InitUserDto; -import ru.ldeloff.servermonitorbot.service.role.RoleService; - -@Component -public class UserMapper { - final RoleService roleService; - - public UserMapper(RoleService roleService) { - this.roleService = roleService; - } - - public User dtoToUser(InitUserDto initUserDto) { - User user = new User(); - user.setTelegramId(initUserDto.getTelegramId()); - user.setRole(roleService.findRoleByName(initUserDto.getRole())); - return user; - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/Command.java b/src/main/java/ru/ldeloff/servermonitorbot/model/Command.java deleted file mode 100644 index 936f89b..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/model/Command.java +++ /dev/null @@ -1,25 +0,0 @@ -package ru.ldeloff.servermonitorbot.model; - -import jakarta.validation.constraints.Min; -import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class Command { - @NotNull - private String command; - @NotNull - @Min(100) - private int timeout; - @NotNull - private SshServer sshServer; - private String response; - - public Command(String command, int timeout, SshServer sshServer) { - this.command = command; - this.timeout = timeout; - this.sshServer = sshServer; - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/Role.java b/src/main/java/ru/ldeloff/servermonitorbot/model/Role.java deleted file mode 100644 index d6f800d..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/model/Role.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.ldeloff.servermonitorbot.model; - -import jakarta.persistence.*; -import lombok.Data; - -@Entity -@Data -@Table(name = "roles") -public class Role { - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - @Column(name = "name") - private String name; -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/User.java b/src/main/java/ru/ldeloff/servermonitorbot/model/User.java deleted file mode 100644 index a32c391..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/model/User.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.ldeloff.servermonitorbot.model; - -import jakarta.persistence.*; -import lombok.Data; - -@Entity -@Data -@Table(name = "users") -public class User { - @Id - @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(name = "telegram_id") - private Long telegramId; - - @ManyToOne - @JoinColumn(name = "role_id") - private Role role; - - @Transient - private String login; -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/dto/InitUserDto.java b/src/main/java/ru/ldeloff/servermonitorbot/model/dto/InitUserDto.java deleted file mode 100644 index a18efdf..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/model/dto/InitUserDto.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.ldeloff.servermonitorbot.model.dto; - -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import org.springframework.stereotype.Component; - -@Data -@Component -public class InitUserDto { - @NotNull - private long telegramId; - @NotNull - private String role; -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/repository/RoleRepository.java b/src/main/java/ru/ldeloff/servermonitorbot/repository/RoleRepository.java deleted file mode 100644 index 4bb81ec..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/repository/RoleRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.ldeloff.servermonitorbot.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import ru.ldeloff.servermonitorbot.model.Role; - -import java.util.Optional; - -@Repository -public interface RoleRepository extends JpaRepository { - Optional findRoleByName(String name); - Optional findRoleById(Long id); -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/repository/UserRepository.java b/src/main/java/ru/ldeloff/servermonitorbot/repository/UserRepository.java deleted file mode 100644 index ceaacd3..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/repository/UserRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.ldeloff.servermonitorbot.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import ru.ldeloff.servermonitorbot.model.User; - -@Repository -public interface UserRepository extends JpaRepository { - User getByTelegramId(long id); -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/repository/SshRepository.java b/src/main/java/ru/ldeloff/servermonitorbot/service/SshService.java similarity index 70% rename from src/main/java/ru/ldeloff/servermonitorbot/repository/SshRepository.java rename to src/main/java/ru/ldeloff/servermonitorbot/service/SshService.java index c2821d4..32c11dd 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/repository/SshRepository.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/SshService.java @@ -1,4 +1,4 @@ -package ru.ldeloff.servermonitorbot.repository; +package ru.ldeloff.servermonitorbot.service; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; @@ -7,10 +7,10 @@ import ru.ldeloff.servermonitorbot.model.SshServer; import java.util.List; -public interface SshRepository { + +public interface SshService { void connectToAllServer(); Session connectToServer(SshServer sshServer) throws JSchException; void disconnectSessions(); - String getStatusSessions(); - List getSshServers(); + SendMessage getStatusSessions(Long chatId); } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/repository/SshRepositoryImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/SshServiceImpl.java similarity index 73% rename from src/main/java/ru/ldeloff/servermonitorbot/repository/SshRepositoryImpl.java rename to src/main/java/ru/ldeloff/servermonitorbot/service/SshServiceImpl.java index 8210141..0580f9f 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/repository/SshRepositoryImpl.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/SshServiceImpl.java @@ -1,27 +1,26 @@ -package ru.ldeloff.servermonitorbot.repository; +package ru.ldeloff.servermonitorbot.service; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import ru.ldeloff.servermonitorbot.config.SshConfig; import ru.ldeloff.servermonitorbot.model.SshServer; import java.util.ArrayList; import java.util.List; -import java.util.Objects; @Slf4j -@Repository -public class SshRepositoryImpl implements SshRepository { +@Service +public class SshServiceImpl implements SshService{ private final List sshServers; @Autowired - public SshRepositoryImpl(SshConfig sshConfig) { + public SshServiceImpl(SshConfig sshConfig) { this.sshServers = sshConfig.getServers(); } @@ -61,28 +60,17 @@ public class SshRepositoryImpl implements SshRepository { } @Override - public String getStatusSessions() { + public SendMessage getStatusSessions(Long chatId) { StringBuilder text = new StringBuilder("Статус соединения: \n"); sshServers.forEach(server -> { text.append(server.getName()) .append(": ") - .append(checkStatusServer(server)) + .append(server.getSession().isConnected() ? "OK" : "отключён") .append("\n"); }); - return String.valueOf(text); + SendMessage message = new SendMessage(); + message.setText(String.valueOf(text)); + message.setChatId(chatId); + return message; } - - @Override - public List getSshServers() { - return sshServers; - } - - private String checkStatusServer(SshServer server) { - if (Objects.isNull(server.getSession())) { - return "нет соединения"; - } else { - return server.getSession().isConnected() ? "OK" : "отключён"; - } - } - } 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..5837580 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java @@ -0,0 +1,92 @@ +package ru.ldeloff.servermonitorbot.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +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.TelegramBot; +import ru.ldeloff.servermonitorbot.util.TelegramBotMenu; + +@Service +@Slf4j +public class TelegramBotService extends TelegramLongPollingBot { + + final TelegramBot telegramBot; + final SshService sshService; + final TelegramBotMenu telegramBotMenu; + + + @Autowired + public TelegramBotService(TelegramBot telegramBot, SshService sshService, TelegramBotMenu telegramBotMenu) { + this.telegramBot = telegramBot; + this.sshService = sshService; + this.telegramBotMenu = telegramBotMenu; + } + + @Override + public void onUpdateReceived(Update update) { + if (update.hasMessage()) { + if (update.getMessage().hasText()) { + SendMessage message = new SendMessage(); + String messageText = update.getMessage().getText(); + long chatId = update.getMessage().getChatId(); + switch (messageText) { + case "/start": + message.setText("Привет: " + update.getMessage().getChat().getUserName()); + message.setChatId(chatId); + message.setReplyMarkup(telegramBotMenu.initKeyboard()); + sendMessage(message); + log.info("Получена команда /start"); + break; + case "Статус": + sendMessage(sshService.getStatusSessions(chatId)); + log.info("Получена команда 'Статус'"); + break; + default: + message.setText("unknown command:" + messageText); + message.setChatId(chatId); + message.setReplyMarkup(telegramBotMenu.initKeyboard()); + sendMessage(message); + log.warn("Неизвестная команда:" + messageText); + } + } + } else if (update.hasCallbackQuery()) { + try { + SendMessage message = new SendMessage(); + message.setText(update.getCallbackQuery().getData()); + message.setChatId(update.getCallbackQuery().getMessage().getChatId()); + execute(message); + } catch (TelegramApiException e) { + e.printStackTrace(); + } + } + } + + private void sendMessage(SendMessage message) { + try { + execute(message); + } catch (TelegramApiException e) { + e.printStackTrace(); + log.warn(e.getMessage()); + } + } + + @Override + public String getBotUsername() { + return telegramBot.getBotUsername(); + } + + @Override + public String getBotToken() { + return telegramBot.getBotToken(); + } + + @Override + public void onClosing() { + super.onClosing(); + sshService.disconnectSessions(); + } +} 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/command/uname/UnameCommand.java b/src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameCommand.java deleted file mode 100644 index 94e3b73..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/command/uname/UnameCommand.java +++ /dev/null @@ -1,63 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.command.uname; - -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 UnameCommand extends CommandTemplate { - final SshService sshService; - public UnameCommand(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(unameAllHost()); - } else { - message.setText(Objects.requireNonNull(unameSpecificHost(tags[1]))); - } - 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(); - } - - private String unameSpecificHost(String serverName) { - Optional server = sshService.getSshServers() - .stream() - .filter(x -> x.getName().equals(serverName)) - .findFirst(); - if (server.isPresent()) { - Command result = sshService.execute(new Command("uname -a", 100, server.get())); - return server.get().getName() + ": " + - (Objects.isNull(result.getResponse()) ? "ошибка при выполнении команды" : result.getResponse()); - } else { - log.error("Ошибка при выполнении команды 'uname'. Искомый сервер (" + serverName + ") не найден"); - return null; - } - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleService.java deleted file mode 100644 index b26d5e1..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleService.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.role; - -import ru.ldeloff.servermonitorbot.model.Role; - -public interface RoleService { - Role findRoleByName(String name); - - Role findRoleById(Long id); -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleServiceImpl.java deleted file mode 100644 index 6cf52a8..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.role; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import ru.ldeloff.servermonitorbot.model.Role; -import ru.ldeloff.servermonitorbot.repository.RoleRepository; - -import java.util.Locale; -import java.util.Optional; - -@Service -@RequiredArgsConstructor -public class RoleServiceImpl implements RoleService { - private final RoleRepository roleRepository; - - @Override - public Role findRoleByName(String name) { - Optional role = roleRepository.findRoleByName(name.toUpperCase(Locale.ROOT)); - //noinspection OptionalGetWithoutIsPresent - return role.orElseGet(() -> roleRepository.findRoleByName("ANONYMOUS").get()); - } - - @Override - public Role findRoleById(Long id) { - Optional role = roleRepository.findRoleById(id); - return role.orElseGet(() -> roleRepository.findRoleByName("ANONYMOUS").get()); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshService.java deleted file mode 100644 index 126e358..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshService.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.ssh; - - -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import ru.ldeloff.servermonitorbot.model.Command; -import ru.ldeloff.servermonitorbot.model.SshServer; - -import java.util.List; - -public interface SshService { - SendMessage getStatusSessions(SendMessage 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 deleted file mode 100644 index f5ebec4..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/ssh/SshServiceImpl.java +++ /dev/null @@ -1,74 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.ssh; - -import com.jcraft.jsch.ChannelExec; -import com.jcraft.jsch.JSchException; -import com.jcraft.jsch.Session; -import lombok.RequiredArgsConstructor; -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.repository.SshRepository; - -import java.io.ByteArrayOutputStream; -import java.util.ArrayList; -import java.util.List; - -@Service -@Slf4j -@RequiredArgsConstructor -public class SshServiceImpl implements SshService { - final SshRepository sshRepository; - @Override - public SendMessage getStatusSessions(SendMessage message) { - message.setText(sshRepository.getStatusSessions()); - return message; - } - @Override - public List getSshServers() { - return sshRepository.getSshServers(); - } - - @Override - public Command execute(Command command) { - List commands = new ArrayList<>(); - commands.add(command); - return execute(commands).get(0); - } - - @Override - public List execute(List commands) { - Session session = commands.get(0).getSshServer().getSession(); // подразумевается, что в листе с командами сервер один и тот же - ChannelExec channel = null; - try { - channel = (ChannelExec) session.openChannel("exec"); - ChannelExec finalChannel = channel; - - commands.forEach(command -> { - try { - finalChannel.setCommand(command.getCommand()); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - finalChannel.setOutputStream(responseStream); - finalChannel.connect(); - while (finalChannel.isConnected()) { - Thread.sleep(command.getTimeout()); - } - String responseString = new String(responseStream.toByteArray()); - command.setResponse(responseString); - } catch (JSchException | InterruptedException e) { - log.warn(e.getMessage()); - throw new RuntimeException(e); - } - }); - } catch (JSchException e) { - log.warn(e.getMessage()); - throw new RuntimeException(e); - } finally { - if (channel != null) { - channel.disconnect(); - } - } - return commands; - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserService.java deleted file mode 100644 index e7ea1ff..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserService.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.user; - -import ru.ldeloff.servermonitorbot.model.User; - -public interface UserService { - User saveOrUpdateUser(User user); - - User getByTelegramId(Long id); -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserServiceImpl.java deleted file mode 100644 index ff2844a..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserServiceImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package ru.ldeloff.servermonitorbot.service.user; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import ru.ldeloff.servermonitorbot.model.User; -import ru.ldeloff.servermonitorbot.repository.UserRepository; - -@Service -@RequiredArgsConstructor -@Slf4j -public class UserServiceImpl implements UserService { - - final UserRepository userRepository; - - @Override - public User saveOrUpdateUser(User user) { - User existUser = userRepository.getByTelegramId(user.getTelegramId()); - if (existUser != null) { - user.setId(existUser.getId()); - } - return userRepository.save(user); - } - - @Override - public User getByTelegramId(Long id) { - return userRepository.getByTelegramId(id); - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/util/TelegramBotMenu.java b/src/main/java/ru/ldeloff/servermonitorbot/util/TelegramBotMenu.java new file mode 100644 index 0000000..e853a4f --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/util/TelegramBotMenu.java @@ -0,0 +1,61 @@ +package ru.ldeloff.servermonitorbot.util; + +import lombok.extern.slf4j.Slf4j; +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.ReplyKeyboardMarkup; +import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton; +import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardButton; +import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardRow; + + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Component +public class TelegramBotMenu { + private final String STATUS = "Статус"; + public ReplyKeyboardMarkup initKeyboard() + { + //Создаем объект будущей клавиатуры и выставляем нужные настройки + ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); + replyKeyboardMarkup.setResizeKeyboard(true); //подгоняем размер + replyKeyboardMarkup.setOneTimeKeyboard(false); //скрываем после использования + + //Создаем список с рядами кнопок + ArrayList keyboardRows = new ArrayList<>(); + //Создаем один ряд кнопок и добавляем его в список + KeyboardRow keyboardRow = new KeyboardRow(); + keyboardRows.add(keyboardRow); + //Добавляем одну кнопку с текстом "Просвяти" наш ряд + keyboardRow.add(new KeyboardButton(STATUS)); + //добавляем лист с одним рядом кнопок в главный объект + replyKeyboardMarkup.setKeyboard(keyboardRows); + return replyKeyboardMarkup; + } + + public SendMessage mainMenu(long chatId) { + SendMessage message = new SendMessage(); + message.setChatId(chatId); + message.setText("Choose an option:"); + + InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup(); + List keyboardRow = new ArrayList<>(); + + InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); + inlineKeyboardButton.setText(STATUS); + inlineKeyboardButton.setCallbackData("Button \"" + STATUS + "\" has been pressed"); + + keyboardRow.add(inlineKeyboardButton); + + List> keyboard = new ArrayList<>(); + keyboard.add(keyboardRow); + + inlineKeyboardMarkup.setKeyboard(keyboard); + message.setReplyMarkup(inlineKeyboardMarkup); + + return message; + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/utils/SshServerUtils.java b/src/main/java/ru/ldeloff/servermonitorbot/utils/SshServerUtils.java deleted file mode 100644 index 4db77ca..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/utils/SshServerUtils.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.ldeloff.servermonitorbot.utils; - -import ru.ldeloff.servermonitorbot.model.SshServer; - -import java.util.List; -import java.util.Objects; - -public class SshServerUtils { - public static List filterGoodServers(List sshServers) { - List goodSshServers = sshServers.stream() - .filter(Objects::nonNull) - .filter(server -> Objects.nonNull(server.getSession())) - .filter(server -> server.getSession().isConnected()) - .toList(); - return goodSshServers; - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java deleted file mode 100644 index a7f776c..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.ldeloff.servermonitorbot.utils.ui; - -import org.springframework.stereotype.Component; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboardMarkup; -import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardButton; -import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.KeyboardRow; - - -import java.util.ArrayList; - -@Component -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) { - ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); - replyKeyboardMarkup.setResizeKeyboard(true); - replyKeyboardMarkup.setOneTimeKeyboard(false); - - ArrayList keyboardRows = new ArrayList<>(); - - KeyboardRow keyboardRow = new KeyboardRow(); - keyboardRows.add(keyboardRow); - - 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); - return message; - } -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/UiFormer.java b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/UiFormer.java deleted file mode 100644 index c847293..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/UiFormer.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.ldeloff.servermonitorbot.utils.ui; - -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; - -public interface UiFormer { - SendMessage uiForm(SendMessage message); -} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/ServerListButtons.java b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/ServerListButtons.java deleted file mode 100644 index c6d0b4e..0000000 --- a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/uname/ServerListButtons.java +++ /dev/null @@ -1,55 +0,0 @@ -package ru.ldeloff.servermonitorbot.utils.ui.uname; - -import lombok.RequiredArgsConstructor; -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.service.ssh.SshService; -import ru.ldeloff.servermonitorbot.utils.ui.UiFormer; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -@Component -@RequiredArgsConstructor -public class ServerListButtons implements UiFormer { - - private final SshService sshService; - - @Override - public SendMessage uiForm(SendMessage message) { - List> keyboard = new ArrayList<>(); - - InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup(); - - sshService.getSshServers().forEach(sshServer -> { - if (Objects.nonNull(sshServer.getSession())) { - if (sshServer.getSession().isConnected()) { - List keyboardRow = new ArrayList<>(); - InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); - inlineKeyboardButton.setText(sshServer.getName()); - inlineKeyboardButton.setCallbackData(message.getText() + ": " + sshServer.getName()); - keyboardRow.add(inlineKeyboardButton); - keyboard.add(keyboardRow); - } - } - }); - - if (keyboard.size() > 1) { - List keyboardRow = new ArrayList<>(); - InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); - inlineKeyboardButton.setText("Все сервера"); - inlineKeyboardButton.setCallbackData(message.getText() + ": all"); - keyboardRow.add(inlineKeyboardButton); - keyboard.add(keyboardRow); - } - - inlineKeyboardMarkup.setKeyboard(keyboard); - message.setReplyMarkup(inlineKeyboardMarkup); - message.setText("Выполнить " + message.getText() + " для"); - - return message; - } -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 35a985d..e1b733b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,27 +1,6 @@ -spring: - application: - name: ServerMonitorBot - datasource: - url: jdbc:postgresql://localhost:5432/servermonitorbot - username: servermonitorbot - password: servermonitorbot - jpa: - hibernate: - ddl-auto: none - liquibase: - enabled: true - change-log: classpath:db/scripts/changelog-master.xml - url: jdbc:postgresql://localhost:5432/servermonitorbot - user: servermonitorbot - password: servermonitorbot - liquibase-schema: "liquibase" - default-schema: "servermonitorbot" bot: name: "ServerMonitorBot" token: "token" - users: - - telegramId: 123456789 - role: admin ssh: servers: - diff --git a/src/main/resources/db/scripts/changelog-master.xml b/src/main/resources/db/scripts/changelog-master.xml deleted file mode 100644 index bd90cc4..0000000 --- a/src/main/resources/db/scripts/changelog-master.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/changelog.xml b/src/main/resources/db/scripts/release_0_0_1/changelog.xml deleted file mode 100644 index 1b0334d..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/changelog.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/00_create_schema_servermonitorbot.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/00_create_schema_servermonitorbot.sql deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql deleted file mode 100644 index 9164f99..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql - ---changeset L_DelOff:create_table_users rollbackSplitStatements:true ---comment: Создание таблицы пользователей -CREATE TABLE users -( - id SERIAL PRIMARY KEY, - login VARCHAR(128), - id_role integer -); - -COMMENT ON TABLE users IS 'Пользователи'; -COMMENT ON COLUMN users.id IS 'Идентификатор пользователя'; -COMMENT ON COLUMN users.login IS 'Логин пользователя'; -COMMENT ON COLUMN users.id_role IS 'Ссылка на роль пользователя'; - ---rollback DROP TABLE users; \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql deleted file mode 100644 index e7d5fad..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql +++ /dev/null @@ -1,15 +0,0 @@ ---liquibase formatted sql - ---changeset L_DelOff:create_table_roles rollbackSplitStatements:true ---comment: Создание таблицы ролей -CREATE TABLE roles -( - id SERIAL PRIMARY KEY, - role VARCHAR(128) -); - -COMMENT ON TABLE roles IS 'Пользователи'; -COMMENT ON COLUMN roles.id IS 'Идентификатор пользователя'; -COMMENT ON COLUMN roles.role IS 'Логин пользователя'; - ---rollback DROP TABLE roles; \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/03_add_FK_users_to_roles.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/03_add_FK_users_to_roles.sql deleted file mode 100644 index 6225766..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/03_add_FK_users_to_roles.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE users -ADD COLUMN role_id INT NOT NULL REFERENCES roles(id); \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/04_add_roles.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/04_add_roles.sql deleted file mode 100644 index 65c0cbf..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/04_add_roles.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO roles (id, role) VALUES (1, 'ADMIN'); -INSERT INTO roles (id, role) VALUES (2, 'USER'); \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql deleted file mode 100644 index ba5a19a..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO roles (id, role) VALUES (3, 'ANONYMOUS'); \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql deleted file mode 100644 index 4a51d65..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql +++ /dev/null @@ -1,9 +0,0 @@ -ALTER TABLE users - DROP COLUMN login; - -ALTER TABLE users - ADD COLUMN telegram_id INTEGER UNIQUE; - COMMENT ON COLUMN users.telegram_id IS 'Telegram ID пользователя'; - -ALTER TABLE users - DROP COLUMN id_role; \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql deleted file mode 100644 index c39ec05..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE roles - DROP COLUMN role; - -ALTER TABLE roles - ADD COLUMN name VARCHAR(128); -COMMENT ON COLUMN roles.name IS 'Имя роли'; \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql deleted file mode 100644 index cdce579..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql +++ /dev/null @@ -1,4 +0,0 @@ -TRUNCATE TABLE roles CASCADE; -INSERT INTO roles (id, name) VALUES (1, 'ADMIN'); -INSERT INTO roles (id, name) VALUES (2, 'USER'); -INSERT INTO roles (id, name) VALUES (3, 'ANONYMOUS'); \ No newline at end of file