データセット作成

コマンドシグネチャ

php artisan dataset:create {wishlist_slug?}

目的

dataset:createコマンドは、アクティブなサブスクリプションを持つ適格なウィッシュリストグループを特定し、コンソール(gb_console)とアナライザー(gb_analyzer)の両方のデータベースから分析済みデータを収集し、データ閾値を検証し、TV Python APIに構造化されたデータセット作成リクエストを送信します。このコマンドは、十分な処理済みデータを持つウィッシュリストのみがデータセット生成に使用されることを確保し、機械学習分析のためのデータ品質基準を維持します。

シーケンス図

ステップ1:コマンド初期化とウィッシュリスト適格性

sequenceDiagram
    participant System
    participant CreateCommand as dataset:create
    participant WishlistRepo as WishlistToGroupRepository
    participant ConsoleDB[(gb_console.wishlist_to_groups)]
    participant Logger
    participant Slack
    
    Note over System,Slack: コマンド初期化(30分毎)
    
    rect rgb(200, 255, 200)
    Note right of System: 正常ケース - コマンド起動
    System->>CreateCommand: コマンド実行
    CreateCommand->>Logger: wishlist_slugパラメータでコマンド開始をログ
    
    CreateCommand->>WishlistRepo: getEligibleWishlists(wishlist_slug?)
    WishlistRepo->>ConsoleDB: サブスクリプション付きのアクティブなウィッシュリストをクエリ
    Note right of WishlistRepo: WHERE status=1 AND admin_status=1 AND subscription active
    ConsoleDB-->>WishlistRepo: 適格なウィッシュリストグループを返す
    WishlistRepo-->>CreateCommand: サブスクリプション付きのアクティブなウィッシュリストを返す
    CreateCommand->>Logger: 適格なウィッシュリスト数をログ
    end
    
    rect rgb(255, 200, 200)
    Note right of System: エラーハンドリング
    rect rgb(255, 230, 230)
    alt データベース接続エラー
        WishlistRepo->>Logger: データベース接続エラーをログ
        WishlistRepo->>Slack: データベースエラー通知を送信
    else 適格なウィッシュリストなし
        CreateCommand->>Logger: 処理するウィッシュリストがないことをログ
    else 無効なウィッシュリストスラグ
        CreateCommand->>Logger: 無効なウィッシュリストスラグエラーをログ
        CreateCommand->>Slack: 無効なパラメータ通知を送信
    end
    end
    end

ステップ2:複数ソースからのデータ収集

sequenceDiagram
    participant CreateCommand as dataset:create
    participant ProductRepo as ProductRepository
    participant CategoryRepo as CategoryRankingRepository
    participant SearchRepo as SearchQueryRankingRepository
    participant ViewpointRepo as ReviewSentenceRepository
    participant AnalyzerDB[(gb_analyzer)]
    participant ConsoleDB[(gb_console)]
    participant Logger
    participant Slack
    
    Note over CreateCommand,Slack: データ収集フェーズ
    
    rect rgb(200, 255, 200)
    Note right of CreateCommand: 正常ケース - データ取得
    
    loop 各適格ウィッシュリストに対して
        CreateCommand->>Logger: ウィッシュリスト処理開始をログ
        
        rect rgb(200, 230, 255)
        Note right of CreateCommand: 商品データ収集
        CreateCommand->>ProductRepo: getProductsForWishlist(wishlistId)
        ProductRepo->>AnalyzerDB: crawl_status = 2のランキング付き商品をクエリ
        AnalyzerDB-->>ProductRepo: ランキング付き商品データを返す
        ProductRepo-->>CreateCommand: ランキング付き商品データを返す
        CreateCommand->>Logger: 商品データ数をログ
        end
        
        rect rgb(200, 230, 255)
        Note right of CreateCommand: カテゴリデータ収集
        CreateCommand->>CategoryRepo: getCategoriesForWishlist(wishlistId)
        CategoryRepo->>AnalyzerDB: 商品関係付きのcategory_rankingsをクエリ
        AnalyzerDB-->>CategoryRepo: カテゴリランキングを返す
        CategoryRepo-->>CreateCommand: カテゴリランキングを返す
        CreateCommand->>Logger: カテゴリデータ数をログ
        end
        
        rect rgb(200, 230, 255)
        Note right of CreateCommand: 検索クエリデータ収集
        CreateCommand->>SearchRepo: getSearchQueriesForWishlist(wishlistId)
        SearchRepo->>AnalyzerDB: 商品関係付きのsearch_query_rankingsをクエリ
        AnalyzerDB-->>SearchRepo: 検索クエリランキングを返す
        SearchRepo-->>CreateCommand: 検索クエリランキングを返す
        CreateCommand->>Logger: 検索クエリデータ数をログ
        end
        
        rect rgb(200, 230, 255)
        Note right of CreateCommand: 視点データ収集
        CreateCommand->>ViewpointRepo: getSpecificViewpoints(wishlistId)
        ViewpointRepo->>AnalyzerDB: 視点関連付きのreview_sentencesをクエリ
        AnalyzerDB-->>ViewpointRepo: 視点関連を返す
        ViewpointRepo-->>CreateCommand: 視点関連を返す
        CreateCommand->>Logger: 視点データ数をログ
        end
    end
    end
    
    rect rgb(255, 200, 200)
    Note right of CreateCommand: エラーハンドリング
    rect rgb(255, 230, 230)
    alt 不十分な商品データ
        CreateCommand->>Logger: 不十分な商品データをログ
        CreateCommand->>CreateCommand: ウィッシュリスト処理をスキップ
    else データベースクエリエラー
        CreateCommand->>Logger: データベースクエリエラーをログ
        CreateCommand->>Slack: データ収集エラー通知を送信
    else データ整合性エラー
        CreateCommand->>Logger: データ整合性検証エラーをログ
        CreateCommand->>Slack: データ整合性エラー通知を送信
    end
    end
    end

ステップ3:データ閾値検証

sequenceDiagram
    participant CreateCommand as dataset:create
    participant ConfigService as Configuration Service
    participant Logger
    participant Slack
    
    Note over CreateCommand,Slack: データ閾値検証プロセス
    
    rect rgb(200, 255, 200)
    Note right of CreateCommand: 正常ケース - 閾値検証
    
    rect rgb(255, 255, 200)
    Note right of CreateCommand: 閾値チェック
    CreateCommand->>ConfigService: getMinProductSuccessCount()
    ConfigService-->>CreateCommand: MIN_PRODUCT_SUCCESS_COUNT(2)を返す
    
    CreateCommand->>ConfigService: getMinNewProductSuccessCount()
    ConfigService-->>CreateCommand: MIN_NEW_PRODUCT_SUCCESS_COUNT(1)を返す
    
    CreateCommand->>CreateCommand: validateDataThresholds()
    CreateCommand->>CreateCommand: countSuccessfulProducts()
    CreateCommand->>CreateCommand: countSuccessfulCategories()
    CreateCommand->>CreateCommand: countSuccessfulSearchQueries()
    
    CreateCommand->>Logger: 閾値検証結果をログ
    end
    
    rect rgb(200, 230, 255)
    alt 閾値を満たす
        Note right of CreateCommand: 検証成功
        CreateCommand->>CreateCommand: prepareDatasetRequest()
        CreateCommand->>Logger: 閾値検証成功をログ
    else 閾値を満たさない
        Note right of CreateCommand: 検証失敗
        CreateCommand->>CreateCommand: updateWishlistWithError()
        CreateCommand->>Logger: 詳細付きで閾値検証失敗をログ
        CreateCommand->>Slack: 閾値失敗通知を送信
    end
    end
    end
    
    rect rgb(255, 200, 200)
    Note right of CreateCommand: エラーハンドリング
    rect rgb(255, 230, 230)
    alt 設定エラー
        CreateCommand->>Logger: 設定取得エラーをログ
        CreateCommand->>Slack: 設定エラー通知を送信
    else 検証ロジックエラー
        CreateCommand->>Logger: 検証ロジックエラーをログ
        CreateCommand->>Slack: 検証エラー通知を送信
    end
    end
    end

ステップ4:TV Python API統合

sequenceDiagram
    participant CreateCommand as dataset:create
    participant AnalyzerAPI as TV Python API
    participant APIService as AnalyzerApiService
    participant Logger
    participant Slack
    
    Note over CreateCommand,Slack: TV Python APIデータセット作成
    
    rect rgb(200, 255, 200)
    Note right of CreateCommand: 正常ケース - API統合
    
    rect rgb(200, 230, 255)
    Note right of CreateCommand: APIリクエスト準備
    CreateCommand->>APIService: prepareDatasetRequest(structuredData)
    APIService->>APIService: validateRequestStructure()
    APIService->>APIService: addVersioningHeaders()
    APIService-->>CreateCommand: フォーマットされたリクエストを返す
    CreateCommand->>Logger: APIリクエスト準備をログ
    end
    
    rect rgb(255, 255, 200)
    Note right of CreateCommand: API送信
    CreateCommand->>AnalyzerAPI: createDataset(structuredData)
    AnalyzerAPI->>AnalyzerAPI: リクエストペイロードを検証
    AnalyzerAPI->>AnalyzerAPI: MLパイプラインでデータセットを作成
    AnalyzerAPI-->>CreateCommand: データセットIDとステータスを返す
    CreateCommand->>Logger: dataset_id付きでAPI送信成功をログ
    end
    end
    
    rect rgb(255, 200, 200)
    Note right of CreateCommand: エラーハンドリング
    rect rgb(255, 230, 230)
    alt API認証エラー
        AnalyzerAPI->>Logger: 認証失敗をログ
        AnalyzerAPI->>Slack: API認証エラーを送信
        AnalyzerAPI->>CreateCommand: 認証エラーを返す
    else APIサービスエラー
        AnalyzerAPI->>Logger: レスポンス付きでAPIサービスエラーをログ
        AnalyzerAPI->>Slack: APIサービスエラー通知を送信
        AnalyzerAPI->>CreateCommand: サービスエラーを返す
    else リクエスト検証エラー
        AnalyzerAPI->>Logger: リクエスト検証失敗をログ
        AnalyzerAPI->>Slack: リクエスト形式エラーを送信
        AnalyzerAPI->>CreateCommand: 検証エラーを返す
    else APIタイムアウトエラー
        AnalyzerAPI->>Logger: APIタイムアウトエラーをログ
        AnalyzerAPI->>Slack: タイムアウトエラー通知を送信
        AnalyzerAPI->>CreateCommand: タイムアウトエラーを返す
    end
    end
    end

ステップ5:データベースレコード作成とログ記録

sequenceDiagram
    participant CreateCommand as dataset:create
    participant HistoryRepo as WishlistDatasetHistoryRepository
    participant LogService as DatasetCreationLogService
    participant ConsoleDB[(gb_console)]
    participant Logger
    participant Slack
    
    Note over CreateCommand,Slack: データベースレコード管理
    
    rect rgb(200, 255, 200)
    Note right of CreateCommand: 正常ケース - レコード作成
    
    rect rgb(200, 230, 255)
    Note right of CreateCommand: データセット履歴作成
    CreateCommand->>HistoryRepo: createDatasetHistory(datasetId, config)
    HistoryRepo->>ConsoleDB: BEGIN TRANSACTION
    HistoryRepo->>ConsoleDB: INSERT INTO wishlist_dataset_histories
    ConsoleDB-->>HistoryRepo: 履歴レコードIDを返す
    HistoryRepo->>ConsoleDB: COMMIT TRANSACTION
    HistoryRepo-->>CreateCommand: 履歴レコード作成を確認
    CreateCommand->>Logger: データセット履歴作成成功をログ
    end
    
    rect rgb(200, 230, 255)
    Note right of CreateCommand: イベントログ記録
    CreateCommand->>LogService: logSuccessEvent(wishlist, dataset)
    LogService->>ConsoleDB: INSERT INTO wishlist_dataset_creation_logs
    ConsoleDB-->>LogService: ログレコードIDを返す
    LogService-->>CreateCommand: イベントログ記録を確認
    CreateCommand->>Logger: 成功イベント作成をログ
    end
    
    rect rgb(230, 200, 255)
    Note right of CreateCommand: 成功監視
    CreateCommand->>Logger: 統計付きでデータセット作成成功をログ
    CreateCommand->>Slack: データセット作成成功通知を送信
    end
    end
    
    rect rgb(255, 200, 200)
    Note right of CreateCommand: エラーハンドリング
    rect rgb(255, 230, 230)
    alt データベーストランザクションエラー
        HistoryRepo->>ConsoleDB: ROLLBACK TRANSACTION
        HistoryRepo->>Logger: トランザクションロールバックエラーをログ
        HistoryRepo->>Slack: データベースエラー通知を送信
        HistoryRepo->>CreateCommand: トランザクションエラーを返す
    else ログ作成失敗
        LogService->>Logger: 詳細付きでログ作成失敗をログ
        LogService->>Slack: ログ作成失敗通知を送信
        LogService->>CreateCommand: ログエラーを返す
    else レコード制約エラー
        CreateCommand->>Logger: 制約違反エラーをログ
        CreateCommand->>Slack: 制約エラー通知を送信
    end
    end
    end

ステップ6:通知とユーザー通信

sequenceDiagram
    participant CreateCommand as dataset:create
    participant NotificationService as DatasetNotificationService
    participant PusherService as Pusher Service
    participant EmailService as Email Service
    participant ConsoleDB[(gb_console.notifications)]
    participant Logger
    participant Slack
    
    Note over CreateCommand,Slack: 通知とコミュニケーション
    
    rect rgb(200, 255, 200)
    Note right of CreateCommand: 正常ケース - 通知配信
    
    rect rgb(200, 230, 255)
    Note right of CreateCommand: アプリ内通知
    CreateCommand->>NotificationService: sendSuccessNotification()
    NotificationService->>ConsoleDB: INSERT INTO notifications
    ConsoleDB-->>NotificationService: 通知IDを返す
    NotificationService->>PusherService: リアルタイム通知を送信
    PusherService-->>NotificationService: 配信を確認
    NotificationService-->>CreateCommand: 通知送信を確認
    CreateCommand->>Logger: アプリ内通知成功をログ
    end
    
    rect rgb(200, 230, 255)
    Note right of CreateCommand: メール通知
    CreateCommand->>EmailService: sendDatasetCreationEmail(wishlist, dataset)
    EmailService->>EmailService: メールテンプレートを準備
    EmailService->>EmailService: グループメンバーに送信
    EmailService-->>CreateCommand: メール送信を確認
    CreateCommand->>Logger: メール通知成功をログ
    end
    
    rect rgb(230, 200, 255)
    Note right of CreateCommand: 管理者監視
    CreateCommand->>Slack: メトリクス付きで管理者成功通知を送信
    CreateCommand->>Logger: 管理者通知成功をログ
    end
    end
    
    rect rgb(255, 200, 200)
    Note right of CreateCommand: エラーハンドリング
    rect rgb(255, 230, 230)
    alt 通知保存エラー
        NotificationService->>Logger: 通知保存エラーをログ
        NotificationService->>Slack: 通知エラーアラートを送信
    else Pusherサービスエラー
        PusherService->>Logger: Pusherサービスエラーをログ
        PusherService->>CreateCommand: データベースのみの通知にフォールバック
    else メールサービスエラー
        EmailService->>Logger: メールサービスエラーをログ
        EmailService->>Slack: メールエラー通知を送信
    end
    end
    end

ステップ7:コマンド完了とエラー回復

sequenceDiagram
    participant CreateCommand as dataset:create
    participant LogService as DatasetCreationLogService
    participant System
    participant Logger
    participant Slack
    
    Note over CreateCommand,Slack: コマンド完了とエラー回復
    
    rect rgb(200, 255, 200)
    Note right of CreateCommand: 正常ケース - 正常完了
    
    rect rgb(230, 200, 255)
    Note right of CreateCommand: コマンドサマリー
    CreateCommand->>Logger: 全体統計付きでコマンド完了をログ
    CreateCommand->>Logger: 処理されたウィッシュリストの合計と成功率をログ
    CreateCommand->>Logger: 実行時間とパフォーマンスメトリクスをログ
    CreateCommand->>Slack: メトリクス付きでコマンド完了サマリーを送信
    end
    end
    
    rect rgb(255, 200, 200)
    Note right of CreateCommand: エラーハンドリングと回復
    rect rgb(255, 230, 230)
    alt APIエラー回復
        CreateCommand->>Logger: リトライ情報付きでAPIエラー詳細をログ
        CreateCommand->>LogService: logFailureEvent(wishlist, apiError)
        CreateCommand->>CreateCommand: トランザクションをロールバック
        CreateCommand->>Slack: 解決手順付きでAPIエラーアラートを送信
    else データベースエラー回復
        CreateCommand->>Logger: データベースエラー詳細をログ
        CreateCommand->>CreateCommand: トランザクションをロールバック
        CreateCommand->>Slack: データベースエラー通知を送信
        CreateCommand->>LogService: logFailureEvent(wishlist, databaseError)
    else 閾値検証失敗
        CreateCommand->>CreateCommand: updateWishlistWithError()
        CreateCommand->>LogService: logFailureEvent(wishlist, thresholdError)
        CreateCommand->>Logger: 特定のカウント付きで閾値失敗をログ
    else 重大なシステムエラー
        CreateCommand->>Logger: 重大なシステムエラーをログ
        CreateCommand->>Slack: 重大なエラーアラートを送信
        CreateCommand->>System: 以降の処理を停止
    end
    end
    end

詳細

パラメータ

  • {wishlist_slug?}: 特定のウィッシュリスト用にデータセットを作成するためのオプションパラメータ
    • 提供されると、コマンドは指定されたウィッシュリストグループのみを処理します
    • 省略された場合、すべての適格なウィッシュリストグループが処理されます
    • データベースに存在する既存のウィッシュリストスラグと一致する必要があります
    • 手動データセット作成や特定のウィッシュリストのテストに役立ちます

頻度

  • スケジュール実行: 30分毎
    • Laravelのスケジューラを使用してroutes/console.phpで設定
    • 例: Schedule::command('dataset:create')->everyThirtyMinutes();
  • 手動実行: 特定のウィッシュリスト用に手動でトリガー可能
    • テストや即時データセット作成のニーズに使用

依存関係

データベース依存関係:

  • ウィッシュリストとデータセットレコード用のコンソールデータベース(gb_console)接続
  • 商品、カテゴリ、検索データ用のアナライザーデータベース(gb_analyzer)接続
  • 最小商品成功数: 2(MIN_PRODUCT_SUCCESS_COUNTで設定可能)
  • 最小新商品成功数: 1(MIN_NEW_PRODUCT_SUCCESS_COUNTで設定可能)

外部サービス依存関係:

  • TV Python APIサービスの可用性と認証
  • 環境変数で設定された有効なAPI認証情報
  • APIサービスへのネットワーク接続
  • APIバージョン互換性(config/analyzer_api.dataset.versionで設定)

システム依存関係:

  • 有料ステータスのアクティブなサブスクリプションを持つウィッシュリストグループ
  • crawl_status = 2(成功)で正常に処理された商品、カテゴリ、検索データ
  • config/analyzer_api.phpで適切に設定されたデータセット設定
  • 特定視点分析用のレビュー文データ

出力

テーブル

データセット作成コマンドは複数のデータベーステーブルと相互作用します。完全なテーブル構造、フィールド定義、および関係については、データベーススキーマセクションを参照してください。

主要出力テーブル:

  • wishlist_dataset_histories: APIデータセットIDを持つ新しいデータセット追跡レコードを作成
  • wishlist_dataset_creation_logs: すべての作成イベント(リクエスト、成功、失敗)をログ
  • wishlist_to_groups: エラーメッセージと手動リクエストタイムスタンプを更新

コマンド固有の操作:

  • 作成: APIからのデータセットIDを持つwishlist_dataset_historiesに新しいレコードを作成
  • ログ: 詳細データを持つwishlist_dataset_creation_logsに成功/失敗イベントをログ
  • 更新: ウィッシュリストのエラーメッセージと手動リクエストフラグを更新

サービス

TV Python API:

  • 構造化リクエストペイロードを持つデータセット作成エンドポイント
  • 追跡用のデータセットIDと初期ステータスを返す
  • 設定バージョニングとAPI互換性を処理

通知サービス:

  • ユーザー向けのDatasetNotificationクラスを介したアプリ内通知
  • データセット作成完了/失敗のためのメール通知
  • 管理者向けのDatasetSlackChannelを介したSlackアラート
  • 接続されたクライアント向けのPusherを介したリアルタイム更新

リポジトリサービス:

  • WishlistToGroupRepositoryInterface: サブスクリプション検証による適格性フィルタリング
  • WishlistDatasetHistoryRepositoryInterface: データセット履歴CRUD操作
  • DatasetCreationLogService: 構造化データによるイベントログ記録
  • ProductRepositoryInterface: アナライザーデータベースからの商品データ取得
  • CategoryRankingRepositoryInterface: 商品関係を持つカテゴリランキングデータ
  • SearchQueryRankingRepositoryInterface: 商品関係を持つ検索クエリランキングデータ
  • ReviewSentenceRepositoryInterface: 感情分析のための特定視点データ

エラーハンドリング

ログ

システムはデータセット作成の問題をトラブルシューティングするための包括的なログを生成します:

データセット作成エラー:

  • 完全なリクエスト/レスポンス詳細を持つAPI通信失敗
  • 特定の閾値情報とカウントを持つデータ検証エラー
  • ロールバック詳細と影響を受けたレコードを持つデータベーストランザクション失敗
  • 不足パラメータ情報と提案を持つ設定エラー

適格性検証エラー:

  • サブスクリプションステータス詳細を持つサブスクリプション検証失敗
  • 実際の対必要カウントを持つデータ閾値失敗
  • 特定のフィールド検証問題を持つウィッシュリスト設定エラー

ログの場所:

  • コンテキスト情報を持つアプリケーションログ: storage/logs/laravel.log
  • 実行統計とパフォーマンスメトリクスを持つコマンド固有のログ
  • デバッグ用の完全なスタックトレースとリクエスト詳細を持つエラーログ

Slack

自動Slack通知は運用監視のためにDatasetSlackChannelを介して送信されます:

成功通知:

  • 処理統計とタイミングを持つデータセット作成完了
  • 成功/失敗カウントを持つバッチ処理サマリー
  • APIレスポンス時間とデータ量を含むパフォーマンスメトリクス

エラー通知:

  • エラーコードとリトライ情報を持つAPI通信失敗
  • 影響を受けたウィッシュリスト詳細を持つデータベース操作失敗
  • 解決提案とドキュメントリンクを持つ設定問題
  • 即時管理者注意を必要とする重大なシステムエラー

通知形式:

  • 追跡用のコマンド名と実行タイムスタンプ
  • 優先順位付けのためのエラータイプと重大度レベル
  • 調査用の影響を受けたウィッシュリストグループとデータセットID
  • 提案されたトラブルシューティング手順とドキュメント参照

トラブルシューティング

データを確認

ウィッシュリスト適格性の検証:

-- 有効なサブスクリプションを持つアクティブなウィッシュリストグループを確認
SELECT wtg.id, wtg.name, wtg.status, wtg.admin_status, 
       wtg.training_schedule, wtg.manual_request_dataset_at,
       s.status as subscription_status, sh.payment_status
FROM wishlist_to_groups wtg
JOIN subscriptions s ON wtg.subscription_id = s.id
JOIN subscription_histories sh ON s.id = sh.subscription_id
WHERE wtg.status = 1 AND wtg.admin_status = 1 
AND s.status = 'active' AND sh.payment_status = 'paid'
AND (wtg.training_schedule != 'manual' OR wtg.manual_request_dataset_at IS NOT NULL);

データ閾値の検証:

-- ウィッシュリストグループの商品数を確認
SELECT wtg.id, wtg.name, 
       COUNT(CASE WHEN swp.crawl_status = 2 THEN 1 END) as success_products,
       COUNT(CASE WHEN swc.crawl_status = 2 THEN 1 END) as success_categories,
       COUNT(CASE WHEN swsq.crawl_status = 2 THEN 1 END) as success_search_queries
FROM wishlist_to_groups wtg
LEFT JOIN summary_wishlist_products swp ON wtg.id = swp.wishlist_to_group_id
LEFT JOIN summary_wishlist_categories swc ON wtg.id = swc.wishlist_to_group_id
LEFT JOIN summary_wishlist_search_queries swsq ON wtg.id = swsq.wishlist_to_group_id
GROUP BY wtg.id, wtg.name
HAVING success_products >= 2; -- MIN_PRODUCT_SUCCESS_COUNT

最近のデータセット作成試行の確認:

-- 最近のデータセット作成イベントを確認
SELECT wdcl.*, wtg.name as wishlist_name
FROM wishlist_dataset_creation_logs wdcl
JOIN wishlist_to_groups wtg ON wdcl.wishlist_to_group_id = wtg.id
WHERE wdcl.created_at > DATE_SUB(NOW(), INTERVAL 1 DAY)
ORDER BY wdcl.created_at DESC LIMIT 20;

ログを確認

アプリケーションログ:

# 最近のdataset:createコマンドログを確認
tail -f storage/logs/laravel.log | grep -E "dataset:create"

# API通信ログを確認
grep "AnalyzerApiService.*dataset.*create" storage/logs/laravel.log | tail -20

# 閾値検証エラーを確認
grep -E "(MIN_PRODUCT_SUCCESS_COUNT|MIN_NEW_PRODUCT_SUCCESS_COUNT)" storage/logs/laravel.log | tail -10

# エラーパターンを確認
grep -E "(ERROR|CRITICAL)" storage/logs/laravel.log | grep "dataset:create" | tail -10

データベースログ:

-- 失敗したデータセット作成試行を確認
SELECT wdh.*, wtg.name as wishlist_name
FROM wishlist_dataset_histories wdh
JOIN wishlist_to_groups wtg ON wdh.wishlist_to_group_id = wtg.id
WHERE wdh.created_at > DATE_SUB(NOW(), INTERVAL 1 DAY)
AND wdh.dataset_id IS NULL
ORDER BY wdh.created_at DESC;

-- ウィッシュリストエラーメッセージを確認
SELECT id, name, error_message, updated_at
FROM wishlist_to_groups
WHERE error_message IS NOT NULL
AND updated_at > DATE_SUB(NOW(), INTERVAL 1 DAY);

APIレスポンス検証:

# API接続性をテスト
curl -X GET "https://api.analyzer.example.com/health" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

# データセット作成エンドポイントをテスト
curl -X POST "https://api.analyzer.example.com/datasets?version=1" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dataset_name": "test", "dataset_type": 1, "settings": {}}'

パフォーマンス監視:

  • パフォーマンス低下についてログでコマンド実行時間を監視
  • 大規模なウィッシュリストデータセットのデータベースクエリパフォーマンスを確認
  • APIレスポンス時間とタイムアウト設定を確認