Fairly big refactor...

This commit is contained in:
Your Name
2025-04-23 21:50:04 +12:00
parent 50e340f1c5
commit 9a3dd18525
24 changed files with 853 additions and 660 deletions

View File

@ -1,9 +1,11 @@
#include "init_user_directory.hpp"
#include "dropshell.hpp"
#include "servers.hpp"
#include "server_env.hpp"
#include "server_service.hpp"
#include "service_runner.hpp"
#include "tableprint.hpp"
#include "interactive/interactive.hpp"
#include "utils/envmanager.hpp"
#include "utils/directories.hpp"
#include "services.hpp"
#include <iostream>
#include <fstream>
#include <iomanip>
@ -16,32 +18,29 @@ namespace dropshell {
std::vector<ServerInfo> get_configured_servers() {
std::vector<ServerInfo> servers;
std::string user_dir;
if (!is_config_loaded()) {
std::cerr << "Error: Config not loaded" << std::endl;
return servers;
}
if (!get_user_directory(user_dir)) {
std::cerr << "Error: User directory not set" << std::endl;
return servers;
}
fs::path servers_dir = fs::path(user_dir) / "servers";
if (!fs::exists(servers_dir)) {
std::string servers_dir = get_local_config_servers_path();
if (servers_dir.empty()) {
std::cerr << "Error: Servers directory not found" << std::endl;
return servers;
}
if (!fs::exists(servers_dir)) {
std::cerr << "Error: Servers directory not found:" << servers_dir << std::endl;
return servers;
}
for (const auto& entry : fs::directory_iterator(servers_dir)) {
if (fs::is_directory(entry)) {
fs::path env_file = entry.path();
server_env env(env_file.string());
std::string server_name = entry.path().filename().string();
server_env env(server_name);
if (!env.is_valid()) {
std::cerr << "Error: Invalid server environment file: " << env_file.string() << std::endl;
std::cerr << "Error: Invalid server environment file: " << server_name << std::endl;
continue;
}
servers.push_back({
entry.path().filename().string(),
server_name,
env.get_SSH_HOST(),
env.get_SSH_USER(),
env.get_SSH_PORT()
@ -91,10 +90,10 @@ void list_servers() {
for (const auto& server : servers) {
std::vector<int> ports_used;
std::string serviceticks = "";
std::vector<std::string> services = get_server_services(server.name);
std::vector<ServiceInfo> services = get_server_services_info(server.name);
for (const auto& service : services) {
server_service ss;
if (ss.init(server.name, service))
service_runner ss;
if (ss.init(server.name, service.service_name))
{
if (ss.is_healthy())
serviceticks += ":tick: ";
@ -120,21 +119,12 @@ void list_servers() {
}
void show_server_details(const std::string& server_name) {
std::string user_dir;
if (!get_user_directory(user_dir)) {
std::cerr << "Error: User directory not set" << std::endl;
server_env env(server_name);
if (!env.is_valid()) {
std::cerr << "Error: Invalid server environment file: " << server_name << std::endl;
return;
}
fs::path server_dir = fs::path(user_dir) / "servers" / server_name;
if (!fs::exists(server_dir)) {
std::cerr << "Error: Server '" << server_name << "' not found" << std::endl;
return;
}
server_env env(server_dir.string());
//---------------------
// Check if server is reachable via SSH
std::string ssh_address = env.get_SSH_HOST();
@ -176,12 +166,12 @@ void show_server_details(const std::string& server_name) {
tableprint tp("Services: " + server_name, false);
tp.add_row({"Status", "Service", "Ports"});
std::vector<std::string> services = get_server_services(server_name);
std::vector<ServiceInfo> services = get_server_services_info(server_name);
for (const auto& service : services) {
bool healthy = false;
std::vector<int> ports;
server_service ss;
if (ss.init(server_name, service))
service_runner ss;
if (ss.init(server_name, service.service_name))
{
if (ss.is_healthy())
healthy=true;
@ -196,7 +186,7 @@ void show_server_details(const std::string& server_name) {
ports_str += std::to_string(port);
first = false;
}
tp.add_row({healthy ? ":tick:" : ":cross:", service, ports_str});
tp.add_row({healthy ? ":tick:" : ":cross:", service.service_name, ports_str});
} // end of for (const auto& service : services)
tp.print();
} // end of list services