# DataCenter Service ## 目錄 [TOC] # Service 建立與管理 ## 開發環境及管理工具 * 使用 [Visual Studio Code](https://code.visualstudio.com/) 作為 Linux 開發環境 * 安裝 [.Net Core SDK 3.1](https://dotnet.microsoft.com/download) * 安裝 [C# extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) * 使用 [PostgreSQL](https://www.postgresql.org/) 作為 Database 工具 * 使用 [pgAdmin](https://www.pgadmin.org/) 作為 Database 圖形介面 * 使用 [X2Go](https://wiki.x2go.org/doku.php) 作為遠端桌面工具 * 使用 [FileZilla](https://filezilla-project.org/) 進行遠端程式碼及設定檔更新 ## Linux Systemd 建立方式 ### 建立程式 1. 開啟 VS Code 命令列輸入 <code>dotnet new worker</code> 2. 加入套件 <code>Microsoft.Extensions.Hosting.Systemd</code> 3. 增加 <code>UseSystemd()</code> 到 <code>Program.cs</code> 的 <code>CreateHostBuilder</code> 中 ```gherkin= Host.CreateDefaultBuilder(args) .UseSystemd() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); ``` *以上程式碼中的 CreateDefaultBuilder 即為程式進入點 簡易 Worker.cs 程式: ```gherkin= public class Worker : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // do something await Task.Delay(1000, stoppingToken); } } } ``` ### 建立 Service 1. 發佈專案,可自行指定路徑 (以下以檔案傳輸 Service 為例) ```=shell sudo dotnet publish -o /usr/sbin/dcDataTransferService ``` 2. 建立 .service 檔 在 <code>/etc/systemd/system</code> 目錄下提供一個 <code>dcDataTransfer.service</code> 檔做配置 service 之用 ```gherkin= [Unit] Description=Data Center DataTransfer Service [Service] WorkingDirectory=/home/SSD1TB/IAIoT-DataCenter/Config #設定檔路徑 Type=notify ExecStart=/usr/sbin/dcDataTransferService/DataTransferService TimeoutSec=300 TimeoutStopSec=90 [Install] WantedBy=multi-user.target ``` 3. 重載服務 ```=shell sudo systemctl daemon-reload ``` 4. 啟用 Service ```=shell sudo systemctl enable dcDataTransfer.service ``` 5. 執行 Service ```=shell sudo systemctl start dcDataTransfer.service ``` 6. 查看 Service 狀態 ```=shell sudo systemctl status dcDataTransfer.service ``` 7. 啟用後重開機時 service 也會自動開啟,如需停用需移除 <code>dcDataTransfer.service</code> 檔案 # DataCenter Service 說明 ## DataTransfer Service ### Service 目的 1. 檢測結果資料透過 SFTP 傳送至 Data Center 2. 機台狀態 log 檔案傳輸 (最終目標是做出 Digital Twin, log檔格式需先統一定義) ### 相關 Database Table * DetectionResult ### 啟動 Service 修改設定後需關閉並重新啟動 Service * 關閉 <code>sudo systemctl stop dcDataTransfer.service</code> * 開啟 <code>sudo systemctl start dcDataTransfer.service</code> ### 設定檔說明 設定檔位置 <code>/home/SSD1TB/IAIoT-DataCenter/Config/DataCenterConfig.json</code> ```gherkin= { "DatabaseName": "SpindleDataCenter-GVL", "FilePath": "/home/SSD1TB/IAIoT-DataCenter", "LimitedHardDriveName" = "/home/SSD1TB", "LimitedHardDriveSpaceGB" = 100.0, "MachineConfig": [ { "ID": "NOGV0A1000", "Address": "10.68.200.1", "Username": "datacenter", "Password": "0ycVpzC3HEc0rb041o+jUXYc1O26n3NjnAw9VAU3TIzo22roXLbUFGPDvCBjwAuChA7pN3NPZLF0vJdITXJxf2j2RU0/BLHgwuVmNL1emLE=", "EnableDataTransfer": true, "EnableDataDelete": true, "DataTransferTime": [ { "Start": "22:00", "Stop": "08:00" }, { "Start": "12:00", "Stop": "13:00" } ] }, { "ID": "NOGV0A1001", "Address": "10.68.200.2", "Username": "datacenter", "Password": "0ycVpzC3HEc0rb041o+jUXYc1O26n3NjnAw9VAU3TIzo22roXLbUFGPDvCBjwAuChA7pN3NPZLF0vJdITXJxf2j2RU0/BLHgwuVmNL1emLE=", "EnableDataTransfer": true, "EnableDataDelete": true, "DataTransferTime": [ { "Start": "22:00", "Stop": "08:00" }, { "Start": "12:00", "Stop": "13:00" } ] } ] } ``` * DatabaseName - DC 端資料庫名稱 * FilePath - DC 端檔案儲存根目錄 * LimitedHardDriveName - DC 儲存資料裝置名稱,空間不足時停止資料傳輸 * LimitedHardDriveSpaceGB - DC 儲存資料空間限制 * MachineConfig - 以陣列方式儲存,可根據機台配置新增/刪除 * ID - 機台對應名稱 * Address - 機台 IP 位置 * Username - 機台登入帳號,需有管理者權限 * Password - 機台登入密碼 * EnableDataTransfer - 開啟/關閉檔案傳輸功能 * EnableDataDelete - 開啟/關閉檔案刪除功能。開啟時,機台端檔案將在傳送至DC端後刪除 * DataTransferTime - 資料傳輸限定時間, 需為固定格式 "HH:mm" ## LabelProject Service ### Service 目的 1. 產生 LabelProject 2. 監控標定狀態 3. 上傳標定專案及標定圖檔 ([參考連結](https://hackmd.io/@1Howr5YGR5WJmeFl-gN0uw/S1jKkpcpv)) ### 相關 Database Table * LabelProject * LabelProjectTask * DetectionResult * Machine ### 啟動 Service 修改設定後需關閉並重新啟動 Service * 關閉 <code>sudo systemctl stop dcLabelProject.service</code> * 開啟 <code>sudo systemctl start dcLabelProject.service</code> ### 設定檔說明 設定檔位置 <code>/home/SSD1TB/IAIoT-DataCenter/Config/LabelProject.json</code> ```gherkin= [ { "ModelName": "C8C80", "ConfigXML": "/home/HHD10TB1/IAIoT-DataCenter/Config/C8C80.xml", "Address": "10.68.161.31", "Username": "nvidia", "Password": "Cs0TYZD9Vp60XbHn6GuG+7u3GWncsFv9ZlGQEz2Tv6Y38Vq3ZOnBElNEk3E0Ke73TX7P3EcEHVHa+luwGiPvpKZgQ6rrERKZKfWrcOOmMLU=", "UploadFilePath": "/media/nvidia/HDD1T/RemoteData", "StartTime": "2020-12-29 00:00:00" }, { "ModelName": "C9C78", "ConfigXML": "/home/HHD10TB1/IAIoT-DataCenter/Config/C9C78.xml", "Address": "10.68.161.31", "Username": "nvidia", "Password": "Cs0TYZD9Vp60XbHn6GuG+7u3GWncsFv9ZlGQEz2Tv6Y38Vq3ZOnBElNEk3E0Ke73TX7P3EcEHVHa+luwGiPvpKZgQ6rrERKZKfWrcOOmMLU=", "UploadFilePath": "/media/nvidia/HDD1T/RemoteData", "StartTime": "2020-12-29 15:46:00" } ] ``` * ModelName - 機台型號 * ConfigXML - AI Team 定義 Label-Studio 相關設定檔位置 * Address - 上傳裝置 IP * Username - 上傳裝置使用者名稱 * Password - 上傳裝置密碼 (加密後結果) * ID - 機台對應名稱 * UploadFilePath - 上傳資料夾位置 * StartTime - 標定資料開始收集時間 ## Report Service ### Service 目的 1. 產生 Daily Report PDF 檔案 2. 產生 Region 對應 Excel 檔案 3. 將 PDF 及 Excel 檔案以 Email 方式寄出 ### 相關 Database Table * DetectionResult * DetectionResultObject * ProcessReport * Network * Machine ### 啟動 Service 修改設定後需關閉並重新啟動 Service * 關閉 <code>sudo systemctl stop dcReport.service</code> * 開啟 <code>sudo systemctl start dcReport.service</code> ### 設定檔說明 設定檔位置 <code>/home/SSD1TB/IAIoT-DataCenter/Config/ReportConfig.json</code> ```gherkin= { "DayDelta": -1, "ReportCreateTimeStart": 7, "ReportCreateTimeStop": 9, "MailToList": [ "py.yang@getac.com.tw", "woody.lin@getac.com.tw", "frank.cw.chen@getac.com.tw", "mike.lc.lai@getac.com.tw", "ken.liang@getac.com.tw", "denver.tan@getac.com.tw" ], "MailCCList": [ "ky.tsai@getac.com.tw", "ivy.cheng@getac.com.tw" ] } ``` * DayDelta - 產生第幾天的資料,e.g. -1 指產生昨天的資料 * ReportCreateTimeStart - 開始產生資料時間 * ReportCreateTimeStop - 停止產生資料時間,只在開始與停止中間產生一次 * MailToList - 收件者 Email 名單 * MailCCList - 副本 Email 名單 ## Message Service ### Service 目的 1. 定期檢查 DataCenter 與機台間網路狀況並寫入 Database 供 ReportService 產生報表使用 ### 啟動 Service 修改設定後需關閉並重新啟動 Service * 關閉 <code>sudo systemctl stop dcMessage.service</code> * 開啟 <code>sudo systemctl start dcMessage.service</code>