분리후 첫 Crawling 성공 모델
This commit is contained in:
71
OpcPksPlatform/OpcPks.Core/Data/AssetLoader.cs
Normal file
71
OpcPksPlatform/OpcPks.Core/Data/AssetLoader.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Npgsql;
|
||||
using OpcPks.Core.Data;
|
||||
|
||||
namespace OpcPks.Core.Data
|
||||
{
|
||||
public class AssetLoader
|
||||
{
|
||||
public async Task ImportFullMapAsync(string csvPath)
|
||||
{
|
||||
Console.WriteLine($"🚀 CSV 데이터 로드 시작: {csvPath}");
|
||||
|
||||
if (!File.Exists(csvPath))
|
||||
{
|
||||
Console.WriteLine("❌ 파일을 찾을 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
// CSV 파일 읽기 (첫 줄 헤더 제외)
|
||||
var lines = await File.ReadAllLinesAsync(csvPath);
|
||||
Console.WriteLine($"📊 총 {lines.Length - 1}개의 라인을 처리합니다...");
|
||||
|
||||
using var conn = new NpgsqlConnection(DbConfig.ConnectionString);
|
||||
await conn.OpenAsync();
|
||||
|
||||
// PostgreSQL Binary Copy 시작
|
||||
// level, class, name, node_id, data_type 총 5개 필드
|
||||
using (var writer = conn.BeginBinaryImport("COPY raw_node_map (level, class, name, node_id, data_type) FROM STDIN (FORMAT BINARY)"))
|
||||
{
|
||||
int count = 0;
|
||||
for (int i = 1; i < lines.Length; i++) // i=1 부터 시작하여 헤더 스킵
|
||||
{
|
||||
var line = lines[i];
|
||||
if (string.IsNullOrWhiteSpace(line)) continue;
|
||||
|
||||
var cols = line.Split(',');
|
||||
if (cols.Length < 4) continue; // 최소 4개 필드(NodeId까지)는 있어야 함
|
||||
|
||||
try
|
||||
{
|
||||
writer.StartRow();
|
||||
// 1. Level (int)
|
||||
writer.Write(int.Parse(cols[0]), NpgsqlTypes.NpgsqlDbType.Integer);
|
||||
// 2. Class (string)
|
||||
writer.Write(cols[1], NpgsqlTypes.NpgsqlDbType.Text);
|
||||
// 3. Name (string)
|
||||
writer.Write(cols[2], NpgsqlTypes.NpgsqlDbType.Text);
|
||||
// 4. NodeId (string)
|
||||
writer.Write(cols[3], NpgsqlTypes.NpgsqlDbType.Text);
|
||||
|
||||
// 5. DataType (데이터가 없으면 "Unknown" 처리)
|
||||
string dataType = cols.Length > 4 ? cols[4].Trim() : "Unknown";
|
||||
writer.Write(dataType, NpgsqlTypes.NpgsqlDbType.Text);
|
||||
|
||||
count++;
|
||||
if (count % 50000 == 0) Console.WriteLine($"... {count}개 처리 중");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"⚠️ 에러 발생 (라인 {i+1}): {ex.Message}");
|
||||
}
|
||||
}
|
||||
await writer.CompleteAsync();
|
||||
Console.WriteLine($"✅ 총 {count}개 노드 로드 완료!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
8
OpcPksPlatform/OpcPks.Core/Data/DbConfig.cs
Normal file
8
OpcPksPlatform/OpcPks.Core/Data/DbConfig.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace OpcPks.Core.Data
|
||||
{
|
||||
public static class DbConfig
|
||||
{
|
||||
// PostgreSQL 접속 정보로 수정하세요.
|
||||
public static string ConnectionString = "Host=localhost;Username=pacer;Password=pacer;Database=opcdb";
|
||||
}
|
||||
}
|
||||
522280
OpcPksPlatform/OpcPks.Core/Data/Honeywell_FullMap.csv
Normal file
522280
OpcPksPlatform/OpcPks.Core/Data/Honeywell_FullMap.csv
Normal file
File diff suppressed because it is too large
Load Diff
24
OpcPksPlatform/OpcPks.Core/Data/pki/own/certs/8845hs.crt
Executable file
24
OpcPksPlatform/OpcPks.Core/Data/pki/own/certs/8845hs.crt
Executable file
@@ -0,0 +1,24 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEAzCCAuugAwIBAgIUdxkuyO0kUlLnKYoSV4bt7FJZ7+4wDQYJKoZIhvcNAQEL
|
||||
BQAwgZAxCzAJBgNVBAYTAktPMQ4wDAYDVQQIDAVTZW91bDEOMAwGA1UEBwwFU2Vv
|
||||
dWwxFjAUBgNVBAoMDWhhbm1vIGNvbnRyb2wxEDAOBgNVBAsMB2NvbnRyb2wxEDAO
|
||||
BgNVBAMMB25ldHdvcmsxJTAjBgkqhkiG9w0BCQEWFmNvbnRhY3RAaGFubW9jbm4u
|
||||
Y28ua3IwHhcNMjYwMjIyMDUzNDExWhcNMzYwMjIwMDUzNDExWjCBkDELMAkGA1UE
|
||||
BhMCS08xDjAMBgNVBAgMBVNlb3VsMQ4wDAYDVQQHDAVTZW91bDEWMBQGA1UECgwN
|
||||
aGFubW8gY29udHJvbDEQMA4GA1UECwwHY29udHJvbDEQMA4GA1UEAwwHbmV0d29y
|
||||
azElMCMGCSqGSIb3DQEJARYWY29udGFjdEBoYW5tb2Nubi5jby5rcjCCASIwDQYJ
|
||||
KoZIhvcNAQEBBQADggEPADCCAQoCggEBANV459zeHqHfvkfVfPeXu3lUOQfHvX9T
|
||||
ca2roF8G1e3NKUQJeuCPCCwK1AM+++lyw70iGmIoULkSwMtIlAloKtyrf5FG/LWB
|
||||
bUdjirF157CrkpITXmNuDDxTbVn6YXLZHC5R+OhZXH32iUj1aTq3tx37lOmTh3R/
|
||||
IZOGxsLkCGDni0GirE54Z0ufdl6CFr8FfcakVO+9Y6SEUEsZp4uybrA5LfprZlj/
|
||||
2uXu9svMoePTOb8D7MMg6WfZrsOb4hMg483P9t1rHqMg2AESbOT4N9H3HFDDrA5l
|
||||
w7KozmIwCeskYeLQPGX/DQ+GxYGoezfsWSM1fXKM/0XNskXqZGmi59UCAwEAAaNT
|
||||
MFEwHQYDVR0OBBYEFI3WwCA/ZNQgUkTaZtQttffbcnpeMB8GA1UdIwQYMBaAFI3W
|
||||
wCA/ZNQgUkTaZtQttffbcnpeMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL
|
||||
BQADggEBAEHVsKOCTJSY7Hk0rLXb5yU7qbiS3uHq8elm+2JGaodJZ7TPnWuyqkEF
|
||||
9/7713Y7MAXHcv2qEYeIE+qS4ZrlT9Xz+xf452zd+xRpUq6j4PBlKwEM77uXHnNl
|
||||
yO0g1GgIdBRz5F61ESWfvwfR1GJ2Q3j0ry5qZPlVD1KjJyGYL8DJdVBsg/yJ62+M
|
||||
xYFSk2JrRxU/JiV/Dq7Mxy3hvGupVGjdcQdnW/1xZK+xmWDG5ky+u/3qcH9nNlce
|
||||
UiblRoYjlrdHnrVi3VAJFaquJZNwDr/Ar+LSxDHjEzDtpby9Q6VbtDnA77GcG7vn
|
||||
TsBE6iGyly9WG9Q0dgNKEw59ciRGi6M=
|
||||
-----END CERTIFICATE-----
|
||||
28
OpcPksPlatform/OpcPks.Core/Data/pki/own/private/8845hs.key
Executable file
28
OpcPksPlatform/OpcPks.Core/Data/pki/own/private/8845hs.key
Executable file
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDVeOfc3h6h375H
|
||||
1Xz3l7t5VDkHx71/U3Gtq6BfBtXtzSlECXrgjwgsCtQDPvvpcsO9IhpiKFC5EsDL
|
||||
SJQJaCrcq3+RRvy1gW1HY4qxdeewq5KSE15jbgw8U21Z+mFy2RwuUfjoWVx99olI
|
||||
9Wk6t7cd+5Tpk4d0fyGThsbC5Ahg54tBoqxOeGdLn3Zegha/BX3GpFTvvWOkhFBL
|
||||
GaeLsm6wOS36a2ZY/9rl7vbLzKHj0zm/A+zDIOln2a7Dm+ITIOPNz/bdax6jINgB
|
||||
Emzk+DfR9xxQw6wOZcOyqM5iMAnrJGHi0Dxl/w0PhsWBqHs37FkjNX1yjP9FzbJF
|
||||
6mRpoufVAgMBAAECggEABhcvglk3WttP31Z40iBFoeC5ydOJ6rk+QTwS1MiUpPbE
|
||||
Cnlnb0MVcsWSUU9kOj+4fvZwoJlRiEjqhZeaBaoFAwvE6tJcK8TivHUww/8UWlw4
|
||||
JSvL9x6bgcMdl8IcMqh9dILejP6JCYerA2ZhF2LzegsEr3oH6ivQZkL4+8mBcFui
|
||||
1w2vuIMGlJbFbBjiWWvuWe04dRtKQ172PcH1980IGjT3zjwBzn3nbR69LBC+5tDj
|
||||
ORPs/uORUb9SKAtrxlhggRQIehBuTqbmgAiEwEZXH0OaNLUZzUM6b8XfrCLYXEM9
|
||||
Cexh5apqpTR0jDV7WVrCTOSvQ6VcfO5+ibs4DkeqUQKBgQDtDuH347CXDaaWuQqK
|
||||
yOAugpWohFM0LArZySV6FXjX/fqOfpWwGRY6SAftF+GmR6MiPphjuI4yW9DsZG1h
|
||||
8FWLwZrwkazVbk2cHwU4CZhoQVuNHhLYhF3G2QcyNqlL8uHb49z4iyvTYr3XFMgn
|
||||
p7qULd0BFfzb04butWylgVy5GQKBgQDmh5Cz7wCeZBOR1KjAJqo8O2BhHp6j2GsA
|
||||
5OmaxZw++O0uqh0JZnJpjXkyEpR7kUOM8+3uvuAti68kQis3chFNlITzNNLLZaDO
|
||||
oy8qwPvPzTSbUVzDD2acfNrM7oHnsJ6IHmHMnzQGLg9zjGJt31wNtJyfdOp7Kn33
|
||||
Q06QRD9wHQKBgQClj65b3YZ4iM0fGQ72zMJdWVBCiGA/4L6XSfdFo3dpinUSTfAn
|
||||
M+4lOCdo/DPZWNDjWso9YyjUnPF2F9GZBCwK1mVqvKLz0PydG8EeWP07WuIg1a8d
|
||||
zpxcAzkWZbypUXFSjHrIjxJFqQGjFF2R7H/Pe5SNbJjTwpDLaKP/lzB2CQKBgDe8
|
||||
TQMD5O1mmsimVspmTsBTRsEUaxyIBY7oyYYPAvDCtG2U2YJdT4ovlz7A+T9K5r8c
|
||||
dslDQuYgII8upE46eO592wsGGXTttExhbdTzZa5fGbn3mOrcPV3WXfwwKh4/OIUG
|
||||
e3TChQx9dGTmayHPX+08XqW62bo/kscGcec1aPUNAoGAUq++tYrNfzWvu8GXTpTI
|
||||
KWhHxRNd3zOOjdG62ss/dFCuZ+hr1gEKZxsHgvEO56wbzNTPsZdY+oq6p/hrOS7P
|
||||
IsNvSmZO0QJeOxnU/NZ1Hyd7sHCYp7guyJOhhPAuFMa7w/8yrYzBVe3PwTp/cnEk
|
||||
lx20RyQMp2eQSQF0gs6hr1U=
|
||||
-----END PRIVATE KEY-----
|
||||
BIN
OpcPksPlatform/OpcPks.Core/Data/pki/own/private/OpcTestClient.pfx
Executable file
BIN
OpcPksPlatform/OpcPks.Core/Data/pki/own/private/OpcTestClient.pfx
Executable file
Binary file not shown.
BIN
OpcPksPlatform/OpcPks.Core/Data/pki/trusted/certs/application_rsa_sha256.der
Executable file
BIN
OpcPksPlatform/OpcPks.Core/Data/pki/trusted/certs/application_rsa_sha256.der
Executable file
Binary file not shown.
BIN
OpcPksPlatform/OpcPks.Core/Data/pki/trusted/certs/rootCA.der
Executable file
BIN
OpcPksPlatform/OpcPks.Core/Data/pki/trusted/certs/rootCA.der
Executable file
Binary file not shown.
Reference in New Issue
Block a user