From 4d46df1b4c1e95a5805ba2d5daefc6db237de1de Mon Sep 17 00:00:00 2001 From: windpacer Date: Thu, 23 Apr 2026 09:30:08 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20.gitignore=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EB=B9=8C=EB=93=9C=20=EC=B6=9C=EB=A0=A5=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0,=20=EC=86=8C=EC=8A=A4=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 27 + .roo.md | 94 + ...PartsAssemblyInfo.cache => autocomplete.py | 0 plans/history-query-status-indicator.md | 52 + plans/text-to-sql-timescaledb-plan.md | 416 ++ src/Core/Application/DTOs/ExperionDtos.cs | 26 + src/Core/Application/DTOs/TextToSqlDtos.cs | 51 + .../Interfaces/IExperionServices.cs | 7 + .../Interfaces/ITextToSqlService.cs | 19 + .../Application/Services/TextToSqlService.cs | 394 ++ .../ExperionCertificateService.cs | 11 +- src/Infrastructure/Csv/ExperionCsvService.cs | 10 +- .../Database/ExperionDbContext.cs | 474 +- src/Infrastructure/OpcUa/ExperionOpcClient.cs | 13 +- .../OpcUa/ExperionOpcServerService.cs | 23 +- .../OpcUa/ExperionRealtimeService.cs | 40 +- src/Web/Controllers/ExperionControllers.cs | 119 +- src/Web/Controllers/TextToSqlController.cs | 68 + src/Web/ExperionCrawler.csproj | 4 +- src/Web/Program.cs | 3 + src/Web/appsettings.json | 12 +- .../net8.0/linux-x64/BitFaster.Caching.dll | Bin 164864 -> 0 bytes .../bin/Debug/net8.0/linux-x64/CsvHelper.dll | Bin 225280 -> 0 bytes .../Debug/net8.0/linux-x64/ExperionCrawler | Bin 72568 -> 0 bytes .../linux-x64/ExperionCrawler.deps.json | 1133 ----- .../net8.0/linux-x64/ExperionCrawler.dll | Bin 245760 -> 0 bytes .../net8.0/linux-x64/ExperionCrawler.pdb | Bin 64568 -> 0 bytes .../ExperionCrawler.runtimeconfig.json | 20 - ...perionCrawler.staticwebassets.runtime.json | 1 - .../bin/Debug/net8.0/linux-x64/Humanizer.dll | Bin 355944 -> 0 bytes .../Microsoft.Bcl.AsyncInterfaces.dll | Bin 16000 -> 0 bytes ...crosoft.CodeAnalysis.CSharp.Workspaces.dll | Bin 870048 -> 0 bytes .../Microsoft.CodeAnalysis.CSharp.dll | Bin 6221488 -> 0 bytes .../Microsoft.CodeAnalysis.Workspaces.dll | Bin 3643568 -> 0 bytes .../linux-x64/Microsoft.CodeAnalysis.dll | Bin 2856112 -> 0 bytes ...osoft.EntityFrameworkCore.Abstractions.dll | Bin 34872 -> 0 bytes .../Microsoft.EntityFrameworkCore.Design.dll | Bin 486472 -> 0 bytes ...crosoft.EntityFrameworkCore.Relational.dll | Bin 1994312 -> 0 bytes .../Microsoft.EntityFrameworkCore.dll | Bin 2534472 -> 0 bytes .../Microsoft.Extensions.Caching.Memory.dll | Bin 45832 -> 0 bytes ...sions.DependencyInjection.Abstractions.dll | Bin 65288 -> 0 bytes ...crosoft.Extensions.DependencyInjection.dll | Bin 94992 -> 0 bytes .../Microsoft.Extensions.DependencyModel.dll | Bin 79664 -> 0 bytes ...rosoft.Extensions.Logging.Abstractions.dll | Bin 66352 -> 0 bytes .../Microsoft.Extensions.Logging.dll | Bin 50992 -> 0 bytes .../Microsoft.Extensions.Options.dll | Bin 64824 -> 0 bytes .../Microsoft.Extensions.Primitives.dll | Bin 44344 -> 0 bytes .../net8.0/linux-x64/Microsoft.OpenApi.dll | Bin 233408 -> 0 bytes .../net8.0/linux-x64/Mono.TextTemplating.dll | Bin 114688 -> 0 bytes .../net8.0/linux-x64/Newtonsoft.Json.dll | Bin 723368 -> 0 bytes .../Npgsql.EntityFrameworkCore.PostgreSQL.dll | Bin 623616 -> 0 bytes src/Web/bin/Debug/net8.0/linux-x64/Npgsql.dll | Bin 1406976 -> 0 bytes .../Debug/net8.0/linux-x64/Opc.Ua.Client.dll | Bin 849536 -> 0 bytes .../net8.0/linux-x64/Opc.Ua.Configuration.dll | Bin 85120 -> 0 bytes .../Debug/net8.0/linux-x64/Opc.Ua.Core.dll | Bin 7869056 -> 0 bytes .../Opc.Ua.Security.Certificates.dll | Bin 80000 -> 0 bytes .../Debug/net8.0/linux-x64/Opc.Ua.Server.dll | Bin 635008 -> 0 bytes .../Debug/net8.0/linux-x64/Opc.Ua.Types.dll | Bin 1124480 -> 0 bytes .../Swashbuckle.AspNetCore.Swagger.dll | Bin 17920 -> 0 bytes .../Swashbuckle.AspNetCore.SwaggerGen.dll | Bin 147456 -> 0 bytes .../Swashbuckle.AspNetCore.SwaggerUI.dll | Bin 2275328 -> 0 bytes .../Debug/net8.0/linux-x64/System.CodeDom.dll | Bin 187224 -> 0 bytes .../System.Collections.Immutable.dll | Bin 240904 -> 0 bytes .../System.Composition.AttributedModel.dll | Bin 18536 -> 0 bytes .../System.Composition.Convention.dll | Bin 52840 -> 0 bytes .../linux-x64/System.Composition.Hosting.dll | Bin 54376 -> 0 bytes .../linux-x64/System.Composition.Runtime.dll | Bin 24680 -> 0 bytes .../System.Composition.TypedParts.dll | Bin 61032 -> 0 bytes .../System.Diagnostics.DiagnosticSource.dll | Bin 192264 -> 0 bytes .../net8.0/linux-x64/System.Formats.Asn1.dll | Bin 96048 -> 0 bytes .../net8.0/linux-x64/System.IO.Pipelines.dll | Bin 77576 -> 0 bytes .../linux-x64/System.Text.Encodings.Web.dll | Bin 66360 -> 0 bytes .../net8.0/linux-x64/System.Text.Json.dll | Bin 677128 -> 0 bytes .../Debug/net8.0/linux-x64/appsettings.json | 20 - ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18048 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 395440 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 47744 -> 0 bytes .../cs/Microsoft.CodeAnalysis.resources.dll | Bin 45744 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18560 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 425632 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 49784 -> 0 bytes .../de/Microsoft.CodeAnalysis.resources.dll | Bin 47280 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18080 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 415904 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 49272 -> 0 bytes .../es/Microsoft.CodeAnalysis.resources.dll | Bin 47280 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18080 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 425648 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 50320 -> 0 bytes .../fr/Microsoft.CodeAnalysis.resources.dll | Bin 47792 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18040 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 422576 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 49792 -> 0 bytes .../it/Microsoft.CodeAnalysis.resources.dll | Bin 47792 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18592 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 465056 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 52856 -> 0 bytes .../ja/Microsoft.CodeAnalysis.resources.dll | Bin 50864 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18048 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 427696 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 49784 -> 0 bytes .../ko/Microsoft.CodeAnalysis.resources.dll | Bin 47776 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18096 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 428208 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 49808 -> 0 bytes .../pl/Microsoft.CodeAnalysis.resources.dll | Bin 47776 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18048 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 408736 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 49280 -> 0 bytes .../Microsoft.CodeAnalysis.resources.dll | Bin 46240 -> 0 bytes .../net8.0/linux-x64/realtime_autostart.json | 1 - ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 19072 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 562336 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 56976 -> 0 bytes .../ru/Microsoft.CodeAnalysis.resources.dll | Bin 57008 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18048 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 405664 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 48256 -> 0 bytes .../tr/Microsoft.CodeAnalysis.resources.dll | Bin 45728 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18096 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 360624 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 45696 -> 0 bytes .../Microsoft.CodeAnalysis.resources.dll | Bin 43184 -> 0 bytes ...deAnalysis.CSharp.Workspaces.resources.dll | Bin 18048 -> 0 bytes ...icrosoft.CodeAnalysis.CSharp.resources.dll | Bin 360608 -> 0 bytes ...soft.CodeAnalysis.Workspaces.resources.dll | Bin 45712 -> 0 bytes .../Microsoft.CodeAnalysis.resources.dll | Bin 43184 -> 0 bytes ...CoreApp,Version=v8.0.AssemblyAttributes.cs | 4 - .../linux-x64/ExperionCrawler.AssemblyInfo.cs | 22 - .../ExperionCrawler.AssemblyInfoInputs.cache | 1 - ....GeneratedMSBuildEditorConfig.editorconfig | 19 - .../ExperionCrawler.GlobalUsings.g.cs | 17 - ...Crawler.MvcApplicationPartsAssemblyInfo.cs | 16 - .../linux-x64/ExperionCrawler.assets.cache | Bin 46615 -> 0 bytes ...rionCrawler.csproj.AssemblyReference.cache | Bin 14220 -> 0 bytes .../ExperionCrawler.csproj.CopyComplete | 0 ...rionCrawler.csproj.CoreCompileInputs.cache | 1 - ...xperionCrawler.csproj.FileListAbsolute.txt | 127 - .../net8.0/linux-x64/ExperionCrawler.dll | Bin 245760 -> 0 bytes .../ExperionCrawler.genruntimeconfig.cache | 1 - .../net8.0/linux-x64/ExperionCrawler.pdb | Bin 64568 -> 0 bytes src/Web/obj/Debug/net8.0/linux-x64/apphost | Bin 72568 -> 0 bytes .../net8.0/linux-x64/ref/ExperionCrawler.dll | Bin 62464 -> 0 bytes .../linux-x64/refint/ExperionCrawler.dll | Bin 62464 -> 0 bytes .../linux-x64/staticwebassets.build.json | 77 - .../staticwebassets.development.json | 1 - .../linux-x64/staticwebassets.pack.json | 33 - ...Microsoft.AspNetCore.StaticWebAssets.props | 52 - .../msbuild.build.ExperionCrawler.props | 3 - ....buildMultiTargeting.ExperionCrawler.props | 3 - ...uild.buildTransitive.ExperionCrawler.props | 3 - .../ExperionCrawler.csproj.nuget.dgspec.json | 111 - .../obj/ExperionCrawler.csproj.nuget.g.props | 25 - .../ExperionCrawler.csproj.nuget.g.targets | 9 - src/Web/obj/project.assets.json | 4393 ----------------- src/Web/obj/project.nuget.cache | 67 - src/Web/realtime_autostart.json | 1 - src/Web/wwwroot/css/style.css | 348 +- src/Web/wwwroot/index.html | 259 +- src/Web/wwwroot/js/app.js | 461 +- test_tool_remote.py | 97 + todo.md | 8 +- 162 files changed, 2891 insertions(+), 6306 deletions(-) create mode 100644 .gitignore create mode 100644 .roo.md rename src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.MvcApplicationPartsAssemblyInfo.cache => autocomplete.py (100%) create mode 100644 plans/history-query-status-indicator.md create mode 100644 plans/text-to-sql-timescaledb-plan.md create mode 100644 src/Core/Application/DTOs/TextToSqlDtos.cs create mode 100644 src/Core/Application/Interfaces/ITextToSqlService.cs create mode 100644 src/Core/Application/Services/TextToSqlService.cs create mode 100644 src/Web/Controllers/TextToSqlController.cs delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/BitFaster.Caching.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/CsvHelper.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler delete mode 100644 src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler.deps.json delete mode 100644 src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler.dll delete mode 100644 src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler.pdb delete mode 100644 src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler.runtimeconfig.json delete mode 100644 src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler.staticwebassets.runtime.json delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Humanizer.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Bcl.AsyncInterfaces.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.CodeAnalysis.CSharp.Workspaces.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.CodeAnalysis.CSharp.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.CodeAnalysis.Workspaces.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.CodeAnalysis.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.EntityFrameworkCore.Abstractions.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.EntityFrameworkCore.Design.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.EntityFrameworkCore.Relational.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.EntityFrameworkCore.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.Caching.Memory.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.DependencyInjection.Abstractions.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.DependencyInjection.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.DependencyModel.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.Logging.Abstractions.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.Logging.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.Options.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.Extensions.Primitives.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Microsoft.OpenApi.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Mono.TextTemplating.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Newtonsoft.Json.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Npgsql.EntityFrameworkCore.PostgreSQL.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Npgsql.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Opc.Ua.Client.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Opc.Ua.Configuration.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Opc.Ua.Core.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Opc.Ua.Security.Certificates.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Opc.Ua.Server.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Opc.Ua.Types.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Swashbuckle.AspNetCore.Swagger.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Swashbuckle.AspNetCore.SwaggerGen.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/Swashbuckle.AspNetCore.SwaggerUI.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.CodeDom.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Collections.Immutable.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Composition.AttributedModel.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Composition.Convention.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Composition.Hosting.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Composition.Runtime.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Composition.TypedParts.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Diagnostics.DiagnosticSource.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Formats.Asn1.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.IO.Pipelines.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Text.Encodings.Web.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/System.Text.Json.dll delete mode 100644 src/Web/bin/Debug/net8.0/linux-x64/appsettings.json delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/cs/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/cs/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/de/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/de/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/de/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/es/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/es/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/es/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/fr/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/fr/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/it/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/it/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/it/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ja/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ja/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ko/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ko/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pl/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pl/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/pt-BR/Microsoft.CodeAnalysis.resources.dll delete mode 100644 src/Web/bin/Debug/net8.0/linux-x64/realtime_autostart.json delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ru/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/ru/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/tr/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/tr/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hans/Microsoft.CodeAnalysis.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll delete mode 100755 src/Web/bin/Debug/net8.0/linux-x64/zh-Hant/Microsoft.CodeAnalysis.resources.dll delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.AssemblyInfo.cs delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.AssemblyInfoInputs.cache delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.GeneratedMSBuildEditorConfig.editorconfig delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.GlobalUsings.g.cs delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.MvcApplicationPartsAssemblyInfo.cs delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.assets.cache delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.csproj.AssemblyReference.cache delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.csproj.CopyComplete delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.csproj.CoreCompileInputs.cache delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.csproj.FileListAbsolute.txt delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.dll delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.genruntimeconfig.cache delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.pdb delete mode 100755 src/Web/obj/Debug/net8.0/linux-x64/apphost delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/ref/ExperionCrawler.dll delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/refint/ExperionCrawler.dll delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/staticwebassets.build.json delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/staticwebassets.development.json delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/staticwebassets.pack.json delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/staticwebassets/msbuild.ExperionCrawler.Microsoft.AspNetCore.StaticWebAssets.props delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/staticwebassets/msbuild.build.ExperionCrawler.props delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/staticwebassets/msbuild.buildMultiTargeting.ExperionCrawler.props delete mode 100644 src/Web/obj/Debug/net8.0/linux-x64/staticwebassets/msbuild.buildTransitive.ExperionCrawler.props delete mode 100644 src/Web/obj/ExperionCrawler.csproj.nuget.dgspec.json delete mode 100644 src/Web/obj/ExperionCrawler.csproj.nuget.g.props delete mode 100644 src/Web/obj/ExperionCrawler.csproj.nuget.g.targets delete mode 100644 src/Web/obj/project.assets.json delete mode 100644 src/Web/obj/project.nuget.cache delete mode 100644 src/Web/realtime_autostart.json create mode 100644 test_tool_remote.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..68451bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Build outputs +bin/ +obj/ + +# IDE +.vs/ +.vscode/ +*.suo +*.user + +# Dependencies +node_modules/ + +# OS files +.DS_Store +Thumbs.db + +# Certificates (sensitive) +*.pfx +*.p12 + +# Data files +data/ + +# Temporary files +*.tmp +*.log diff --git a/.roo.md b/.roo.md new file mode 100644 index 0000000..1d73cda --- /dev/null +++ b/.roo.md @@ -0,0 +1,94 @@ +[CONTENT_MANAGEMENT_RULES] +1. 작업 시작 시 반드시 Todo List를 작성하세요. 각 항목은 독립 실행 가능해야 합니다. +2. 단일 응답에서 다음 중 하나라도 만족하면 작업을 중단하고 이관 신호를 생성하세요: + - 처리 파일 수 ≥ 5개 + - 코드 변경/생성 라인 수 ≥ 200줄 + - 논리적 모듈 단위 완료 +3. 이관 시 반드시 아래 형식으로 응답을 종료하세요: + [TASK_MIGRATION] + ✅ 완료: [목록] + 📦 현재 상태: [요약] + 🎯 다음 하위작업 지시문: [명확한 프롬프트] + [/TASK_MIGRATION] +4. 이관 신호 이후에는 추가 코딩/분석을 중단하고 사용자의 계속 지시를 기다리세요. +[/CONTENT_MANAGEMENT_RULES] + +# Roo 작업 시작 가이드 + +## 작업 시작 시 필수 절차 + +1. **`CLAUDE.md` 파일 반드시 읽기** + - 프로젝트 루트의 `CLAUDE.md` 파일을 먼저 읽어서 이전 작업 이력 확인 + - 완료된 작업, 현재 진행 중인 작업, 알려진 문제점 파악 + - 최근 작업 내용을 바탕으로 현재 작업과 충돌하지 않도록 주의 + +2. **todo 목록 생성** + - 복잡한 작업은 반드시 `update_todo_list` 도구로 todo 목록 생성 + - 각 단계별로 명확한 목표 설정 + +3. **파일 수정 시 주의** + - `apply_diff` 도구는 정확한 검색/교체 블록 사용 + - `read_file` 도구로 정확한 내용 확인 후 수정 + +## 데이터베이스 연결 정보 + +### docker container : iiot-timescaledb (주요 목적 DB) +- **Host**: localhost +- **Port**: 5432 +- **Database**: iiot_platform +- **Username**: postgres +- **Password**: postgres +- **용도**: TimescaleDB 확장, 시계열 데이터 저장, Text-to-SQL 기능 + +### Experion DB (데이터 소스) +- **Host**: localhost +- **Port**: 5432 +- **Database**: postgres +- **Username**: postgres +- **Password**: postgres +- **용도**: Experion HS R530 메타데이터 조회 + +## 프로젝트 개요 + +- **이름**: ExperionCrawler +- **기술 스택**: .NET 8 (C#), PostgreSQL, OPC UA +- **주요 기능**: + - Experion HS R530 DCS 시스템에서 실시간 데이터 크롤링 + - OPC UA Client로 Experion HS R530 연결 + - OPC UA Server로 외부 시스템 연결 지원 + - 데이터 PostgreSQL DB 저장 + - CSV 내보내기 기능 + - Text-to-SQL 기능 (TimescaleDB) + +## 디렉토리 구조 + +``` +src/ +├── Core/ +│ ├── Application/ (DTOs, Services, Interfaces) +│ └── Domain/ (Entities) +├── Infrastructure/ (Certificates, Csv, Database, OpcUa) +└── Web/ (Controllers, Program.cs, wwwroot) +``` + +## 작업 규칙 + +- 복잡한 작업은 항상 todo 목록 먼저 생성 +- 각 단계 시작 전 todo 목록 확인 +- 단계 완료 후 즉시 completed 표시 +- 코드 수정 전 반드시 `read_file`으로 현재 내용 확인 + +## 컨텍스트 관리 + +### 컨텍스트 캐시 최적화 +- 컨텍스트 캐시가 70%를 넘으면 작업중이던 정보를 새로운 하위작업에게 넘기고 시작 +- 정보의 질 저하를 방지하기 위해 컨텍스트 압축 수행 +- 단일 항목 작업 중에도 컨텍스트가 가득차면 하위작업으로 분할 + +### 작업 분할 원칙 +1. 모든 새로운 작업을 시작하기 전 todo list 생성 (`update_todo_list` 도구 사용) +2. 단일 항목 작업 중 컨텍스트 캐시 70% 초과 시: + - 현재 작업 상태를 하위작업에게 명확히 전달 + - 하위작업에서 이어받아 작업 진행 + - 완료 후 상위 작업에 결과 보고 +3. 하위작업은 `new_task` 도구로 생성하고 mode은 현재 모드 유지 또는 적절히 선택 diff --git a/src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.MvcApplicationPartsAssemblyInfo.cache b/autocomplete.py similarity index 100% rename from src/Web/obj/Debug/net8.0/linux-x64/ExperionCrawler.MvcApplicationPartsAssemblyInfo.cache rename to autocomplete.py diff --git a/plans/history-query-status-indicator.md b/plans/history-query-status-indicator.md new file mode 100644 index 0000000..b6e70d9 --- /dev/null +++ b/plans/history-query-status-indicator.md @@ -0,0 +1,52 @@ +# 이력 조회 상태 표시기 구현 + +## 개요 +이력 조회 페이지의 '▼ 옵션 불러오기' 버튼 오른쪽에 상태 표시기를 추가하여, 태그 목록 조회 상태를 시각적으로 표시합니다. + +## 구현 내용 + +### 1. HTML 구조 ([`index.html`](src/Web/wwwroot/index.html:503)) +```html +
+
+ 태그 선택 (최대 8개, OR 조건) + + 대기 중 +
+
+ +
+
+``` + +### 2. CSS 스타일 ([`style.css`](src/Web/wwwroot/css/style.css:815)) +- `.hist-status`: 상태 표시기 컨테이너 +- `.hist-status.loading`: 조회 중 (파란색) +- `.hist-status.success`: 조회 완료 (초록색) +- `.hist-status.error`: 조회 실패 (빨간색) +- 성능 최적화: `contain: layout style`, `transform: translateZ(0)` + +### 3. JavaScript 로직 ([`app.js`](src/Web/wwwroot/js/app.js:688)) +- `histUpdateStatus(state, message)`: 상태 표시기 업데이트 +- `histLoad()`: 태그 목록 조회 및 상태 업데이트 + - 조회 시작: `⏳ 조회 중...` + - 조회 완료: `✅ 조회 완료 (개수, 초)` + - 데이터 없음: `❌ 조회 데이터 없음 (0개)` + - 오류: `❌ 조회 실패: 메시지` + +## 수정된 문제들 +1. 초기 상태 "준비됨" → "대기 중"으로 변경 +2. 레이아웃 구조 개선 (flex 컨테이너 사용) +3. CSS 애니메이션 제거 및 성능 최적화 +4. `requestAnimationFrame`으로 DOM 업데이트 지연 + +## 남은 문제 (추가 작업 필요) +- 태그 선택 시 페이지 hang 현상 원인 파악 필요 + - `pb-name-grid`의 CSS grid 레이아웃과 select 요소 8개의 상호작용 + - 브라우저 호환성 문제 가능성 + - 메모리 누락 가능성 + +## 테스트 방법 +1. 이력 조회 탭 진입 → "대기 중" 표시 확인 +2. '▼ 옵션 불러오기' 클릭 → 상태 변화 확인 +3. 태그 선택 시 페이지 반응성 확인 diff --git a/plans/text-to-sql-timescaledb-plan.md b/plans/text-to-sql-timescaledb-plan.md new file mode 100644 index 0000000..9e74f38 --- /dev/null +++ b/plans/text-to-sql-timescaledb-plan.md @@ -0,0 +1,416 @@ +# Text-to-SQL (PostgreSQL + TimeScaleDB) 추가 계획 + +## 1. 개요 + +ExperionCrawler 프로젝트에 **TimeScaleDB 하이퍼테이블**을 적용하여 시계열 데이터(`realtime_table`, `history_table`)의 성능과 확장성을 대폭 개선합니다. 또한 **Text-to-SQL 기능**을 추가하여 API를 통해 자연어/쿼리 입력으로 시계열 데이터를 조회·분석할 수 있도록 합니다. + +--- + +## 2. 현재 아키텍처 분석 + +```mermaid +graph TB + subgraph WebLayer + Controller[Controllers] + Program[Program.cs] + end + + subgraph Infrastructure + DbContext[ExperionDbContext] + DbService[ExperionDbService] + end + + subgraph Core + CrawlService[ExperionCrawlService] + RealtimeSvc[ExperionRealtimeService] + HistorySvc[ExperionHistoryService] + end + + subgraph Data + PostgreSQL[(PostgreSQL)] + CSV[CSV Files] + end + + Controller --> DbContext + Controller --> DbService + DbContext --> PostgreSQL + RealtimeSvc --> DbService + HistorySvc --> DbService + DbService --> CSV +``` + +### 현재 사용 테이블 +| 테이블명 | 용도 | 현재 방식 | +|----------|------|-----------| +| `realtime_table` | 실시간 모니터링 포인트 | 일반 PostgreSQL 테이블 | +| `history_table` | 시계열 이력 스냅샷 | 일반 PostgreSQL 테이블 | +| `raw_node_map` | OPC UA 노드맵 원시 데이터 | 일반 PostgreSQL 테이블 | +| `node_map_master` | 빌드된 노드맵 | 일반 PostgreSQL 테이블 | +| `experion_records` | 크롤링 기록 | EF Core DbSet | + +--- + +## 3. 목표 아키텍처 + +```mermaid +graph TB + subgraph WebLayer + Controller[Controllers] + TextToSql[Text-to-SQL Service] + Program[Program.cs] + end + + subgraph Infrastructure + DbContext[ExperionDbContext] + DbService[ExperionDbService] + TimeSeriesSvc[TimeSeries Service] + end + + subgraph Core + CrawlService[ExperionCrawlService] + RealtimeSvc[ExperionRealtimeService] + HistorySvc[ExperionHistoryService] + end + + subgraph Data + TimeScaleDB[(TimeScaleDB
HyperTables)] + CSV[CSV Files] + end + + Controller --> TextToSql + TextToSql --> DbService + Controller --> DbContext + Controller --> DbService + DbContext --> TimeScaleDB + RealtimeSvc --> TimeSeriesSvc + HistorySvc --> TimeSeriesSvc + TimeSeriesSvc --> DbService + DbService --> CSV +``` + +--- + +## 4. 구현 단계별 계획 + +### 단계 1: TimeScaleDB 패키지 추가 및 초기화 + +**목표**: TimeScaleDB 확장 활성화 및 하이퍼테이블 생성 + +#### 4.1.1 NuGet 패키지 추가 +- `Npgsql.EntityFrameworkCore.PostgreSQL` (이미 존재) +- `Npgsql.TimeScaleDB` (새로 추가) + +#### 4.1.2 데이터베이스 초기화 수정 +- [`ExperionDbContext`](src/Infrastructure/Database/ExperionDbContext.cs:1)에 TimeScaleDB 확장 활성화 코드 추가 +- `history_table` → `history_hypertable` (하이퍼테이블)로 마이그레이션 +- `realtime_table` → `realtime_hypertable` (하이퍼테이블)로 마이그레이션 + +#### 4.1.3 마이그레이션 스크립트 +```sql +-- TimeScaleDB 확장 활성화 +CREATE EXTENSION IF NOT EXISTS timescaledb; + +-- 기존 history_table 데이터를 백업 +CREATE TABLE history_table_backup AS SELECT * FROM history_table; + +-- 기존 테이블 삭제 후 하이퍼테이블 생성 +DROP TABLE history_table; +SELECT create_hypertable('history_hypertable', 'recorded_at', + chunk_time_interval => INTERVAL '1 day', + create_default_indexes => true); + +-- 데이터 복원 +INSERT INTO history_hypertable (id, tagname, node_id, value, recorded_at) + SELECT id, tagname, node_id, value, recorded_at FROM history_table_backup; +DROP TABLE history_table_backup; +``` + +--- + +### 단계 2: Text-to-SQL 서비스 구현 + +**목표**: 자연어/쿼리 입력으로 시계열 데이터를 조회하는 서비스 계층 구현 + +#### 4.2.1 인터페이스 정의 (`ITextToSqlService`) +``` +namespace ExperionCrawler.Core.Application.Interfaces; + +public interface ITextToSqlService +{ + /// 자연어 질의를 SQL로 변환 + Task ParseNaturalLanguageAsync(string input); + + /// SQL 쿼리 실행 및 결과 반환 + Task ExecuteQueryAsync(string sql); + + /// 쿼리 제안 (자동 완성) + Task> SuggestQueriesAsync(string partialInput); + + /// 시계열 분석 (평균, 최대, 최소, 추세) + Task AnalyzeAsync(string tagName, DateTime? from, DateTime? to); +} +``` + +#### 4.2.2 구현체 (`TextToSqlService`) +- **자연어 파싱**: 키워드 기반 파서 (tag name, 시간 범위, 집계 함수) +- **SQL 생성**: TimeScaleDB 함수 (`time_bucket`, `avg`, `max`, `min`, `last`) 활용 +- **결과 매핑**: 동적 SQL → DTO 매핑 + +#### 4.2.3 자연어 파싱 예시 +| 입력 | 생성된 SQL | +|------|-----------| +| "PV001 온도 최근 1시간 평균" | `SELECT time_bucket('5 min', recorded_at) AS bucket, AVG(value::float) FROM history_hypertable WHERE tagname = 'PV001' AND recorded_at > NOW() - INTERVAL '1 hour' GROUP BY bucket ORDER BY bucket` | +| "전체 태그 현재 값" | `SELECT DISTINCT ON (tagname) tagname, livevalue, timestamp FROM realtime_hypertable ORDER BY tagname, timestamp DESC` | +| "PV001, PV002 최근 24시간 최대값" | `SELECT time_bucket('1 hour', recorded_at) AS bucket, tagname, MAX(value::float) FROM history_hypertable WHERE tagname IN ('PV001', 'PV002') AND recorded_at > NOW() - INTERVAL '24 hour' GROUP BY bucket, tagname ORDER BY bucket, tagname` | + +--- + +### 단계 3: API 엔드포인트 추가 + +**목표**: Text-to-SQL 기능을 REST API로 노출 + +#### 4.3.1 컨트롤러 (`TextToSqlController`) +``` +[ApiController] +[Route("api/text-to-sql")] +public class TextToSqlController : ControllerBase +{ + private readonly ITextToSqlService _service; + + [HttpPost("parse")] + public Task Parse([FromBody] NaturalLanguageQueryDto dto); + + [HttpPost("execute")] + public Task Execute([FromBody] SqlQueryDto dto); + + [HttpGet("suggest")] + public Task Suggest([FromQuery] string input); + + [HttpPost("analyze")] + public Task Analyze([FromBody] AnalysisRequestDto dto); +} +``` + +#### 4.3.2 DTO 정의 +``` +public class NaturalLanguageQueryDto +{ + public string Query { get; set; } = string.Empty; + public string Language { get; set; } = "ko"; // "ko" or "en" +} + +public class SqlQueryDto +{ + public string Sql { get; set; } = string.Empty; + public int? Limit { get; set; } = 1000; +} + +public class AnalysisRequestDto +{ + public List TagNames { get; set; } = new(); + public DateTime? From { get; set; } + public DateTime? To { get; set; } + public string Interval { get; set; } = "5 min"; // time_bucket interval +} +``` + +--- + +### 단계 4: TimeSeries 서비스 개선 + +**목표**: TimeScaleDB 특화 함수 활용하여 성능 최적화 + +#### 4.4.1 기존 `ExperionDbService` 수정 +- `history_table` → `history_hypertable` 참조로 변경 +- `realtime_table` → `realtime_hypertable` 참조로 변경 +- TimeScaleDB 함수 (`time_bucket`, `continuous aggregates`) 활용 + +#### 4.4.2 연속 집계 (Continuous Aggregates) 생성 +```sql +-- 5분 단위 집계 뷰 생성 +CREATE MATERIALIZED VIEW history_5min_agg +WITH (timescaledb.continuous) AS +SELECT + time_bucket('5 min', recorded_at) AS bucket, + tagname, + AVG(value::float) AS avg_value, + MIN(value::float) AS min_value, + MAX(value::float) AS max_value, + FIRST(value::float, recorded_at) AS open_value, + LAST(value::float, recorded_at) AS close_value, + COUNT(*) AS point_count +FROM history_hypertable +GROUP BY bucket, tagname; + +-- 기존 데이터 리프레시 +REFRESH MATERIALIZED VIEW history_5min_agg; +``` + +--- + +### 단계 5: Program.cs 설정 업데이트 + +**목표**: 서비스 등록 및 초기화 플로우 수정 + +#### 4.5.1 서비스 등록 +```csharp +// Text-to-SQL 서비스 +builder.Services.AddScoped(); + +// TimeSeries 서비스 +builder.Services.AddScoped(); +``` + +#### 4.5.2 연결 문자열 확인 +```json +{ + "ConnectionStrings": { + "DefaultConnection": "Host=localhost;Port=5432;Database=experion_crawler;Username=postgres;Password=postgres" + } +} +``` + +--- + +## 5. 파일 구조 변경 + +``` +src/ +├── Core/ +│ ├── Application/ +│ │ ├── DTOs/ +│ │ │ ├── ExperionDtos.cs (수정: Text-to-SQL DTO 추가) +│ │ │ └── TextToSqlDtos.cs (신규) +│ │ ├── Interfaces/ +│ │ │ ├── IExperionServices.cs (수정: ITextToSqlService, ITimeSeriesService 추가) +│ │ │ └── ITextToSqlService.cs (신규) +│ │ └── Services/ +│ │ ├── ExperionCrawlService.cs (변경 없음) +│ │ └── TextToSqlService.cs (신규) +│ └── Domain/ +│ └── Entities/ +│ ├── ExperionEntities.cs (수정: TimeScaleDB 엔티티 추가) +│ └── TimeSeriesEntities.cs (신규) +├── Infrastructure/ +│ ├── Database/ +│ │ ├── ExperionDbContext.cs (수정: 하이퍼테이블 설정) +│ │ ├── TimeSeriesService.cs (신규) +│ │ └── Migrations/ (신규: TimeScaleDB 마이그레이션) +│ └── ... (기존 파일 유지) +└── Web/ + ├── Controllers/ + │ ├── ExperionControllers.cs (수정: Text-to-SQL 엔드포인트 추가) + │ └── TextToSqlController.cs (신규) + ├── appsettings.json (수정: 연결 문자열) + └── ExperionCrawler.csproj (수정: NuGet 패키지 추가) +``` + +--- + +## 6. TimeScaleDB 특화 기능 + +### 6.1 체킹 간격 설정 +| 테이블 | chunk_time_interval | 설명 | +|--------|-------------------|------| +| `history_hypertable` | 1일 | 이력 데이터는 1일 단위 청크 | +| `realtime_hypertable` | 1시간 | 실시간 데이터는 1시간 단위 청크 | + +### 6.2 데이터 보존 정책 +```sql +-- 90일 이전 데이터 자동 삭제 +SELECT add_drop_chunks_policy('history_hypertable', INTERVAL '90 days'); +``` + +### 6.3 압축 설정 +```sql +-- 1일 이전 데이터 자동 압축 +SELECT add_compression_policy('history_hypertable', INTERVAL '1 day'); +``` + +--- + +## 7. NuGet 패키지 변경 + +### 추가 패키지 +| 패키지 | 버전 | 용도 | +|--------|------|------| +| `Npgsql.TimeScaleDB` | 최신 | TimeScaleDB 전용 확장 | + +### 기존 패키지 (변경 없음) +| 패키지 | 현재 버전 | +|--------|----------| +| `Npgsql.EntityFrameworkCore.PostgreSQL` | 8.0.11 | +| `Microsoft.EntityFrameworkCore.Design` | 8.0.13 | + +--- + +## 8. 구현 체크리스트 + +- [ ] **단계 1**: TimeScaleDB 패키지 추가 및 초기화 + - [ ] `Npgsql.TimeScaleDB` NuGet 패키지 추가 + - [ ] `ExperionDbContext`에 TimeScaleDB 확장 코드 추가 + - [ ] `history_table` → `history_hypertable` 마이그레이션 + - [ ] `realtime_table` → `realtime_hypertable` 마이그레이션 + +- [ ] **단계 2**: Text-to-SQL 서비스 구현 + - [ ] `ITextToSqlService` 인터페이스 정의 + - [ ] `TextToSqlService` 구현체 작성 + - [ ] 자연어 파서 (한국어/영어 지원) + - [ ] SQL 생성 로직 (TimeScaleDB 함수 활용) + - [ ] 시계열 분석 기능 (평균, 최대, 최소, 추세) + +- [ ] **단계 3**: API 엔드포인트 추가 + - [ ] `TextToSqlController` 생성 + - [ ] `/api/text-to-sql/parse` 엔드포인트 + - [ ] `/api/text-to-sql/execute` 엔드포인트 + - [ ] `/api/text-to-sql/suggest` 엔드포인트 + - [ ] `/api/text-to-sql/analyze` 엔드포인트 + - [ ] DTO 정의 + +- [ ] **단계 4**: TimeSeries 서비스 개선 + - [ ] `ExperionDbService` 수정 (하이퍼테이블 참조) + - [ ] 연속 집계 (Continuous Aggregates) 생성 + - [ ] TimeScaleDB 함수 활용 쿼리 최적화 + +- [ ] **단계 5**: Program.cs 설정 업데이트 + - [ ] 서비스 등록 + - [ ] 연결 문자열 확인 + - [ ] 초기화 플로우 수정 + +- [ ] **단계 6**: 테스트 및 문서화 + - [ ] API 테스트 (Swagger) + - [ ] 자연어 파싱 테스트 + - [ ] TimeScaleDB 성능 벤치마크 + - [ ] README.md 업데이트 + +--- + +## 9. 예상 효과 + +| 항목 | 기존 | 개선 후 | +|------|------|--------| +| 시계열 데이터 삽입 속도 | 일반 테이블 | TimeScaleDB 청킹으로 10x 이상 향상 | +| 시간 범위 쿼리 | 전체 테이블 스캔 | 청크 제거로 빠른 응답 | +| 데이터 압축 | 없음 | 자동 압축 (5-10x 저장공간 절약) | +| 자동 보존 | 수동 삭제 | 정책 기반 자동 삭제 | +| Text-to-SQL | 없음 | 자연어 기반 시계열 쿼리 | + +--- + +## 10. 주의사항 + +1. **TimeScaleDB 설치 prerequisite**: 대상 서버에 TimeScaleDB가 설치되어 있어야 함 + ```bash + # Ubuntu/Debian + sudo apt-get install timescaledb-postgresql-16 + ``` + +2. **기존 데이터 마이그레이션**: `history_table`과 `realtime_table`의 기존 데이터를 새 하이퍼테이블로 이동해야 함 + +3. **연결 문자열**: `Trust Server Certificate=true`는 TimeScaleDB에서 필요하지 않을 수 있음 + +4. **EF Core 제한**: EF Core는 TimeScaleDB 하이퍼테이블을 직접 지원하지 않음 + - Raw SQL 쿼리 활용 필요 + - `ExecuteSqlRawAsync`, `FromSqlRaw` 사용 + +5. **백호환성**: 기존 API 엔드포인트는 변경되지 않도록 유지 diff --git a/src/Core/Application/DTOs/ExperionDtos.cs b/src/Core/Application/DTOs/ExperionDtos.cs index 5998ce2..9225398 100644 --- a/src/Core/Application/DTOs/ExperionDtos.cs +++ b/src/Core/Application/DTOs/ExperionDtos.cs @@ -59,3 +59,29 @@ public class PointBuilderAddDto { public string NodeId { get; set; } = string.Empty; } + +// ── TimeScaleDB 하이퍼테이블 ──────────────────────────────────────────────────── + +public class HypertableStatusDto +{ + public bool IsHypertable { get; set; } + public string? TableName { get; set; } + public string? StatusMessage { get; set; } + public int RecordCount { get; set; } + public bool HasRetentionPolicy { get; set; } + public bool HasCompression { get; set; } + public bool HasContinuousAggregate { get; set; } +} + +public class HypertableCreateDto +{ + public string TableName { get; set; } = "history_table"; + public string TimeColumn { get; set; } = "recorded_at"; + public string TimeInterval { get; set; } = "1 day"; + public bool MigrateData { get; set; } = true; + public bool SetRetentionPolicy { get; set; } = true; + public string RetentionPeriod { get; set; } = "90 days"; + public bool EnableCompression { get; set; } = true; + public string CompressionPeriod { get; set; } = "1 day"; + public bool CreateContinuousAggregate { get; set; } = true; +} diff --git a/src/Core/Application/DTOs/TextToSqlDtos.cs b/src/Core/Application/DTOs/TextToSqlDtos.cs new file mode 100644 index 0000000..4f00662 --- /dev/null +++ b/src/Core/Application/DTOs/TextToSqlDtos.cs @@ -0,0 +1,51 @@ +namespace ExperionCrawler.Core.Application.DTOs; + +// ── Text-to-SQL DTOs ───────────────────────────────────────────────────────── + +public class NaturalLanguageQueryDto +{ + public string Query { get; set; } = string.Empty; +} + +public class SqlQueryDto +{ + public string Sql { get; set; } = string.Empty; + public int? Limit { get; set; } = 1000; +} + +public class AnalyzeRequestDto +{ + public List TagNames { get; set; } = new(); + public DateTime? From { get; set; } + public DateTime? To { get; set; } + public string Interval { get; set; } = "5 min"; // time_bucket interval +} + +public class SqlQueryResultDto +{ + public bool Success { get; set; } + public string? Error { get; set; } + public List Columns { get; set; } = new(); + public List> Rows { get; set; } = new(); + public int TotalCount { get; set; } +} + +public class TimeSeriesAnalysisDto +{ + public bool Success { get; set; } + public string? Error { get; set; } + public List Tags { get; set; } = new(); +} + +public class AnalysisTagResult +{ + public string TagName { get; set; } = string.Empty; + public double? Avg { get; set; } + public double? Min { get; set; } + public double? Max { get; set; } + public double? First { get; set; } + public double? Last { get; set; } + public long PointCount { get; set; } + public DateTime? From { get; set; } + public DateTime? To { get; set; } +} diff --git a/src/Core/Application/Interfaces/IExperionServices.cs b/src/Core/Application/Interfaces/IExperionServices.cs index c2d9e43..2959609 100644 --- a/src/Core/Application/Interfaces/IExperionServices.cs +++ b/src/Core/Application/Interfaces/IExperionServices.cs @@ -1,4 +1,6 @@ +using ExperionCrawler.Core.Application.DTOs; using ExperionCrawler.Core.Domain.Entities; +using ExperionCrawler.Infrastructure.Database; using System.Collections.Generic; namespace ExperionCrawler.Core.Application.Interfaces; @@ -44,6 +46,11 @@ public interface IExperionCsvService public interface IExperionDbService { Task InitializeAsync(); + + // ── TimeScaleDB 하이퍼테이블 ────────────────────────────────────────────────── + Task GetHypertableStatusAsync(); + Task CreateHypertableAsync(HypertableCreateRequest request); + Task SaveRecordsAsync(IEnumerable records); Task ClearRecordsAsync(); Task BuildMasterFromRawAsync(bool truncate = false); diff --git a/src/Core/Application/Interfaces/ITextToSqlService.cs b/src/Core/Application/Interfaces/ITextToSqlService.cs new file mode 100644 index 0000000..8c0f3cc --- /dev/null +++ b/src/Core/Application/Interfaces/ITextToSqlService.cs @@ -0,0 +1,19 @@ +using ExperionCrawler.Core.Application.DTOs; + +namespace ExperionCrawler.Core.Application.Interfaces; + +/// Text-to-SQL 시계열 쿼리 서비스 +public interface ITextToSqlService +{ + /// 자연어 질의를 SQL로 변환 + Task ParseNaturalLanguageAsync(string input); + + /// SQL 쿼리 실행 및 결과 반환 + Task ExecuteQueryAsync(string sql, int? limit = 1000); + + /// 쿼리 제안 (자동 완성) + Task> SuggestQueriesAsync(string partialInput); + + /// 시계열 분석 (평균, 최대, 최소, 추세) + Task AnalyzeAsync(AnalyzeRequestDto dto); +} diff --git a/src/Core/Application/Services/TextToSqlService.cs b/src/Core/Application/Services/TextToSqlService.cs new file mode 100644 index 0000000..4cec3f9 --- /dev/null +++ b/src/Core/Application/Services/TextToSqlService.cs @@ -0,0 +1,394 @@ +using ExperionCrawler.Core.Application.DTOs; +using ExperionCrawler.Core.Application.Interfaces; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; +using Npgsql; + +namespace ExperionCrawler.Core.Application.Services; + +/// +/// Text-to-SQL 시계열 쿼리 서비스 +/// 자연어 질의를 파싱하여 iiot-timescaledb(IIoT 플랫폼) SQL 쿼리를 생성하고 실행합니다. +/// measurements (TimeScaleDB 하이퍼테이블) + opc_nodes 테이블을 참조합니다. +/// +public class TextToSqlService : ITextToSqlService +{ + private readonly ILogger _logger; + private readonly IConfiguration _configuration; + private readonly string _connectionString; + + public TextToSqlService(ILogger logger, IConfiguration configuration) + { + _logger = logger; + _configuration = configuration; + _connectionString = configuration.GetConnectionString("DefaultConnection") + ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found."); + } + + // ── 테이블명 설정 (iiot-timescaledb 매핑) ───────────────────────────────── + // iiot-timescaledb: measurements (node_id, time, value, quality) + // ExperionCrawler: history_hypertable (tagname, recorded_at, value) + private string HistoryTable => "measurements"; + private string NodesTable => "opc_nodes"; + + // ── 자연어 파싱 ───────────────────────────────────────────────────────────── + + public Task ParseNaturalLanguageAsync(string input) + { + if (string.IsNullOrWhiteSpace(input)) + throw new ArgumentException("쿼리 입력이 필요합니다.", nameof(input)); + + var sql = BuildSqlFromNaturalLanguage(input); + _logger.LogInformation("[TextToSql] 자연어 파싱: \"{Input}\" → {Sql}", input, sql); + return Task.FromResult(sql); + } + + /// + /// 자연어 입력에서 태그명, 시간 범위, 집계 함수를 추출하여 SQL 생성 + /// + private string BuildSqlFromNaturalLanguage(string input) + { + var lower = input.ToLower(); + + // 태그명 추출 (한글/영문 태그명 지원) + var tagName = ExtractTagName(input); + + // 시간 범위 추출 + var (fromClause, timeBucket) = ExtractTimeRange(lower); + + // 집계 함수 추출 + var aggregate = ExtractAggregate(lower); + + // measurements (iiot-timescaledb 하이퍼테이블) 조회 SQL 생성 + // 컬럼: node_id (TEXT), time (TIMESTAMPTZ), value (DOUBLE PRECISION) + if (!string.IsNullOrEmpty(tagName)) + { + // SQL 인젝션 방지를 위해 태그명 이스케이프 + var escapedTagName = tagName.Replace("'", "''"); + var whereTag = $"WHERE node_id = '{escapedTagName}'"; + if (!string.IsNullOrEmpty(fromClause)) + whereTag += $" AND {fromClause}"; + + if (aggregate != "last" && aggregate != "first") + { + // 집계 쿼리 (value는 이미 double precision) + return $"SELECT time_bucket('{timeBucket}', time) AS bucket, " + + $"{aggregate}(value) AS result " + + $"FROM {HistoryTable} " + + $"{whereTag} " + + $"GROUP BY bucket ORDER BY bucket"; + } + else + { + // first/last 쿼리 (TimeScaleDB 함수) + var func = aggregate == "first" ? "first" : "last"; + return $"SELECT time_bucket('{timeBucket}', time) AS bucket, " + + $"{func}(value, time) AS result " + + $"FROM {HistoryTable} " + + $"{whereTag} " + + $"GROUP BY bucket ORDER BY bucket"; + } + } + + // 태그명 없이 전체 조회 + var whereAll = fromClause ?? "1=1"; + return $"SELECT time_bucket('{timeBucket}', time) AS bucket, " + + $"node_id, {aggregate}(value) AS result " + + $"FROM {HistoryTable} " + + $"WHERE {whereAll} " + + $"GROUP BY bucket, node_id ORDER BY bucket, node_id"; + } + + /// + /// 자연어에서 태그명/node_id 추출 + /// 예: "Reactor.Temperature 온도 최근 1시간 평균" → "Reactor.Temperature" + /// "ns=2;s=Reactor.Temperature 온도 최근 1시간 평균" → "ns=2;s=Reactor.Temperature" + /// + private string ExtractTagName(string input) + { + var lower = input.ToLower(); + + // 키워드 목록 (시간/집계 관련 단어) + var keywords = new[] + { + "최근", "last", "latest", + "평균", "average", "avg", "평균값", + "최대", "maximum", "max", "최댓값", + "최소", "minimum", "min", "최솟값", + "첫번째", "first", "초기값", + "마지막", "last", "종료값", + "추세", "trend", + "데이터", "조회", "quer", "query", + "시간", "hour", "hr", + "분", "minute", "min", "m", + "초", "second", "sec", "s", + "일", "day", "d", + "주", "week", "w", + "전체", "all", + "온도", "temperature", + "압력", "pressure", + "유량", "flow", "유량", "flow rate", + "수위", "level", "수위", + "rpm", "전류", "current" + }; + + foreach (var kw in keywords) + { + var idx = lower.IndexOf(kw); + if (idx > 0) + { + var candidate = input.Substring(0, idx).Trim(); + // OPC UA node_id 형식(ns=...;s=...) 또는 일반 태그명 반환 + return candidate; + } + } + + // OPC UA node_id 형식 확인 (ns=X;s=...) + var nsMatch = System.Text.RegularExpressions.Regex.Match(input, @"ns=\d+;s=[^ ]+"); + if (nsMatch.Success) + return nsMatch.Value; + + // 키워드가 없으면 첫 단어(공백 이전)를 태그명으로 간주 + var firstSpace = input.IndexOf(' '); + if (firstSpace > 0) + return input.Substring(0, firstSpace).Trim(); + + return input.Trim(); + } + + /// + /// 자연어에서 시간 범위 추출 + /// + private (string? whereClause, string timeBucket) ExtractTimeRange(string lower) + { + // 시간 단위 매핑 (measurements 테이블의 time 컬럼 사용) + var timePatterns = new (string pattern, string interval, string bucket)[] + { + ("최근 1시간", "1 hour", "5 min"), + ("최근 2시간", "2 hours", "5 min"), + ("최근 3시간", "3 hours", "10 min"), + ("최근 6시간", "6 hours", "10 min"), + ("최근 12시간", "12 hours", "30 min"), + ("최근 24시간", "24 hours", "1 hour"), + ("최근 하루", "24 hours", "1 hour"), + ("최근 1일", "1 day", "1 hour"), + ("최근 3일", "3 days", "6 hours"), + ("최근 7일", "7 days", "12 hours"), + ("최근 1주", "7 days", "12 hours"), + ("최근 1개월", "30 days", "1 day"), + ("최근 한달", "30 days", "1 day"), + ("오늘", "1 day", "1 hour"), + ("어제", "1 day", "1 hour"), + ("최근 5분", "5 minutes", "1 min"), + ("최근 10분", "10 minutes", "1 min"), + ("최근 30분", "30 minutes", "1 min"), + }; + + foreach (var (pattern, interval, bucket) in timePatterns) + { + if (lower.Contains(pattern)) + { + return ($"time > NOW() - INTERVAL '{interval}'", bucket); + } + } + + // "from ~ to" 패턴 (ISO 8601 형식 또는 한국어) + var fromMatch = System.Text.RegularExpressions.Regex.Match(lower, @"from\s+(\d{4}-\d{2}-\d{2})"); + var toMatch = System.Text.RegularExpressions.Regex.Match(lower, @"to\s+(\d{4}-\d{2}-\d{2})"); + if (fromMatch.Success) + { + var from = fromMatch.Groups[1].Value; + var to = toMatch.Success ? toMatch.Groups[1].Value : DateTime.Now.ToString("yyyy-MM-dd"); + return ($"time >= '{from} 00:00:00' AND time <= '{to} 23:59:59'", "1 hour"); + } + + return (null, "5 min"); + } + + /// + /// 자연어에서 집계 함수 추출 + /// + private string ExtractAggregate(string lower) + { + if (lower.Contains("최대") || lower.Contains("max") || lower.Contains("최댓값")) + return "max"; + if (lower.Contains("최소") || lower.Contains("min") || lower.Contains("최솟값")) + return "min"; + if (lower.Contains("첫") || lower.Contains("first") || lower.Contains("초기")) + return "first"; + if (lower.Contains("마지막") || lower.Contains("last") || lower.Contains("종료")) + return "last"; + // 기본값: 평균 + return "avg"; + } + + // ── SQL 실행 ──────────────────────────────────────────────────────────────── + + public async Task ExecuteQueryAsync(string sql, int? limit = 1000) + { + try + { + using var conn = new NpgsqlConnection(_connectionString); + await conn.OpenAsync(); + + var fullSql = sql.TrimEnd(); + if (limit.HasValue && !fullSql.EndsWith(";", StringComparison.OrdinalIgnoreCase) + && !fullSql.EndsWith(" limit ", StringComparison.OrdinalIgnoreCase)) + { + fullSql += $" LIMIT {limit.Value}"; + } + + using var cmd = new NpgsqlCommand(fullSql, conn); + using var reader = await cmd.ExecuteReaderAsync(); + + var columns = new List(); + for (int i = 0; i < reader.FieldCount; i++) + { + columns.Add(reader.GetName(i)); + } + + var rows = new List>(); + while (await reader.ReadAsync()) + { + var row = new Dictionary(); + for (int i = 0; i < reader.FieldCount; i++) + { + row[reader.GetName(i)] = reader.IsDBNull(i) ? null : reader.GetValue(i); + } + rows.Add(row); + } + + _logger.LogInformation("[TextToSql] 쿼리 실행 성공: {RowCount}행", rows.Count); + return new SqlQueryResultDto + { + Success = true, + Columns = columns, + Rows = rows, + TotalCount = rows.Count + }; + } + catch (Exception ex) + { + _logger.LogError(ex, "[TextToSql] 쿼리 실행 실패: {Sql}", sql); + return new SqlQueryResultDto + { + Success = false, + Error = ex.Message + }; + } + } + + // ── 쿼리 제안 ─────────────────────────────────────────────────────────────── + + public Task> SuggestQueriesAsync(string partialInput) + { + var suggestions = new List + { + "최근 1시간 평균", + "최근 24시간 최대값", + "최근 7일 최소값", + "전체 태그 현재 값", + "오늘의 데이터 추세" + }; + + if (string.IsNullOrWhiteSpace(partialInput)) + return Task.FromResult>(suggestions); + + var lower = partialInput.ToLower(); + return Task.FromResult>(suggestions.Where(s => s.Contains(lower))); + } + + // ── 시계열 분석 ───────────────────────────────────────────────────────────── + + public async Task AnalyzeAsync(AnalyzeRequestDto dto) + { + var result = new TimeSeriesAnalysisDto(); + + try + { + using var conn = new NpgsqlConnection(_connectionString); + await conn.OpenAsync(); + + var tagNames = dto.TagNames.Count > 0 + ? dto.TagNames + : await GetAllTagNamesAsync(conn); + + var from = dto.From?.ToString("yyyy-MM-dd HH:mm:ss") ?? DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss"); + var to = dto.To?.ToString("yyyy-MM-dd HH:mm:ss") ?? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + var tagResults = new List(); + + foreach (var tagName in tagNames) + { + // SQL 인젝션 방지를 위해 태그명 이스케이프 + var escapedTagName = tagName.Replace("'", "''"); + + // measurements 테이블: node_id (TEXT), time (TIMESTAMPTZ), value (DOUBLE PRECISION) + var sql = $@" + SELECT + AVG(value) AS avg_val, + MIN(value) AS min_val, + MAX(value) AS max_val, + first(value, time) AS first_val, + last(value, time) AS last_val, + COUNT(*) AS point_count + FROM measurements + WHERE node_id = '{escapedTagName}' + AND time BETWEEN '{from}' AND '{to}'"; + + using var cmd = new NpgsqlCommand(sql, conn); + using var reader = await cmd.ExecuteReaderAsync(); + + if (await reader.ReadAsync()) + { + tagResults.Add(new AnalysisTagResult + { + TagName = tagName, + Avg = reader.IsDBNull(0) ? null : Convert.ToDouble(reader.GetValue(0)), + Min = reader.IsDBNull(1) ? null : Convert.ToDouble(reader.GetValue(1)), + Max = reader.IsDBNull(2) ? null : Convert.ToDouble(reader.GetValue(2)), + First = reader.IsDBNull(3) ? null : Convert.ToDouble(reader.GetValue(3)), + Last = reader.IsDBNull(4) ? null : Convert.ToDouble(reader.GetValue(4)), + PointCount = reader.IsDBNull(5) ? 0 : Convert.ToInt64(reader.GetValue(5)), + From = dto.From, + To = dto.To + }); + } + } + + result.Tags = tagResults; + result.Success = true; + _logger.LogInformation("[TextToSql] 분석 완료: {TagCount}개 태그", tagResults.Count); + } + catch (Exception ex) + { + _logger.LogError(ex, "[TextToSql] 분석 실패"); + result.Success = false; + result.Error = ex.Message; + } + + return result; + } + + private async Task> GetAllTagNamesAsync(NpgsqlConnection conn) + { + var tags = new List(); + try + { + // measurements 테이블에서 고유 node_id 목록 조회 + using var cmd = new NpgsqlCommand( + "SELECT DISTINCT node_id FROM measurements ORDER BY node_id", conn); + using var reader = await cmd.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + tags.Add(reader.GetString(0)); + } + } + catch + { + // fallback: empty list + } + return tags; + } +} diff --git a/src/Infrastructure/Certificates/ExperionCertificateService.cs b/src/Infrastructure/Certificates/ExperionCertificateService.cs index 1b628fa..71aa943 100644 --- a/src/Infrastructure/Certificates/ExperionCertificateService.cs +++ b/src/Infrastructure/Certificates/ExperionCertificateService.cs @@ -45,11 +45,20 @@ public class ExperionCertificateService : IExperionCertificateService } } - public async Task EnsureCertificateAsync( + public Task EnsureCertificateAsync( string applicationUri, string clientHostName, IEnumerable subjectAltNames, string pfxPassword = "") + { + return Task.Run(() => EnsureCertificateCore(applicationUri, clientHostName, subjectAltNames, pfxPassword)); + } + + private ExperionCertResult EnsureCertificateCore( + string applicationUri, + string clientHostName, + IEnumerable subjectAltNames, + string pfxPassword) { var path = PfxPath(clientHostName); diff --git a/src/Infrastructure/Csv/ExperionCsvService.cs b/src/Infrastructure/Csv/ExperionCsvService.cs index 7ee4a6f..de81865 100644 --- a/src/Infrastructure/Csv/ExperionCsvService.cs +++ b/src/Infrastructure/Csv/ExperionCsvService.cs @@ -36,9 +36,13 @@ public class ExperionCsvService : IExperionCsvService if (!File.Exists(filePath)) throw new FileNotFoundException($"CSV 파일을 찾을 수 없습니다: {filePath}"); - using var reader = new StreamReader(filePath); - using var csv = new CsvReader(reader, CultureInfo.InvariantCulture); - var records = csv.GetRecords().ToList(); + // I/O 작업이므로 Task.Run으로 백그라운드 스레드에서 실행 + var records = await Task.Run(() => + { + using var reader = new StreamReader(filePath); + using var csv = new CsvReader(reader, CultureInfo.InvariantCulture); + return csv.GetRecords().ToList(); + }); _logger.LogInformation("[ExperionCsv] 가져오기 완료: {Path} ({Count}건)", filePath, records.Count); return records; diff --git a/src/Infrastructure/Database/ExperionDbContext.cs b/src/Infrastructure/Database/ExperionDbContext.cs index 6355325..27914c5 100644 --- a/src/Infrastructure/Database/ExperionDbContext.cs +++ b/src/Infrastructure/Database/ExperionDbContext.cs @@ -2,6 +2,7 @@ using ExperionCrawler.Core.Application.Interfaces; using ExperionCrawler.Core.Domain.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using Npgsql; namespace ExperionCrawler.Infrastructure.Database; @@ -75,6 +76,9 @@ public class ExperionDbService : IExperionDbService { await _ctx.Database.EnsureCreatedAsync(); + // TimeScaleDB 확장 활성화 + await _ctx.Database.ExecuteSqlRawAsync("CREATE EXTENSION IF NOT EXISTS timescaledb"); + // EnsureCreatedAsync는 기존 DB에 새 테이블을 추가하지 않으므로 // raw_node_map / node_map_master 는 DDL로 직접 보장 await _ctx.Database.ExecuteSqlRawAsync(""" @@ -99,32 +103,25 @@ public class ExperionDbService : IExperionDbService ) """); + // realtime_table 생성 (실시간 모니터링 포인트) await _ctx.Database.ExecuteSqlRawAsync(""" CREATE TABLE IF NOT EXISTS realtime_table ( - id SERIAL PRIMARY KEY, - tagname TEXT NOT NULL, - node_id TEXT NOT NULL UNIQUE, - livevalue TEXT, - timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW() - ) - """); - - await _ctx.Database.ExecuteSqlRawAsync(""" - CREATE TABLE IF NOT EXISTS history_table ( id SERIAL PRIMARY KEY, tagname TEXT NOT NULL, node_id TEXT NOT NULL, - value TEXT, - recorded_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + livevalue TEXT, + timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW() ) """); - await _ctx.Database.ExecuteSqlRawAsync( - "CREATE INDEX IF NOT EXISTS idx_history_tagname ON history_table(tagname)"); - await _ctx.Database.ExecuteSqlRawAsync( - "CREATE INDEX IF NOT EXISTS idx_history_recorded_at ON history_table(recorded_at)"); + // realtime_table은 실시간 값 저장용이므로 하이퍼테이블로 변환하지 않음 - _logger.LogInformation("[ExperionDb] 데이터베이스 초기화 완료"); + // history 테이블은 수동으로 하이퍼테이블 생성 필요 + // CreateHypertableAsync() 메서드를 사용하여 수동 생성 가능 + // 참고: 하이퍼테이블 생성 후 보존 정책, 압축 정책, 연속 집계 설정은 + // CreateHypertableAsync() 메서드에서 선택적으로 설정 가능 + + _logger.LogInformation("[ExperionDb] 데이터베이스 초기화 완료 (TimeScaleDB 활성화)"); return true; } catch (Exception ex) @@ -134,6 +131,90 @@ public class ExperionDbService : IExperionDbService } } + /// + /// history 테이블을 TimeScaleDB 하이퍼테이블로 생성/마이그레이션 + /// + /// 생성할 하이퍼테이블 이름 (예: history_hypertable) + /// 기존 테이블 이름 (예: history_table, null이면 새 테이블 생성) + /// 시간 컬럼 이름 + /// 청크 간격 (예: '1 day') + /// 하이퍼테이블 생성 여부 (true: 생성됨/기존 있음, false: 실패/스킵) + private async Task CreateHistoryHypertableIfNotExistsAsync( + string hypertableName, string? tableName, string timeColumn, string interval) + { + try + { + // SQL injection 방지를 위해 식별자 검증 + if (!IsValidSqlIdentifier(hypertableName)) + { + _logger.LogWarning("[ExperionDb] 하이퍼테이블 이름 '{HypertableName}'이(가) 유효하지 않음", hypertableName); + return false; + } + + // 1️⃣ 하이퍼테이블이 이미 존재하면 스킵 + await using var conn = new NpgsqlConnection(_ctx.Database.GetConnectionString()); + await conn.OpenAsync(); + + await using var cmd1 = new NpgsqlCommand( + $"SELECT 1 FROM pg_catalog.pg_tables WHERE tablename = '{hypertableName.Replace("'", "''")}' LIMIT 1", conn); + var result = await cmd1.ExecuteScalarAsync(); + if (result != null) + { + _logger.LogInformation("[ExperionDb] 하이퍼테이블 '{HypertableName}' 이미 존재함", hypertableName); + return true; + } + + // 2️⃣ 기존 테이블 이름이 제공되면 검증 + if (tableName != null && !IsValidSqlIdentifier(tableName)) + { + _logger.LogWarning("[ExperionDb] 테이블 이름 '{TableName}'이(가) 유효하지 않음", tableName); + return false; + } + + // 3️⃣ 기존 테이블이 존재하면 → 하이퍼테이블로 마이그레이션 + if (tableName != null) + { + await using var cmd2 = new NpgsqlCommand( + $"SELECT 1 FROM pg_catalog.pg_tables WHERE tablename = '{tableName.Replace("'", "''")}' LIMIT 1", conn); + result = await cmd2.ExecuteScalarAsync(); + if (result != null) + { + // 데이터가 있는 경우 migrate_data => true 옵션 필요 +#pragma warning disable EF1002 // Method 'ExecuteSqlRawAsync' inserts interpolated strings directly into the SQL + await _ctx.Database.ExecuteSqlRawAsync( + $"SELECT create_hypertable('{tableName}', '{timeColumn}', chunk_time_interval => INTERVAL '{interval}', create_default_indexes => true, migrate_data => true)"); + _logger.LogInformation("[ExperionDb] 테이블 '{TableName}'을(를) 하이퍼테이블로 변환 완료", tableName); + return true; + } + } + + // 4️⃣ 기존 테이블이 없으면 → 새 하이퍼테이블 테이블 생성 + // TimeScaleDB 요구사항: 고유 인덱스를 위해서는 partitioning 컬럼이 primary key에 포함되어야 함 +#pragma warning disable EF1002 // Method 'ExecuteSqlRawAsync' inserts interpolated strings directly into the SQL + await _ctx.Database.ExecuteSqlRawAsync($""" + CREATE TABLE IF NOT EXISTS {hypertableName} ( + id SERIAL, + tagname TEXT NOT NULL, + node_id TEXT, + value TEXT, + livevalue TEXT, + {timeColumn} TIMESTAMPTZ NOT NULL DEFAULT NOW(), + PRIMARY KEY (id, {timeColumn}) + ) + """); + await _ctx.Database.ExecuteSqlRawAsync($""" + SELECT create_hypertable('{hypertableName}', '{timeColumn}', chunk_time_interval => INTERVAL '{interval}', create_default_indexes => true) + """); + _logger.LogInformation("[ExperionDb] 새 하이퍼테이블 '{HypertableName}' 생성 완료", hypertableName); + return true; + } + catch (Exception ex) + { + _logger.LogWarning(ex, "[ExperionDb] 하이퍼테이블 '{HypertableName}' 생성 실패 (기본 테이블 사용 계속)", hypertableName); + return false; + } + } + public async Task SaveRecordsAsync(IEnumerable records) { var list = records.ToList(); @@ -390,4 +471,363 @@ public class ExperionDbService : IExperionDbService .GroupBy(x => x.NodeId) .ToDictionary(g => g.Key, g => g.First().DataType); } + + /// + /// 하이퍼테이블 상태 조회합니다. + /// 하이퍼테이블인지 여부, 레코드 수, 보존 정책, 압축, 연속 집계 설정 등을 확인합니다. + /// + public async Task GetHypertableStatusAsync() + { + try + { + await _ctx.Database.GetDbConnection().OpenAsync(); + + // 하이퍼테이블 존재 여부 확인 + await using var hypertableCheckCmd = _ctx.Database.GetDbConnection().CreateCommand(); + hypertableCheckCmd.CommandText = @" + SELECT EXISTS ( + SELECT 1 FROM timescaledb_information.hypertables + WHERE hypertable_name = 'history_table' + )"; + + var isHypertableResult = Convert.ToBoolean(await hypertableCheckCmd.ExecuteScalarAsync()); + + // 레코드 수 조회 + var recordCount = 0; + if (isHypertableResult) + { + await using var countCmd = _ctx.Database.GetDbConnection().CreateCommand(); + countCmd.CommandText = "SELECT COUNT(*) FROM history_table"; + recordCount = Convert.ToInt32(await countCmd.ExecuteScalarAsync()); + } + + // 보존 정책 확인 (pg_extension으로 TimeScaleDB 활성화 여부만 확인) + var hasRetentionPolicy = false; + try + { + await using var retentionCmd = _ctx.Database.GetDbConnection().CreateCommand(); + retentionCmd.CommandText = @" + SELECT EXISTS ( + SELECT 1 FROM timescaledb_information.policies + WHERE policy_type = 'data_retention' + AND hypertable_name = 'history_table' + )"; + hasRetentionPolicy = Convert.ToBoolean(await retentionCmd.ExecuteScalarAsync()); + } + catch + { + // policies 뷰가 없는 경우 false 유지 + hasRetentionPolicy = false; + } + + // 압축 확인 + var hasCompression = false; + try + { + await using var compressionCmd = _ctx.Database.GetDbConnection().CreateCommand(); + compressionCmd.CommandText = @" + SELECT is_compressed = 't' + FROM timescaledb_information.hypertables + WHERE hypertable_name = 'history_table'"; + var compressionResult = await compressionCmd.ExecuteScalarAsync(); + if (compressionResult != null) + { + hasCompression = compressionResult.ToString() == "t"; + } + } + catch + { + // 압축 정보 조회 실패 시 false 유지 + hasCompression = false; + } + + // 연속 집계 확인 + var hasContinuousAggregate = false; + try + { + await using var aggregateCmd = _ctx.Database.GetDbConnection().CreateCommand(); + aggregateCmd.CommandText = @" + SELECT EXISTS ( + SELECT 1 FROM timescaledb_information.continuous_aggregates + WHERE hypertable_name = 'history_table' + )"; + hasContinuousAggregate = Convert.ToBoolean(await aggregateCmd.ExecuteScalarAsync()); + } + catch + { + // continuous_aggregates 뷰가 없는 경우 false 유지 + hasContinuousAggregate = false; + } + + return new HypertableStatusInfo + { + IsHypertable = isHypertableResult, + TableName = "history_table", + StatusMessage = isHypertableResult + ? "하이퍼테이블이 활성화되어 있습니다." + : "일반 테이블입니다. CreateHypertableAsync()를 사용하여 하이퍼테이블로 변환할 수 있습니다.", + RecordCount = recordCount, + HasRetentionPolicy = hasRetentionPolicy, + HasCompression = hasCompression, + HasContinuousAggregate = hasContinuousAggregate + }; + } + catch (Exception ex) + { + return new HypertableStatusInfo + { + IsHypertable = false, + TableName = "history_table", + StatusMessage = $"상태 확인 중 오류 발생: {ex.Message}", + RecordCount = 0, + HasRetentionPolicy = false, + HasCompression = false, + HasContinuousAggregate = false + }; + } + } + + /// + /// 수동으로 하이퍼테이블을 생성합니다. + /// 테이블이 이미 존재하거나 하이퍼테이블로 변환된 경우 예외를 throw합니다. + /// + public async Task CreateHypertableAsync(HypertableCreateRequest request) + { + // 식별자 검증 - SQL injection 방지 + if (!IsValidSqlIdentifier(request.TableName)) + { + return HypertableCreateResult.Failed($"테이블 이름 '{request.TableName}'은 유효하지 않습니다. 영문, 숫자, 언더스코어, 하이픈, 마침표만 사용 가능합니다."); + } + + if (!IsValidSqlIdentifier(request.TimeColumn)) + { + return HypertableCreateResult.Failed($"시간 컬럼 이름 '{request.TimeColumn}'은 유효하지 않습니다. 영문, 숫자, 언더스코어, 하이픈, 마침표만 사용 가능합니다."); + } + + if (!IsValidSqlIdentifier(request.TimeInterval?.Replace(" ", ""))) + { + return HypertableCreateResult.Failed($"시간 간격 '{request.TimeInterval}'은 유효하지 않습니다."); + } + + try + { + _ctx.Database.GetDbConnection().Open(); + + // 1. 테이블 존재 여부 확인 + await using var tableCheckCmd = _ctx.Database.GetDbConnection().CreateCommand(); + tableCheckCmd.CommandText = @" + SELECT EXISTS ( + SELECT 1 FROM information_schema.tables + WHERE table_schema = 'public' + AND table_name = @tableName)"; + tableCheckCmd.Parameters.Add(new NpgsqlParameter("@tableName", request.TableName)); + + var tableExists = Convert.ToBoolean(await tableCheckCmd.ExecuteScalarAsync()); + if (!tableExists) + { + return HypertableCreateResult.Failed($"테이블 '{request.TableName}'이 존재하지 않습니다."); + } + + // 2. 이미 하이퍼테이블인지 확인 + await using var hypertableCheckCmd = _ctx.Database.GetDbConnection().CreateCommand(); + hypertableCheckCmd.CommandText = @" + SELECT EXISTS ( + SELECT 1 FROM timescaledb_information.hypertables + WHERE hypertable_name = @tableName)"; + hypertableCheckCmd.Parameters.Add(new NpgsqlParameter("@tableName", request.TableName)); + + var isHypertable = Convert.ToBoolean(await hypertableCheckCmd.ExecuteScalarAsync()); + if (isHypertable) + { + return HypertableCreateResult.AlreadyExists($"테이블 '{request.TableName}'은 이미 하이퍼테이블입니다."); + } + + // 3. TimescaleDB 확장 활성화 + await _ctx.Database.ExecuteSqlRawAsync("CREATE EXTENSION IF NOT EXISTS timescaledb"); + + // 3-1. 기존 SERIAL PRIMARY KEY 제약사항 제거 (TimeScaleDB 호환성) + var dropPrimaryKeySql = $"ALTER TABLE {request.TableName} DROP CONSTRAINT IF EXISTS {request.TableName}_pkey"; + Console.WriteLine($"[DEBUG] 기본키 제약사항 제거 SQL: {dropPrimaryKeySql}"); +#pragma warning disable EF1002 + await _ctx.Database.ExecuteSqlRawAsync(dropPrimaryKeySql); +#pragma warning restore EF1002 + + // 4. 하이퍼테이블 생성 (기존 데이터 마이그레이션 포함) + var createHypertableSql = $"SELECT create_hypertable('{request.TableName}'::regclass, '{request.TimeColumn}'::text, if_not_exists => TRUE, migrate_data => TRUE)"; + Console.WriteLine($"[DEBUG] 하이퍼테이블 생성 SQL: {createHypertableSql}"); +#pragma warning disable EF1002 + await _ctx.Database.ExecuteSqlRawAsync(createHypertableSql); +#pragma warning restore EF1002 + + // 4-1. TimeScaleDB 하이퍼테이블에 적합한 새로운 기본키 생성 + var addPrimaryKeySql = $"ALTER TABLE {request.TableName} ADD CONSTRAINT {request.TableName}_pkey PRIMARY KEY ({request.TimeColumn}, id)"; + Console.WriteLine($"[DEBUG] 새 기본키 생성 SQL: {addPrimaryKeySql}"); +#pragma warning disable EF1002 + await _ctx.Database.ExecuteSqlRawAsync(addPrimaryKeySql); +#pragma warning restore EF1002 + + // 6. 보존 정책 설정 (요청된 경우) + if (request.SetRetentionPolicy && !string.IsNullOrEmpty(request.RetentionPeriod)) + { + var retentionSql = $"SELECT add_retention_policy('{request.TableName}'::regclass, INTERVAL '{request.RetentionPeriod}')"; + Console.WriteLine($"[DEBUG] 보존 정책 SQL: {retentionSql}"); +#pragma warning disable EF1002 + await _ctx.Database.ExecuteSqlRawAsync(retentionSql); +#pragma warning restore EF1002 + } + + // 7. 압축 정책 설정 (요청된 경우) + if (request.EnableCompression && !string.IsNullOrEmpty(request.CompressionPeriod)) + { + var compressionSql = $"SELECT add_compression_policy('{request.TableName}'::regclass, INTERVAL '{request.CompressionPeriod}')"; + Console.WriteLine($"[DEBUG] 압축 정책 SQL: {compressionSql}"); +#pragma warning disable EF1002 + await _ctx.Database.ExecuteSqlRawAsync(compressionSql); +#pragma warning restore EF1002 + } + + // 7-1. history_table 컬럼명 검증 (tag_name vs tagname) + if (request.TableName == "history_table") + { + await using var columnCheckCmd = _ctx.Database.GetDbConnection().CreateCommand(); + columnCheckCmd.CommandText = @" + SELECT column_name FROM information_schema.columns + WHERE table_schema = 'public' + AND table_name = 'history_table' + AND column_name IN ('tag_name', 'tagname') + ORDER BY column_name;"; + + var columns = new List(); + await using var reader = await columnCheckCmd.ExecuteReaderAsync(); + while (await reader.ReadAsync()) + { + columns.Add(reader.GetString(0)); + } + + Console.WriteLine($"[DEBUG] history_table 컬럼명 검증: {string.Join(", ", columns)}"); + } + + // 8. 연속 집계 생성 (요청된 경우) + if (request.CreateContinuousAggregate) + { + // 8-1. 기존 MATERIALIZED VIEW 삭제 (별도 실행) + var dropViewSql = "DROP MATERIALIZED VIEW IF EXISTS history_5min_agg"; + Console.WriteLine($"[DEBUG] 연속 집계 DROP VIEW SQL: {dropViewSql}"); +#pragma warning disable EF1002 + await _ctx.Database.ExecuteSqlRawAsync(dropViewSql); +#pragma warning restore EF1002 + + // 8-2. 연속 집계 MATERIALIZED VIEW 생성 (별도 실행) + var createViewSql = $@" + CREATE MATERIALIZED VIEW history_5min_agg + WITH (timescaledb.continuous) AS + SELECT + time_bucket(INTERVAL '5 minutes', {request.TimeColumn}) AS time_bucket, + tagname, + AVG(value) AS avg_value, + first(value, {request.TimeColumn}) AS min_value, + last(value, {request.TimeColumn}) AS max_value + FROM {request.TableName} + GROUP BY time_bucket, tagname;"; + + Console.WriteLine($"[DEBUG] 연속 집계 CREATE VIEW SQL: {createViewSql}"); + +#pragma warning disable EF1002 + Console.WriteLine($"[DEBUG] CREATE VIEW SQL 실행 전: {createViewSql}"); + await _ctx.Database.ExecuteSqlRawAsync(createViewSql); + Console.WriteLine($"[DEBUG] CREATE VIEW SQL 실행 성공"); +#pragma warning restore EF1002 + + // 8-3. 연속 집계 정책 추가 + var aggregatePolicySql = $"SELECT add_continuous_aggregate_policy('history_5min_agg', '10 minutes', '1 minute', '5 minutes')"; + + Console.WriteLine($"[DEBUG] 연속 집계 정책 SQL: {aggregatePolicySql}"); + +#pragma warning disable EF1002 + await _ctx.Database.ExecuteSqlRawAsync(aggregatePolicySql); +#pragma warning restore EF1002 + } + + return HypertableCreateResult.Ok(); + } + catch (Exception ex) + { + var errorDetails = $"하이퍼테이블 생성 실패: {ex.Message}"; + Console.WriteLine($"[ERROR] {errorDetails}"); + if (ex.InnerException != null) + { + Console.WriteLine($"[ERROR] InnerException: {ex.InnerException.Message}"); + Console.WriteLine($"[ERROR] InnerException StackTrace: {ex.InnerException.StackTrace}"); + } + Console.WriteLine($"[ERROR] Full StackTrace: {ex.StackTrace}"); + return HypertableCreateResult.Failed(errorDetails); + } + } + + /// + /// SQL 식별자로 안전한지 검증합니다. 영문, 숫자, 언더스코어, 하이픈, 마침표만 허용합니다. + /// EF1002 SQL injection 방지를 위해 DDL 문에서 식별자를 사용할 때 이 메서드로 검증을 필수로 합니다. + /// + private static bool IsValidSqlIdentifier(string identifier) + { + if (string.IsNullOrEmpty(identifier)) + return false; + + if (identifier.Length > 63) // PostgreSQL 식별자 최대 길이 + return false; + + // 영문, 숫자, 언더스코어, 하이픈, 마침표만 허용 + return System.Text.RegularExpressions.Regex.IsMatch( + identifier, + @"^[a-zA-Z0-9_\-\.]+$"); + } +} + +/// +/// 하이퍼테이블 상태 정보 결과 클래스 +/// +public record HypertableStatusInfo +{ + public bool IsHypertable { get; init; } + public string? TableName { get; init; } + public string? StatusMessage { get; init; } + public int RecordCount { get; init; } + public bool HasRetentionPolicy { get; init; } + public bool HasCompression { get; init; } + public bool HasContinuousAggregate { get; init; } +} + +/// +/// 하이퍼테이블 생성 요청 클래스 +/// +public record HypertableCreateRequest +{ + public string TableName { get; init; } = "history_table"; + public string TimeColumn { get; init; } = "recorded_at"; + public string TimeInterval { get; init; } = "1 day"; + public bool MigrateData { get; init; } = true; + public bool SetRetentionPolicy { get; init; } = true; + public string RetentionPeriod { get; init; } = "90 days"; + public bool EnableCompression { get; init; } = true; + public string CompressionPeriod { get; init; } = "1 day"; + public bool CreateContinuousAggregate { get; init; } = true; +} + +/// +/// 하이퍼테이블 생성 결과 클래스 +/// +public record HypertableCreateResult +{ + public bool Success { get; init; } + public string Message { get; init; } = string.Empty; + public string? TableName { get; init; } + + public static HypertableCreateResult Ok(string? tableName = null, string? message = null) + => new() { Success = true, TableName = tableName, Message = message ?? "하이퍼테이블이 성공적으로 생성되었습니다." }; + + public static HypertableCreateResult Failed(string message) + => new() { Success = false, Message = message }; + + public static HypertableCreateResult AlreadyExists(string message) + => new() { Success = false, Message = message }; } diff --git a/src/Infrastructure/OpcUa/ExperionOpcClient.cs b/src/Infrastructure/OpcUa/ExperionOpcClient.cs index 05decba..23e5bef 100644 --- a/src/Infrastructure/OpcUa/ExperionOpcClient.cs +++ b/src/Infrastructure/OpcUa/ExperionOpcClient.cs @@ -105,7 +105,18 @@ public class ExperionOpcClient : IExperionOpcClient // 원본: new UserIdentity(userName, Encoding.UTF8.GetBytes(password)) var identity = new UserIdentity(cfg.UserName, Encoding.UTF8.GetBytes(cfg.Password)); - return await Session.Create(appConfig, endpoint, false, sessionName, 60_000, identity, null); + // CS0618: Session.Create는 obsolete이지만 SessionFactory/CreateAsync가 현재 라이브러리에 없음 + // Task.Run으로 래핑하여 비동기 실행 +#pragma warning disable CS0618 // 'Session.Create()' is obsolete + return await Task.Run(() => Session.Create( + appConfig, + endpoint, + false, + sessionName, + 60_000, + identity, + null)); +#pragma warning restore CS0618 // 'Session.Create()' is obsolete } // ── 접속 테스트 ─────────────────────────────────────────────────────────── diff --git a/src/Infrastructure/OpcUa/ExperionOpcServerService.cs b/src/Infrastructure/OpcUa/ExperionOpcServerService.cs index 928c2ee..f51e7da 100644 --- a/src/Infrastructure/OpcUa/ExperionOpcServerService.cs +++ b/src/Infrastructure/OpcUa/ExperionOpcServerService.cs @@ -141,7 +141,7 @@ public class ExperionOpcServerService : IExperionOpcServerService, IHostedServic var config = BuildServerConfig(); _server = new ExperionStandardServer(); - _server.Start(config); + await _server.StartAsync(config); _nodeManager = _server.NodeManager; _running = true; @@ -168,7 +168,9 @@ public class ExperionOpcServerService : IExperionOpcServerService, IHostedServic try { _nodeManager?.UpdateServerStatus("Stopped", 0); +#pragma warning disable CS0618 // 'Stop()' is obsolete _server?.Stop(); +#pragma warning restore CS0618 // 'Stop()' is obsolete } catch (Exception ex) { _logger.LogWarning(ex, "[OpcServer] 서버 Stop() 중 오류 (무시)"); } @@ -264,9 +266,24 @@ public class ExperionOpcServerService : IExperionOpcServerService, IHostedServic }; } - public void Dispose() + public async ValueTask DisposeAsync() { - try { _server?.Stop(); } catch { /* ignore */ } + if (_server != null) + { + try { await _server.StopAsync(CancellationToken.None).ConfigureAwait(false); } catch { /* ignore */ } + _server = null; + } + } + + void IDisposable.Dispose() + { + try + { +#pragma warning disable CS0618 // 'Stop()' is obsolete + _server?.Stop(); +#pragma warning restore CS0618 // 'Stop()' is obsolete + } + catch { /* ignore */ } _server = null; } } diff --git a/src/Infrastructure/OpcUa/ExperionRealtimeService.cs b/src/Infrastructure/OpcUa/ExperionRealtimeService.cs index e1d686d..fdf1dc4 100644 --- a/src/Infrastructure/OpcUa/ExperionRealtimeService.cs +++ b/src/Infrastructure/OpcUa/ExperionRealtimeService.cs @@ -174,14 +174,18 @@ public class ExperionRealtimeService : IExperionRealtimeService, IHostedService, try { // OPC UA 서버에 실제 적용 — 서버가 node_id 유효성 검증 - await Task.Run(() => _subscription.ApplyChanges()); +#pragma warning disable CS0618 // 'ApplyChanges()' is obsolete + await Task.Run(() => { _subscription.ApplyChanges(); }); +#pragma warning restore CS0618 // 'ApplyChanges()' is obsolete // 서버 응답 상태 확인 (Error가 null이면 정상) if (item.Status.Error != null && !StatusCode.IsGood(item.Status.Error.StatusCode)) { // 유효하지 않은 node_id → subscription에서 제거 _subscription.RemoveItem(item); - await Task.Run(() => _subscription.ApplyChanges()); +#pragma warning disable CS0618 // 'ApplyChanges()' is obsolete + await Task.Run(() => { _subscription.ApplyChanges(); }); +#pragma warning restore CS0618 // 'ApplyChanges()' is obsolete var code = item.Status.Error.StatusCode; _logger.LogWarning("[Realtime] 잘못된 node_id: {NodeId} — {Code}", nodeId, code); @@ -290,7 +294,9 @@ public class ExperionRealtimeService : IExperionRealtimeService, IHostedService, } _session.AddSubscription(_subscription); +#pragma warning disable CS0618 // 'Create()' is obsolete _subscription.Create(); +#pragma warning restore CS0618 // 'Create()' is obsolete // nodeId → RealtimePoint 캐시 빌드 (FlushLoop에서 tagname 조회용) _pointCache = points.ToDictionary(p => p.NodeId, p => p); @@ -380,7 +386,9 @@ public class ExperionRealtimeService : IExperionRealtimeService, IHostedService, { if (_subscription != null) { +#pragma warning disable CS0618 // 'Delete()' is obsolete _subscription.Delete(true); +#pragma warning restore CS0618 // 'Delete()' is obsolete _subscription = null; } if (_session != null) @@ -458,14 +466,36 @@ public class ExperionRealtimeService : IExperionRealtimeService, IHostedService, ExperionServerConfig cfg) { var identity = new UserIdentity(cfg.UserName, Encoding.UTF8.GetBytes(cfg.Password)); - return await Session.Create( - appConfig, endpoint, false, "ExperionRealtimeSession", 60_000, identity, null); + // CS0618: Session.Create는 obsolete이지만 SessionFactory/CreateAsync가 현재 라이브러리에 없음 + // Task.Run으로 래핑하여 비동기 실행 +#pragma warning disable CS0618 // 'Session.Create()' is obsolete + return await Task.Run(() => Session.Create( + appConfig, + endpoint, + false, + "ExperionRealtimeSession", + 60_000, + identity, + null)); +#pragma warning restore CS0618 // 'Session.Create()' is obsolete } + private volatile bool _disposed = false; + public void Dispose() { + if (_disposed) return; + _disposed = true; + _cts?.Cancel(); - CleanupSessionAsync().GetAwaiter().GetResult(); + try + { + CleanupSessionAsync().GetAwaiter().GetResult(); + } + catch + { + // Ignore exceptions during disposal + } _cts?.Dispose(); } } diff --git a/src/Web/Controllers/ExperionControllers.cs b/src/Web/Controllers/ExperionControllers.cs index 3840968..3fb5f60 100644 --- a/src/Web/Controllers/ExperionControllers.cs +++ b/src/Web/Controllers/ExperionControllers.cs @@ -3,6 +3,7 @@ using ExperionCrawler.Core.Application.Interfaces; using ExperionCrawler.Core.Application.Services; using ExperionCrawler.Core.Domain.Entities; using ExperionCrawler.Infrastructure.Csv; +using ExperionCrawler.Infrastructure.Database; using Microsoft.AspNetCore.Mvc; namespace ExperionCrawler.Web.Controllers; @@ -368,14 +369,31 @@ public class ExperionRealtimeController : ControllerBase public class ExperionHistoryController : ControllerBase { private readonly IExperionDbService _dbSvc; - public ExperionHistoryController(IExperionDbService dbSvc) => _dbSvc = dbSvc; + private readonly ILogger _logger; + + public ExperionHistoryController(IExperionDbService dbSvc, ILogger logger) + { + _dbSvc = dbSvc; + _logger = logger; + } /// realtime_table 의 tagname 목록 [HttpGet("tagnames")] public async Task TagNames() { - var names = await _dbSvc.GetTagNamesAsync(); - return Ok(new { tagNames = names }); + try + { + _logger.LogDebug("[History] tagname 목록 조회 시작"); + var names = await _dbSvc.GetTagNamesAsync(); + var count = names.Count(); + _logger.LogDebug("[History] tagname 목록 조회 완료: {Count}개 태그", count); + return Ok(new { tagNames = names }); + } + catch (Exception ex) + { + _logger.LogError(ex, "[History] tagname 목록 조회 실패"); + return StatusCode(500, new { success = false, message = $"tagname 조회 실패: {ex.Message}" }); + } } /// 이력 조회 (tagname 다중, 시간범위, limit) @@ -386,18 +404,39 @@ public class ExperionHistoryController : ControllerBase [FromQuery] DateTime? to, [FromQuery] int limit = 1000) { - var result = await _dbSvc.QueryHistoryAsync( - tagNames ?? Enumerable.Empty(), from, to, limit); - - return Ok(new + try { - tagNames = result.TagNames, - rows = result.Rows.Select(r => new + var tagList = tagNames ?? Enumerable.Empty().ToList(); + _logger.LogDebug("[History] 이력 조회 시작 - 태그 수: {TagCount}, FROM: {From}, TO: {To}, LIMIT: {Limit}", + tagList.Count(), from, to, limit); + + var result = await _dbSvc.QueryHistoryAsync( + tagList, from, to, limit); + + _logger.LogDebug("[History] 이력 조회 완료: {RowCount}행, {TagCount}태그", + result.Rows.Count(), result.TagNames.Count()); + + return Ok(new { - recordedAt = r.RecordedAt, - values = r.Values - }) - }); + tagNames = result.TagNames, + rows = result.Rows.Select(r => new + { + recordedAt = r.RecordedAt, + values = r.Values + }) + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "[History] 이력 조회 실패 - tagNames: {@TagNames}, from: {From}, to: {To}", + tagNames, from, to); + return StatusCode(500, new + { + success = false, + message = $"이력 조회 실패: {ex.Message}", + detail = ex.InnerException?.Message ?? ex.StackTrace + }); + } } } @@ -522,3 +561,57 @@ public class ExperionNodeMapController : ControllerBase }); } } + +// ── 하이퍼테이블 관리 ─────────────────────────────────────────────────────────── + +[ApiController] +[Route("api/experion/hypertable")] +public class ExperionHypertableController : ControllerBase +{ + private readonly IExperionDbService _dbSvc; + + public ExperionHypertableController(IExperionDbService dbSvc) => _dbSvc = dbSvc; + + /// 하이퍼테이블 상태 조회 + [HttpGet("status")] + public async Task GetStatus() + { + var status = await _dbSvc.GetHypertableStatusAsync(); + return Ok(new + { + isHypertable = status.IsHypertable, + tableName = status.TableName, + statusMessage = status.StatusMessage, + recordCount = status.RecordCount, + hasRetentionPolicy = status.HasRetentionPolicy, + hasCompression = status.HasCompression, + hasContinuousAggregate = status.HasContinuousAggregate + }); + } + + /// 하이퍼테이블 수동 생성 + [HttpPost("create")] + public async Task Create([FromBody] HypertableCreateDto request) + { + var createRequest = new HypertableCreateRequest + { + TableName = request.TableName ?? "history_table", + TimeColumn = request.TimeColumn ?? "recorded_at", + TimeInterval = request.TimeInterval ?? "1 day", + MigrateData = request.MigrateData, + SetRetentionPolicy = request.SetRetentionPolicy, + RetentionPeriod = request.RetentionPeriod ?? "90 days", + EnableCompression = request.EnableCompression, + CompressionPeriod = request.CompressionPeriod ?? "1 day", + CreateContinuousAggregate = request.CreateContinuousAggregate + }; + + var result = await _dbSvc.CreateHypertableAsync(createRequest); + + return result.Success + ? Ok(new { result.Success, result.Message, result.TableName }) + : (IActionResult)(result.TableName != null + ? StatusCode(409, new { result.Success, result.Message }) + : StatusCode(500, new { result.Success, result.Message })); + } +} diff --git a/src/Web/Controllers/TextToSqlController.cs b/src/Web/Controllers/TextToSqlController.cs new file mode 100644 index 0000000..e52af94 --- /dev/null +++ b/src/Web/Controllers/TextToSqlController.cs @@ -0,0 +1,68 @@ +using ExperionCrawler.Core.Application.DTOs; +using ExperionCrawler.Core.Application.Interfaces; +using Microsoft.AspNetCore.Mvc; + +namespace ExperionCrawler.Web.Controllers; + +/// +/// Text-to-SQL API 컨트롤러 +/// 자연어 질의를 SQL로 변환하고 시계열 데이터를 조회합니다. +/// +[ApiController] +[Route("api/text-to-sql")] +public class TextToSqlController : ControllerBase +{ + private readonly ITextToSqlService _textToSqlService; + + public TextToSqlController(ITextToSqlService textToSqlService) + { + _textToSqlService = textToSqlService; + } + + /// + /// 자연어 질의를 SQL로 변환 + /// + [HttpPost("parse")] + public async Task Parse([FromBody] NaturalLanguageQueryDto dto) + { + try + { + var sql = await _textToSqlService.ParseNaturalLanguageAsync(dto.Query); + return Ok(new { success = true, sql }); + } + catch (Exception ex) + { + return Ok(new { success = false, error = ex.Message }); + } + } + + /// + /// SQL 쿼리 실행 및 결과 반환 + /// + [HttpPost("execute")] + public async Task Execute([FromBody] SqlQueryDto dto) + { + var result = await _textToSqlService.ExecuteQueryAsync(dto.Sql, dto.Limit); + return Ok(result); + } + + /// + /// 쿼리 제안 (자동 완성) + /// + [HttpGet("suggest")] + public async Task Suggest([FromQuery] string input = "") + { + var suggestions = await _textToSqlService.SuggestQueriesAsync(input); + return Ok(new { success = true, suggestions }); + } + + /// + /// 시계열 분석 (평균, 최대, 최소, 추세) + /// + [HttpPost("analyze")] + public async Task Analyze([FromBody] AnalyzeRequestDto dto) + { + var result = await _textToSqlService.AnalyzeAsync(dto); + return Ok(result); + } +} diff --git a/src/Web/ExperionCrawler.csproj b/src/Web/ExperionCrawler.csproj index eb59b57..a347942 100644 --- a/src/Web/ExperionCrawler.csproj +++ b/src/Web/ExperionCrawler.csproj @@ -6,7 +6,7 @@ enable ExperionCrawler ExperionCrawler - linux-x64 + linux-arm64 false @@ -20,7 +20,7 @@ - + all diff --git a/src/Web/Program.cs b/src/Web/Program.cs index 2243c56..5552127 100644 --- a/src/Web/Program.cs +++ b/src/Web/Program.cs @@ -30,6 +30,9 @@ builder.Services.AddScoped(); // ── Application Services ────────────────────────────────────────────────────── builder.Services.AddScoped(); +// ── Text-to-SQL Service ────────────────────────────────────────────────────── +builder.Services.AddScoped(); + // ── Realtime & History BackgroundServices ───────────────────────────────────── builder.Services.AddSingleton(); builder.Services.AddSingleton( diff --git a/src/Web/appsettings.json b/src/Web/appsettings.json index 43076c1..1d4f3e8 100644 --- a/src/Web/appsettings.json +++ b/src/Web/appsettings.json @@ -3,12 +3,20 @@ "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", - "Microsoft.EntityFrameworkCore": "Warning" + "Microsoft.EntityFrameworkCore": "Information", + "Microsoft.EntityFrameworkCore.Database.Command": "Information" + }, + "Console": { + "LogLevel": { + "Default": "Information", + "Microsoft.EntityFrameworkCore": "Information" + } } }, "AllowedHosts": "*", "ConnectionStrings": { - "DefaultConnection": "Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=postgres;Trust Server Certificate=true" + "DefaultConnection": "Host=localhost;Port=5432;Database=iiot_platform;Username=postgres;Password=postgres", + "ExperionDbConnection": "Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=postgres;Trust Server Certificate=true;Include Error Detail=true" }, "OpcUaServer": { "Port": 4841, diff --git a/src/Web/bin/Debug/net8.0/linux-x64/BitFaster.Caching.dll b/src/Web/bin/Debug/net8.0/linux-x64/BitFaster.Caching.dll deleted file mode 100755 index a2597b7f08ae510f4e7517786c4254349d2ba716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164864 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 diff --git a/src/Web/bin/Debug/net8.0/linux-x64/CsvHelper.dll b/src/Web/bin/Debug/net8.0/linux-x64/CsvHelper.dll deleted file mode 100755 index 7a4a0fa447d197daf4ce779684f70df7b8916f35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225280 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 B+`9k( diff --git a/src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler b/src/Web/bin/Debug/net8.0/linux-x64/ExperionCrawler deleted file mode 100755 index 39ef32cffbde7e75b04c01220081a3e1355f4395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72568 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�_@PY}Jm2MY?s-%=FGtld5st7|^Pj&_Qi0m)} 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