Добавил кнопку слежения за температурой дисков

feature/task-10-hddtemp
L_DelOff 2023-08-13 19:36:12 +03:00
parent e75c496ea8
commit d0be1f0a62
6 changed files with 109 additions and 15 deletions

View File

@ -10,6 +10,8 @@ import ru.ldeloff.servermonitorbot.repository.SshRepository;
import ru.ldeloff.servermonitorbot.service.command.FirstUseCommand; import ru.ldeloff.servermonitorbot.service.command.FirstUseCommand;
import ru.ldeloff.servermonitorbot.service.command.GetStatusSessions; import ru.ldeloff.servermonitorbot.service.command.GetStatusSessions;
import ru.ldeloff.servermonitorbot.service.command.SwitchToMainMenu; import ru.ldeloff.servermonitorbot.service.command.SwitchToMainMenu;
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.UnameAggregateCommand;
import ru.ldeloff.servermonitorbot.service.command.uname.UnameCommand; import ru.ldeloff.servermonitorbot.service.command.uname.UnameCommand;
@ -17,7 +19,6 @@ import ru.ldeloff.servermonitorbot.service.command.uname.UnameCommand;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
public class TelegramBotController extends TelegramLongPollingBot { public class TelegramBotController extends TelegramLongPollingBot {
final TelegramBot telegramBot; final TelegramBot telegramBot;
final SshRepository sshRepository; final SshRepository sshRepository;
@ -26,6 +27,8 @@ public class TelegramBotController extends TelegramLongPollingBot {
final UnameAggregateCommand unameAggregateCommand; final UnameAggregateCommand unameAggregateCommand;
final SwitchToMainMenu switchToMainMenu; final SwitchToMainMenu switchToMainMenu;
final UnameCommand unameCommand; final UnameCommand unameCommand;
final HddTempAggregateCommand hddTempAggregateCommand;
final HddTempCommand hddTempCommand;
@Override @Override
public void onUpdateReceived(Update update) { public void onUpdateReceived(Update update) {
@ -42,6 +45,9 @@ public class TelegramBotController extends TelegramLongPollingBot {
case "uname" -> { case "uname" -> {
unameAggregateCommand.execute(update, this); unameAggregateCommand.execute(update, this);
} }
case "HDD.temp" -> {
hddTempAggregateCommand.execute(update, this);
}
default -> { default -> {
switchToMainMenu.execute(update, this); switchToMainMenu.execute(update, this);
} }
@ -54,6 +60,9 @@ public class TelegramBotController extends TelegramLongPollingBot {
case "uname" -> { case "uname" -> {
unameCommand.execute(update, this); unameCommand.execute(update, this);
} }
case "HDD.temp" -> {
hddTempCommand.execute(update, this);
}
default -> { default -> {
switchToMainMenu.execute(update, this); switchToMainMenu.execute(update, this);
} }
@ -63,17 +72,14 @@ public class TelegramBotController extends TelegramLongPollingBot {
} }
} }
} }
@Override @Override
public String getBotUsername() { public String getBotUsername() {
return telegramBot.getBotUsername(); return telegramBot.getBotUsername();
} }
@Override @Override
public String getBotToken() { public String getBotToken() {
return telegramBot.getBotToken(); return telegramBot.getBotToken();
} }
@Override @Override
public void onClosing() { public void onClosing() {
super.onClosing(); super.onClosing();

View File

@ -0,0 +1,24 @@
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);
}
}

View File

@ -0,0 +1,64 @@
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<SshServer> 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<SshServer> 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;
}
}
}

View File

@ -6,19 +6,19 @@ import ru.ldeloff.servermonitorbot.model.User;
import ru.ldeloff.servermonitorbot.service.command.CommandTemplate; import ru.ldeloff.servermonitorbot.service.command.CommandTemplate;
import ru.ldeloff.servermonitorbot.service.role.RoleService; import ru.ldeloff.servermonitorbot.service.role.RoleService;
import ru.ldeloff.servermonitorbot.service.user.UserService; import ru.ldeloff.servermonitorbot.service.user.UserService;
import ru.ldeloff.servermonitorbot.utils.ui.uname.UnameChatButtonAggregate; import ru.ldeloff.servermonitorbot.utils.ui.uname.ServerListButtons;
@Service @Service
public class UnameAggregateCommand extends CommandTemplate { public class UnameAggregateCommand extends CommandTemplate {
final UnameChatButtonAggregate unameChatButtonAggregate; final ServerListButtons serverListButtons;
public UnameAggregateCommand(UserService userService, RoleService roleService, UnameChatButtonAggregate unameChatButtonAggregate) { public UnameAggregateCommand(UserService userService, RoleService roleService, ServerListButtons serverListButtons) {
super(userService, roleService); super(userService, roleService);
this.unameChatButtonAggregate = unameChatButtonAggregate; this.serverListButtons = serverListButtons;
} }
@Override @Override
public SendMessage actionForAuth(User user, SendMessage message) { public SendMessage actionForAuth(User user, SendMessage message) {
return unameChatButtonAggregate.uiForm(message); return serverListButtons.uiForm(message);
} }
} }

View File

@ -13,6 +13,7 @@ import java.util.ArrayList;
public class TelegramBotKeyboard implements UiFormer { public class TelegramBotKeyboard implements UiFormer {
private final String STATUS = "Статус"; private final String STATUS = "Статус";
private final String UNAME = "uname"; private final String UNAME = "uname";
private final String HDD_TEMP = "HDD.temp";
@Override @Override
public SendMessage uiForm(SendMessage message) { public SendMessage uiForm(SendMessage message) {
@ -27,6 +28,7 @@ public class TelegramBotKeyboard implements UiFormer {
keyboardRow.add(new KeyboardButton(STATUS)); keyboardRow.add(new KeyboardButton(STATUS));
keyboardRow.add(new KeyboardButton(UNAME)); keyboardRow.add(new KeyboardButton(UNAME));
keyboardRow.add(new KeyboardButton(HDD_TEMP));
replyKeyboardMarkup.setKeyboard(keyboardRows); replyKeyboardMarkup.setKeyboard(keyboardRows);
message.setReplyMarkup(replyKeyboardMarkup); message.setReplyMarkup(replyKeyboardMarkup);

View File

@ -1,12 +1,10 @@
package ru.ldeloff.servermonitorbot.utils.ui.uname; package ru.ldeloff.servermonitorbot.utils.ui.uname;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage; 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.InlineKeyboardMarkup;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton; 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.service.ssh.SshService;
import ru.ldeloff.servermonitorbot.utils.ui.UiFormer; import ru.ldeloff.servermonitorbot.utils.ui.UiFormer;
@ -16,7 +14,7 @@ import java.util.Objects;
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class UnameChatButtonAggregate implements UiFormer { public class ServerListButtons implements UiFormer {
private final SshService sshService; private final SshService sshService;
@ -32,7 +30,7 @@ public class UnameChatButtonAggregate implements UiFormer {
List<InlineKeyboardButton> keyboardRow = new ArrayList<>(); List<InlineKeyboardButton> keyboardRow = new ArrayList<>();
InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton();
inlineKeyboardButton.setText(sshServer.getName()); inlineKeyboardButton.setText(sshServer.getName());
inlineKeyboardButton.setCallbackData("uname: " + sshServer.getName()); inlineKeyboardButton.setCallbackData(message.getText() + ": " + sshServer.getName());
keyboardRow.add(inlineKeyboardButton); keyboardRow.add(inlineKeyboardButton);
keyboard.add(keyboardRow); keyboard.add(keyboardRow);
} }
@ -43,14 +41,14 @@ public class UnameChatButtonAggregate implements UiFormer {
List<InlineKeyboardButton> keyboardRow = new ArrayList<>(); List<InlineKeyboardButton> keyboardRow = new ArrayList<>();
InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton(); InlineKeyboardButton inlineKeyboardButton = new InlineKeyboardButton();
inlineKeyboardButton.setText("Все сервера"); inlineKeyboardButton.setText("Все сервера");
inlineKeyboardButton.setCallbackData("uname: all"); inlineKeyboardButton.setCallbackData(message.getText() + ": all");
keyboardRow.add(inlineKeyboardButton); keyboardRow.add(inlineKeyboardButton);
keyboard.add(keyboardRow); keyboard.add(keyboardRow);
} }
inlineKeyboardMarkup.setKeyboard(keyboard); inlineKeyboardMarkup.setKeyboard(keyboard);
message.setReplyMarkup(inlineKeyboardMarkup); message.setReplyMarkup(inlineKeyboardMarkup);
message.setText("Выполнить uname для"); message.setText("Выполнить " + message.getText() + " для");
return message; return message;
} }