Skip to content

Commit

Permalink
1.0.24012024
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreyMas committed Jan 24, 2024
1 parent a7ae7f5 commit 265be5b
Show file tree
Hide file tree
Showing 11 changed files with 201 additions and 26 deletions.
9 changes: 9 additions & 0 deletions RXInstanceManager/AppConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System;

namespace RXInstanceManager
{
public class AppConfig
{
public string LogViewerPath { get; set; }
}
}
23 changes: 21 additions & 2 deletions RXInstanceManager/AppHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,19 @@ public static void UpdateInstanceData(Instance instance)

var protocol = yamlValues.GetConfigStringValue("variables.protocol");
var host = yamlValues.GetConfigStringValue("variables.host_fqdn");
var dbNameFromVar = yamlValues.GetConfigStringValue("variables.database");
var dbEngine = yamlValues.GetConfigStringValue("common_config.DATABASE_ENGINE");
var connection = yamlValues.GetConfigStringValue("common_config.CONNECTION_STRING");
var dbName = AppHelper.GetDBNameFromConnectionString(dbEngine, connection);
var dbName = AppHelper.GetDBNameFromConnectionString(dbEngine, connection, dbNameFromVar);

instance.Name = yamlValues.GetConfigStringValue("variables.purpose");
instance.Port = yamlValues.GetConfigIntValue("variables.http_port") ?? 0;
instance.URL = AppHelper.GetClientURL(protocol, host, instance.Port);
instance.DBName = dbName ?? string.Empty;
instance.StoragePath = yamlValues.GetConfigStringValue("variables.home_path");
instance.SourcesPath = yamlValues.GetConfigStringValue("services_config.DevelopmentStudio.GIT_ROOT_DIRECTORY");
instance.SourcesPath = AppHelper.GetSourcesPath(instance.StoragePath, yamlValues.GetConfigStringValue("services_config.DevelopmentStudio.GIT_ROOT_DIRECTORY"));
instance.LogsPath = AppHelper.GetLogsPath(instance.StoragePath, yamlValues.GetConfigStringValue("logs_path.LOGS_PATH"));
instance.ProjectPath = yamlValues.GetConfigStringValue("variables.project_config_path");
instance.PlatformVersion = GetInstancePlatformVersion(instance.InstancePath);
instance.SolutionVersion = GetInstanceSolutionVersion(instance.InstancePath);
instance.Save();
Expand Down Expand Up @@ -222,6 +225,22 @@ public static void InfoHandler(Instance instance, string message)
logger.Info(logBody);
}

public static void DebugHandler(Instance instance, string message)
{
var code = instance != null ? instance.Code : string.Empty;
var path = instance != null ? instance.InstancePath : string.Empty;
var logBody = string.Format($"Code: {code}, Path: {path}, Message: {message}");
logger.Debug(logBody);
}

public static void ErrorHandler(Instance instance, string message)
{
var code = instance != null ? instance.Code : string.Empty;
var path = instance != null ? instance.InstancePath : string.Empty;
var logBody = string.Format($"Code: {code}, Path: {path}, Message: {message}");
logger.Error(logBody);
}

public static void ErrorHandler(Instance instance, Exception exception)
{
var code = instance != null ? instance.Code : string.Empty;
Expand Down
30 changes: 27 additions & 3 deletions RXInstanceManager/AppHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,20 +119,44 @@ public static string GetClientURL(string protocol, string host, int port)
return $"{protocol}://{host}:{port}/Client";
}

public static string GetDBNameFromConnectionString(string engine, string connectionString)
public static string GetLogsPath(string storagePath, string logsPath)
{
return logsPath
.Replace("{{ home_path }}", storagePath)
.Replace("{{home_path}}", storagePath);
}

public static string GetSourcesPath(string storagePath, string sourcesPath)
{
return sourcesPath
.Replace("{{ home_path }}", storagePath)
.Replace("{{home_path}}", storagePath);
}

public static string GetDBName(string dbName, string dbNameFromVar)
{
if (string.IsNullOrEmpty(dbNameFromVar))
return dbName;

return dbName
.Replace("{{ database }}", dbNameFromVar)
.Replace("{{database}}", dbNameFromVar);
}

public static string GetDBNameFromConnectionString(string engine, string connectionString, string dbNameFromVar)
{
if (engine == "mssql")
{
var databaseNameParam = connectionString.Split(';').FirstOrDefault(x => x.ToLower().Contains("initial catalog"));
if (databaseNameParam != null)
return databaseNameParam.Split('=')[1];
return GetDBName(databaseNameParam.Split('=')[1], dbNameFromVar);
}

if (engine == "postgres")
{
var databaseNameParam = connectionString.Split(';').FirstOrDefault(x => x.ToLower().Contains("database"));
if (databaseNameParam != null)
return databaseNameParam.Split('=')[1];
return GetDBName(databaseNameParam.Split('=')[1], dbNameFromVar);
}

return null;
Expand Down
46 changes: 46 additions & 0 deletions RXInstanceManager/AppInitializer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text.Json;

namespace RXInstanceManager
{
public static class AppInitializer
{
internal static readonly string FileName = "rxman.config";

public static string FilePath { get; }
public static AppConfig Config { get; set; }

public static void Initialize()
{
if (!File.Exists(FilePath))
{
var config = new AppConfig();
config.LogViewerPath = "";

var newJson = Serialize(config);
File.WriteAllText(FilePath, newJson);
}

var json = File.ReadAllText(FilePath);
Config = Deserialize(json);
}

public static string Serialize(AppConfig config)
{
return JsonSerializer.Serialize<AppConfig>(config);
}

public static AppConfig Deserialize(string json)
{
return JsonSerializer.Deserialize<AppConfig>(json);
}

static AppInitializer()
{
FilePath = $"{AppContext.BaseDirectory}{FileName}";
}
}
}
8 changes: 8 additions & 0 deletions RXInstanceManager/Entities/Models/Instance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ public class Instance
[Field("sources", Size = 150)]
public string SourcesPath { get; set; }

[Field("project", Size = 150)]
public string ProjectPath { get; set; }

[Field("logs", Size = 150)]
public string LogsPath { get; set; }

[Field("status", Size = 12)]
public string Status { get; set; }

Expand All @@ -61,6 +67,8 @@ public override string ToString()
builder.AppendLine("Путь до инстанса: " + InstancePath ?? string.Empty);
builder.AppendLine("Путь до хранилища: " + StoragePath ?? string.Empty);
builder.AppendLine("Путь до исходников: " + SourcesPath ?? string.Empty);
builder.AppendLine("Путь до логов: " + LogsPath ?? string.Empty);
builder.AppendLine("Путь до проекта: " + ProjectPath ?? string.Empty);
builder.AppendLine("Имя службы: " + ServiceName ?? string.Empty);
builder.AppendLine("Имя БД: " + DBName ?? string.Empty);
return builder.ToString();
Expand Down
7 changes: 5 additions & 2 deletions RXInstanceManager/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,13 @@
<Button x:Name="ButtonInstruction" Content="Инструкция" Style="{DynamicResource RecordActionButton}" Background="DimGray" Click="ButtonInstruction_Click" />
<Button x:Name="ButtonAdd" Content="Добавить" Style="{DynamicResource RecordActionButton}" Margin="10,5,5,5" Background="SkyBlue" Click="ButtonAdd_Click" />
<Button x:Name="ButtonInstall" Content="Установить" Style="{DynamicResource RecordActionButton}" Background="MediumSlateBlue" Click="ButtonInstall_Click" />
<Button x:Name="ButtonDelete" Content="Удалить" Style="{DynamicResource RecordActionButton}" Background="OrangeRed" Click="ButtonDelete_Click" />
<Button x:Name="ButtonDelete" Content="Удалить" Style="{DynamicResource RecordActionButton}" Background="DarkRed" Click="ButtonDelete_Click" />
<Button x:Name="ButtonCopy" Content="Копировать" Style="{DynamicResource RecordActionButton}" Background="ForestGreen" Click="ButtonCopy_Click" />
<Button x:Name="ButtonStart" Content="Запустить" Style="{DynamicResource RecordActionButton}" Background="SteelBlue" Click="ButtonStart_Click" />
<Button x:Name="ButtonStop" Content="Остановить" Style="{DynamicResource RecordActionButton}" Background="SteelBlue" Click="ButtonStop_Click" />
<Button x:Name="ButtonDDSStart" Content="Запустить DDS" Style="{DynamicResource RecordActionButton}" Background="GreenYellow" Click="ButtonDDSStart_Click" />
<Button x:Name="ButtonRXStart" Content="Запустить RX" Style="{DynamicResource RecordActionButton}" Background="Violet" Click="ButtonRXStart_Click" />
<Button x:Name="ButtonLogViewer" Content="Запустить LogViewer" Style="{DynamicResource RecordActionButton}" Background="DarkOrange" Click="ButtonLogViewer_Click"/>
</StackPanel>
<DataGrid x:Name="GridInstances" AutoGenerateColumns="False" Style="{DynamicResource DataGridStyle}" Grid.Row="1" SelectionChanged="GridInstances_SelectionChanged" >
<DataGrid.Columns>
Expand All @@ -54,13 +55,15 @@
<DataGridTextColumn Binding="{Binding DBName}" Header="Имя БД" Width="100" />
<DataGridTextColumn Binding="{Binding Status}" Header="Статус" Width="80" />
<DataGridTextColumn Binding="{Binding Name}" Header="Назначение" Width="250" />
<DataGridTextColumn Binding="{Binding ProjectPath}" Header="Проект" Width="250" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu x:Name="InstancesContextMenu">
<MenuItem x:Name="ConfigContext" Header="Открыть config.yml" Click="ConfigContext_Click" />
<MenuItem x:Name="RestartContext" Header="Пересобрать из config.yml" Click="RestartContext_Click" />
<MenuItem x:Name="CmdContext" Header="Запустить cmd" Click="CmdContext_Click" />
<MenuItem x:Name="CmdAdminContext" Header="Запустить cmd (от администратора)" Click="CmdAdminContext_Click" />
<MenuItem x:Name="LogsContext" Header="Открыть папку логов" Click="LogsContext_Click" />
<MenuItem x:Name="RemoveContext" Header="Убрать инстанс из списка" Click="RemoveContext_Click" />
<MenuItem x:Name="InfoContext" Header="Информация" Click="InfoContext_Click" />
</ContextMenu>
</DataGrid.ContextMenu>
Expand Down
74 changes: 64 additions & 10 deletions RXInstanceManager/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Threading;
using System.Reflection;
using Microsoft.Win32;

Expand All @@ -24,6 +23,7 @@ public MainWindow()
if (!Directory.Exists(Constants.LogPath))
Directory.CreateDirectory(Constants.LogPath);

AppInitializer.Initialize();
DBInitializer.Initialize();
Instances.Create();
Configs.Create();
Expand Down Expand Up @@ -95,15 +95,23 @@ private void ButtonAdd_Click(object sender, RoutedEventArgs e)
{
AppHandlers.InfoHandler(_instance, MethodBase.GetCurrentMethod().Name);

var instancePath = Dialogs.ShowEnterValueDialog("Укажите путь до инстанса...");
if (instancePath == null)
return;
Instance instance;
var instancePath = string.Empty;

using (var openFolderDialog = new System.Windows.Forms.FolderBrowserDialog())
{
openFolderDialog.RootFolder = Environment.SpecialFolder.MyComputer;
var result = openFolderDialog.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK && !string.IsNullOrWhiteSpace(openFolderDialog.SelectedPath))
instancePath = openFolderDialog.SelectedPath;
else
return;
}

var isValid = ValidateBeforeAddInstance(instancePath);
if (!isValid)
return;

Instance instance;
try
{
var config = AppHandlers.GetInstanceConfig(instancePath);
Expand Down Expand Up @@ -306,6 +314,33 @@ private void ButtonInstruction_Click(object sender, RoutedEventArgs e)
}
}

private void ButtonLogViewer_Click(object sender, RoutedEventArgs e)
{
AppHandlers.InfoHandler(_instance, MethodBase.GetCurrentMethod().Name);

if (string.IsNullOrEmpty(_instance.LogsPath))
{
AppHandlers.DebugHandler(_instance, _instance.LogsPath != null ? _instance.LogsPath : string.Empty);
AppHandlers.ErrorHandler(_instance, "Не вычислен путь к логам инстанса");
return;
}

try
{
using (var regKey = Registry.CurrentUser.OpenSubKey(@"Software\JsonLogViewerSettings", false))
{
if (regKey != null && (string)regKey.GetValue("LogsPath") != _instance.LogsPath)
AppHandlers.ExecuteCmdCommands(true, false, "REG ADD HKCU\\Software\\JsonLogViewerSettings /v LogsPath /t REG_SZ /d \"" + _instance.LogsPath + "\" /f");
}

AppHandlers.LaunchProcess(AppInitializer.Config.LogViewerPath);
}
catch (Exception ex)
{
AppHandlers.ErrorHandler(_instance, ex);
}
}

#endregion

#region ContextHandlers
Expand Down Expand Up @@ -345,23 +380,24 @@ private void RestartContext_Click(object sender, RoutedEventArgs e)
}
}

private void CmdContext_Click(object sender, RoutedEventArgs e)
private void CmdAdminContext_Click(object sender, RoutedEventArgs e)
{
AppHandlers.InfoHandler(_instance, MethodBase.GetCurrentMethod().Name);

if (_instance == null)
return;

try
{
AppHandlers.ExecuteCmdCommand($"cd {_instance.InstancePath}", false);
AppHandlers.ExecuteCmdCommand($"cd {_instance.InstancePath}", true);
}
catch (Exception ex)
{
AppHandlers.ErrorHandler(_instance, ex);
}
}

private void CmdAdminContext_Click(object sender, RoutedEventArgs e)
private void LogsContext_Click(object sender, RoutedEventArgs e)
{
AppHandlers.InfoHandler(_instance, MethodBase.GetCurrentMethod().Name);

Expand All @@ -370,7 +406,25 @@ private void CmdAdminContext_Click(object sender, RoutedEventArgs e)

try
{
AppHandlers.ExecuteCmdCommand($"cd {_instance.InstancePath}", true);
AppHandlers.LaunchProcess(_instance.LogsPath);
}
catch (Exception ex)
{
AppHandlers.ErrorHandler(_instance, ex);
}
}

private void RemoveContext_Click(object sender, RoutedEventArgs e)
{
AppHandlers.InfoHandler(_instance, MethodBase.GetCurrentMethod().Name);

if (_instance == null)
return;

try
{
Instances.Delete(_instance);
LoadInstances();
}
catch (Exception ex)
{
Expand Down Expand Up @@ -426,6 +480,6 @@ private void HiddenButton_Click(object sender, RoutedEventArgs e)
//AppHandlers.SetConfigStringValue(_instance.Config, "variables.instance_name", "test");
}


}
}
10 changes: 8 additions & 2 deletions RXInstanceManager/MainWindowHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,11 @@ private void ActionButtonVisibleChanging(string status = null)
ButtonDelete.Visibility = Visibility.Collapsed;
ButtonDDSStart.Visibility = Visibility.Collapsed;
ButtonRXStart.Visibility = Visibility.Collapsed;
ButtonLogViewer.Visibility = Visibility.Collapsed;

RestartContext.Visibility = Visibility.Collapsed;
ConfigContext.Visibility = _instance == null ? Visibility.Collapsed : Visibility.Visible;
CmdContext.Visibility = _instance == null ? Visibility.Collapsed : Visibility.Visible;
LogsContext.Visibility = _instance == null ? Visibility.Collapsed : Visibility.Visible;
CmdAdminContext.Visibility = _instance == null ? Visibility.Collapsed : Visibility.Visible;
InfoContext.Visibility = _instance == null ? Visibility.Collapsed : Visibility.Visible;

Expand All @@ -107,12 +108,16 @@ private void ActionButtonVisibleChanging(string status = null)
ButtonRXStart.Visibility = Visibility.Visible;
ButtonStop.Visibility = Visibility.Visible;
RestartContext.Visibility = Visibility.Visible;
if (!string.IsNullOrEmpty(AppInitializer.Config.LogViewerPath))
ButtonLogViewer.Visibility = Visibility.Visible;
break;
case Constants.InstanceStatus.Stopped:
//ButtonCopy.Visibility = Visibility.Visible;
ButtonDelete.Visibility = Visibility.Visible;
ButtonStart.Visibility = Visibility.Visible;
RestartContext.Visibility = Visibility.Visible;
if (!string.IsNullOrEmpty(AppInitializer.Config.LogViewerPath))
ButtonLogViewer.Visibility = Visibility.Visible;
break;
}
}
Expand Down Expand Up @@ -237,8 +242,9 @@ private static bool ValidateBeforeInstallInstance(Dictionary<string, string> yam
return false;
}

var dbNameFromVar = yamlValues.GetConfigStringValue("variables.database");
var connection = yamlValues.GetConfigStringValue("common_config.CONNECTION_STRING");
var dbName = AppHelper.GetDBNameFromConnectionString(dbEngine, connection);
var dbName = AppHelper.GetDBNameFromConnectionString(dbEngine, connection, dbNameFromVar);
if (!string.IsNullOrWhiteSpace(dbName))
{
if (instances.Any(x => x.Code != _instance.Code && x.DBName == dbName))
Expand Down
Loading

0 comments on commit 265be5b

Please sign in to comment.