Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Omika.Data\Omika.Data.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,124 @@
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Omika.Data.HfSql.Metadata;
|
||||
using Omika.Data.HfSql.Protection;
|
||||
|
||||
namespace HfSqlModelAudit;
|
||||
|
||||
/// <summary>
|
||||
/// Audite les modèles physiques HFSQL (Batik / Omika) déclarés dans l'assembly
|
||||
/// Omika.Data. Lit par réflexion l'attribut <see cref="HfSqlTableAttribute"/> de
|
||||
/// chaque type des namespaces <c>Omika.Data.HfSql.Models.Batik</c> et
|
||||
/// <c>Omika.Data.HfSql.Models.Omika</c>.
|
||||
///
|
||||
/// Génère deux rapports :
|
||||
/// docs/diagnostics/hfsql-model-audit.csv
|
||||
/// docs/diagnostics/hfsql-model-audit.md
|
||||
///
|
||||
/// Aucune connexion n'est ouverte et aucun secret n'est manipulé.
|
||||
/// </summary>
|
||||
public static class Program
|
||||
{
|
||||
private const string BatikNamespace = "Omika.Data.HfSql.Models.Batik";
|
||||
private const string OmikaNamespace = "Omika.Data.HfSql.Models.Omika";
|
||||
|
||||
private sealed record ModelInfo(
|
||||
string Schema,
|
||||
string LogicalName,
|
||||
string DiskName,
|
||||
string Groups,
|
||||
string SchemaVersions);
|
||||
|
||||
public static int Main(string[] args)
|
||||
{
|
||||
var outputDir = args.Length > 0 ? args[0] : @"D:\Avalonia\Omika\docs\diagnostics";
|
||||
Directory.CreateDirectory(outputDir);
|
||||
|
||||
var assembly = typeof(HfsqlFilePasswordDeriver).Assembly;
|
||||
var models = LoadModels(assembly);
|
||||
|
||||
var batik = models.Where(m => m.Schema == "Batik").OrderBy(m => m.LogicalName).ToList();
|
||||
var omika = models.Where(m => m.Schema == "Omika").OrderBy(m => m.LogicalName).ToList();
|
||||
|
||||
WriteCsv(Path.Combine(outputDir, "hfsql-model-audit.csv"), models);
|
||||
WriteMarkdown(Path.Combine(outputDir, "hfsql-model-audit.md"), batik, omika);
|
||||
|
||||
Console.WriteLine($"Batik : {batik.Count} tables");
|
||||
Console.WriteLine($"Omika : {omika.Count} tables");
|
||||
Console.WriteLine($"Total : {models.Count} tables");
|
||||
Console.WriteLine("Rapports générés dans " + outputDir);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static List<ModelInfo> LoadModels(Assembly assembly)
|
||||
{
|
||||
var result = new List<ModelInfo>();
|
||||
|
||||
foreach (var type in assembly.GetTypes())
|
||||
{
|
||||
string schema;
|
||||
if (type.Namespace == BatikNamespace)
|
||||
schema = "Batik";
|
||||
else if (type.Namespace == OmikaNamespace)
|
||||
schema = "Omika";
|
||||
else
|
||||
continue;
|
||||
|
||||
var attr = type.GetCustomAttribute<HfSqlTableAttribute>();
|
||||
if (attr is null)
|
||||
continue;
|
||||
|
||||
result.Add(new ModelInfo(
|
||||
schema,
|
||||
attr.TableName,
|
||||
attr.DiskName ?? "",
|
||||
string.Join(",", attr.Groups),
|
||||
string.Join(",", attr.SchemaVersions)));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void WriteCsv(string path, List<ModelInfo> models)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine("Schema,Table,DiskName,Groups,SchemaVersions");
|
||||
foreach (var m in models.OrderBy(m => m.Schema).ThenBy(m => m.LogicalName))
|
||||
{
|
||||
sb.AppendLine($"{m.Schema},{m.LogicalName},{m.DiskName},{m.Groups},{m.SchemaVersions}");
|
||||
}
|
||||
File.WriteAllText(path, sb.ToString());
|
||||
}
|
||||
|
||||
private static void WriteMarkdown(string path, List<ModelInfo> batik, List<ModelInfo> omika)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine("# Audit des modèles physiques HFSQL");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("Généré par `tools/HfSqlModelAudit` à partir de l'assembly `Omika.Data`.");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("## Batik");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine($"**{batik.Count} tables**");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("| Table | DiskName | Groups |");
|
||||
sb.AppendLine("|---|---|---|");
|
||||
foreach (var m in batik)
|
||||
{
|
||||
sb.AppendLine($"| {m.LogicalName} | {m.DiskName} | {m.Groups} |");
|
||||
}
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("## Omika");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine($"**{omika.Count} tables**");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("| Table | DiskName | Groups |");
|
||||
sb.AppendLine("|---|---|---|");
|
||||
foreach (var m in omika)
|
||||
{
|
||||
sb.AppendLine($"| {m.LogicalName} | {m.DiskName} | {m.Groups} |");
|
||||
}
|
||||
sb.AppendLine();
|
||||
File.WriteAllText(path, sb.ToString());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user