config.json + env vars
-> AppConfiguration
-> CliServices
-> source/destination provider 決定
-> migration pipeline 実行
-> SQLite state DB 更新
-> logs / metrics 出力
-> status/dashboard/quality-gate から参照
Program.cs が transfer, status, dashboard, quality-metrics などのコマンドを公開します。
TransferCommand が CliServices.Build() を呼び、設定、ロガー、Graph/Dropbox クライアント、状態 DB 周辺を組み立てます。
MigratorOptions.DestinationProvider に応じて、SharePoint パイプラインか Dropbox パイプラインを選択します。
ConfigHashChecker が設定差分を検知した場合は、キャッシュや skip list をクリアして実行をやり直せる状態に戻します。
configs/config.json
+ MIGRATOR__* env vars
-> AppConfiguration.Build()
-> MigratorOptions
-> Graph client secret / Dropbox token 系を直接取得
-> GraphAuthenticator / DropboxStorageProvider
- 非機密設定は
MigratorOptions にバインドされます。
- シークレットは
AppConfiguration の専用メソッドで取得し、config.json には保持しません。
- ログ出力先、状態 DB、転送先ルート、並列度、リトライ設定もこの段階で確定します。
OneDrive (Graph)
-> Phase A: processing reset
-> Phase B: ListPagedAsync でクロール
-> SqliteTransferStateDb.transfer_records/checkpoints
-> Phase C: distinct path からフォルダ作成
-> Phase D: pending/failed を Channel に投入
-> Graph Upload (SharePoint)
-> done / failed / permanent_failed 更新
-> metrics 記録
- 前回クラッシュで残った
processing を pending へ戻します。
permanent_failed も再試行対象に戻せるよう failed へ復帰します。
GraphStorageProvider.ListPagedAsync が OneDrive をページ単位で取得します。
@odata.nextLink / @odata.deltaLink 相当のカーソルを checkpoints に保存し、中断再開と差分クロールを成立させます。
- ファイル単位の情報は SQLite の
transfer_records に保存されます。
transfer_records.path から祖先フォルダを展開し、深さ順に EnsureFolderAsync を実行します。
- 完了件数は
sp_folder_done メトリクスとして蓄積され、ダッシュボードが参照します。
GetPendingStreamAsync() が pending, processing, failed を読み出します。
Channel と Parallel.ForEachAsync がジョブをワーカーへ配布します。
AdaptiveConcurrencyController が有効なら、429/503 や成功数を見て並列度を増減します。
- 転送結果は
done / failed / permanent_failed に反映されます。
OneDrive (Graph)
-> Phase A: reset + permanent_failed reopen
-> Phase B: 新規ファイルのみ SQLite へ insert
-> Phase D: SQLite をストリーム読み出し
-> DownloadStreamAsync / UploadFromStreamAsync
-> Dropbox upload session or simple upload
-> metrics / checkpoints 更新
- SharePoint フローと違い、通常はフォルダ先行作成を行いません。
- Dropbox 側はアップロード時の親フォルダ自動作成を前提にし、API 呼び出し数を抑えます。
- ダウンロードとアップロードの所要時間、リトライ回数、レート制限率がログと SQLite メトリクスへ反映されます。
migration pipeline
-> transfer_records
-> checkpoints
-> metrics
-> status command
-> dashboard command
-> DashboardServer Minimal API
-> browser UI
status は SQLite を直接読んでテキストダッシュボードを表示します。
dashboard は DashboardServer を起動し、SQLite の集計結果を JSON API として公開します。
- Web UI は
rate_limit_pct, throughput_files_per_min, throughput_bytes_per_sec, current_parallelism を定期ポーリングします。
- すべての主要コマンドは
LoggingSetup を通して UTC の構造化ログを出力します。
- 転送の途中状態は SQLite に保存されるため、プロセス再起動後も
processing -> pending リセットで復旧できます。
watchdog はログ更新停止を検知して transfer を再起動する設計です。
dotnet test --collect:\"XPlat Code Coverage\"
-> TestResults/<guid>/coverage.cobertura.xml
-> GitHub Actions artifact
-> Codecov upload
-> quality-metrics command
- unit テスト実行時に Cobertura XML が生成されます。
- CI は XML の実ファイル位置を検索してから、Codecov と
quality-metrics に同じレポートを渡します。
- これにより、
results-directory 配下で GUID サブディレクトリが付く coverlet の実際の出力形式に追従できます。