first commit
This commit is contained in:
24
Commands/AuroraCommand.cs
Normal file
24
Commands/AuroraCommand.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class AuroraCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
log.Step($"Starting Aurora refresh (SID: {sid})...");
|
||||
await ServiceFactory.CreateAuroraService(log)
|
||||
.RunAsync(config.Aurora, config.Hana, sid);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
24
Commands/BackupCommand.cs
Normal file
24
Commands/BackupCommand.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class BackupCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
log.Step($"Starting backup (SID: {sid})...");
|
||||
await ServiceFactory.CreateBackupService(log)
|
||||
.RunAsync(config.Backup, config.Hana, sid);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
22
Commands/CleanCommand.cs
Normal file
22
Commands/CleanCommand.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class CleanCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
log.Step("Starting cleanup...");
|
||||
await new CleanerService(log).RunAsync(config.Cleaner);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
40
Commands/CronCommand.cs
Normal file
40
Commands/CronCommand.cs
Normal file
@@ -0,0 +1,40 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
using HanaToolbox.Tui;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class CronCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
|
||||
// cron setup → TUI
|
||||
if (cli.SubCommand == "setup")
|
||||
{
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var tui = new CronSetupTui();
|
||||
config = tui.Run(config);
|
||||
ConfigService.Save(config);
|
||||
log.Always("Cron settings saved to /etc/hanatoolbox/hanatoolbox.json");
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
|
||||
// cron → orchestrator (called by system cron every minute)
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
await ServiceFactory.CreateCronOrchestrator(log).RunAsync(config, sid);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
35
Commands/ExportCommand.cs
Normal file
35
Commands/ExportCommand.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class ExportCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
var schema = cli.Pos(0);
|
||||
var path = cli.Pos(1);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(schema) || string.IsNullOrWhiteSpace(path))
|
||||
{
|
||||
Console.Error.WriteLine("Usage: hanatoolbox export <schema> <path> [-c] [-t N]");
|
||||
return 1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
var svc = ServiceFactory.CreateBackupService(log);
|
||||
var locator = ServiceFactory.CreateLocator(log);
|
||||
var hdbsql = locator.LocateHdbsql(config.Hana.HdbsqlPath, sid, config.Hana.InstanceNumber);
|
||||
var threads = cli.Threads > 0 ? cli.Threads : Math.Max(1, Environment.ProcessorCount / 2);
|
||||
await svc.ExportSchemaAsync(hdbsql, config.Backup.UserKey, schema, path, threads, cli.Compress, sid, CancellationToken.None);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
30
Commands/FirewallCommand.cs
Normal file
30
Commands/FirewallCommand.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
using HanaToolbox.Tui;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class FirewallCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var runner = ServiceFactory.CreateRunner(log);
|
||||
var fwService = new FirewallService(runner, log);
|
||||
var tui = new FirewallTui(fwService, log);
|
||||
var updated = await tui.RunAsync(config.Firewall);
|
||||
if (updated != null)
|
||||
{
|
||||
config.Firewall = updated;
|
||||
ConfigService.Save(config);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
36
Commands/ImportCommand.cs
Normal file
36
Commands/ImportCommand.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class ImportCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
var schema = cli.Pos(0);
|
||||
var path = cli.Pos(1);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(schema) || string.IsNullOrWhiteSpace(path))
|
||||
{
|
||||
Console.Error.WriteLine("Usage: hanatoolbox import <schema> <path> [-c] [-t N] [--replace]");
|
||||
return 1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
var svc = ServiceFactory.CreateBackupService(log);
|
||||
var locator = ServiceFactory.CreateLocator(log);
|
||||
var hdbsql = locator.LocateHdbsql(config.Hana.HdbsqlPath, sid, config.Hana.InstanceNumber);
|
||||
var threads = cli.Threads > 0 ? cli.Threads : Math.Max(1, Environment.ProcessorCount / 2);
|
||||
await svc.ImportSchemaAsync(hdbsql, config.Backup.UserKey, schema, path,
|
||||
threads, cli.Compress, cli.Replace, newSchema: null, sid, CancellationToken.None);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
39
Commands/ImportRenameCommand.cs
Normal file
39
Commands/ImportRenameCommand.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class ImportRenameCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
var schema = cli.Pos(0);
|
||||
var newName = cli.Pos(1);
|
||||
var path = cli.Pos(2);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(schema) || string.IsNullOrWhiteSpace(newName)
|
||||
|| string.IsNullOrWhiteSpace(path))
|
||||
{
|
||||
Console.Error.WriteLine(
|
||||
"Usage: hanatoolbox import-rename <schema> <new-schema> <path> [-c] [-t N] [--replace]");
|
||||
return 1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
var svc = ServiceFactory.CreateBackupService(log);
|
||||
var locator = ServiceFactory.CreateLocator(log);
|
||||
var hdbsql = locator.LocateHdbsql(config.Hana.HdbsqlPath, sid, config.Hana.InstanceNumber);
|
||||
var threads = cli.Threads > 0 ? cli.Threads : Math.Max(1, Environment.ProcessorCount / 2);
|
||||
await svc.ImportSchemaAsync(hdbsql, config.Backup.UserKey, schema, path,
|
||||
threads, cli.Compress, cli.Replace, newName, sid, CancellationToken.None);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
28
Commands/KeyManagerCommand.cs
Normal file
28
Commands/KeyManagerCommand.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
using HanaToolbox.Tui;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class KeyManagerCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
var runner = ServiceFactory.CreateRunner(log);
|
||||
var switcher = new SuUserSwitcher(runner);
|
||||
var locator = new HdbClientLocator(runner);
|
||||
var keySvc = new KeyManagerService(switcher, locator, log);
|
||||
var tui = new KeyManagerTui(keySvc, locator, log);
|
||||
await tui.RunAsync(config.Hana, sid);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
24
Commands/MonitorCommand.cs
Normal file
24
Commands/MonitorCommand.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class MonitorCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
try
|
||||
{
|
||||
var config = ConfigService.Load();
|
||||
var sid = string.IsNullOrWhiteSpace(cli.Sid) ? config.Hana.Sid : cli.Sid;
|
||||
log.Step("Running monitor check...");
|
||||
await ServiceFactory.CreateMonitorService(log)
|
||||
.RunAsync(config.Monitor, config.Hana, sid);
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
30
Commands/OnboardCommand.cs
Normal file
30
Commands/OnboardCommand.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using HanaToolbox.Cli;
|
||||
using HanaToolbox.Config;
|
||||
using HanaToolbox.Logging;
|
||||
using HanaToolbox.Services;
|
||||
using HanaToolbox.Tui;
|
||||
|
||||
namespace HanaToolbox.Commands;
|
||||
|
||||
public static class OnboardCommand
|
||||
{
|
||||
public static async Task<int> RunAsync(CliArgs cli)
|
||||
{
|
||||
var log = new AppLogger(cli.Verbose);
|
||||
try
|
||||
{
|
||||
var runner = ServiceFactory.CreateRunner(log);
|
||||
var switcher = new SuUserSwitcher(runner);
|
||||
var locator = new HdbClientLocator(runner);
|
||||
var keySvc = new KeyManagerService(switcher, locator, log);
|
||||
var keyTui = new KeyManagerTui(keySvc, locator, log);
|
||||
var fwSvc = new FirewallService(runner, log);
|
||||
var fwTui = new FirewallTui(fwSvc, log);
|
||||
var cronTui = new CronSetupTui();
|
||||
var tui = new OnboardTui(keyTui, cronTui, fwTui, log);
|
||||
await tui.RunAsync();
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex) { log.Error(ex.Message); return 1; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user