|
8 | 8 | SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" |
9 | 9 | PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" |
10 | 10 |
|
| 11 | +# TMUXセッションから自動的にプロジェクト名を検出 |
| 12 | +if [ -n "$TMUX" ]; then |
| 13 | + # 現在のtmuxセッション名を取得 |
| 14 | + CURRENT_SESSION=$(tmux display-message -p '#S' 2>/dev/null || echo "") |
| 15 | + |
| 16 | + # プロジェクト名を抽出(最後の_PMまたは_Workersを削除) |
| 17 | + if [[ "$CURRENT_SESSION" =~ ^(.*)_PM$ ]]; then |
| 18 | + PROJECT_NAME="${BASH_REMATCH[1]}" |
| 19 | + elif [[ "$CURRENT_SESSION" =~ ^(.*)_Workers[0-9]*$ ]]; then |
| 20 | + PROJECT_NAME="${BASH_REMATCH[1]}" |
| 21 | + else |
| 22 | + # パターンにマッチしない場合はデフォルト |
| 23 | + PROJECT_NAME="Team1" |
| 24 | + fi |
| 25 | +else |
| 26 | + # TMUX外から起動された場合のフォールバック |
| 27 | + PROJECT_NAME="Team1" |
| 28 | +fi |
| 29 | + |
| 30 | +# 検出されたプロジェクト名でセッション名を構築 |
| 31 | +PM_SESSION="${PROJECT_NAME}_PM" |
| 32 | +WORKER_SESSION="${PROJECT_NAME}_Workers1" |
| 33 | + |
11 | 34 | # ログファイル |
12 | 35 | LOG_FILE="$PROJECT_ROOT/Agent-shared/periodic_monitor.log" |
13 | 36 | PID_FILE="$PROJECT_ROOT/Agent-shared/periodic_monitor.pid" |
@@ -59,7 +82,8 @@ cleanup_existing_processes |
59 | 82 | # 新しいPIDを記録 |
60 | 83 | echo $$ > "$PID_FILE" |
61 | 84 |
|
62 | | -echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] Periodic monitor started (PID: $$)" >> "$LOG_FILE" |
| 85 | +echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] Periodic monitor started (PID: $$, Project: ${PROJECT_NAME})" >> "$LOG_FILE" |
| 86 | +echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] Monitoring sessions: ${PM_SESSION}, ${WORKER_SESSION}" >> "$LOG_FILE" |
63 | 87 | echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] Config: UPDATE_INTERVAL_SEC=${UPDATE_INTERVAL_SEC}s, MILESTONE_INTERVAL_MIN=${MILESTONE_INTERVAL_MIN}min, MAX_RUNTIME_MIN=${MAX_RUNTIME_MIN}min" >> "$LOG_FILE" |
64 | 88 |
|
65 | 89 | # Python実行コマンドを決定 |
@@ -129,9 +153,9 @@ START_EPOCH=$(date -d "$START_TIME" +%s 2>/dev/null || date -u +%s) |
129 | 153 | echo $BASHPID > "$CHILD_PID_FILE" |
130 | 154 |
|
131 | 155 | while true; do |
132 | | - # プロジェクト名を含むセッションの存在確認(より安全な方法) |
133 | | - if ! tmux list-panes -t Team1_PM 2>/dev/null | grep -q . && \ |
134 | | - ! tmux list-panes -t Team1_Workers1 2>/dev/null | grep -q .; then |
| 156 | + # プロジェクト名を含むセッションの存在確認(動的に検出) |
| 157 | + if ! tmux list-panes -t "$PM_SESSION" 2>/dev/null | grep -q . && \ |
| 158 | + ! tmux list-panes -t "$WORKER_SESSION" 2>/dev/null | grep -q .; then |
135 | 159 | # 該当プロジェクトのセッションが存在しない場合のみ終了 |
136 | 160 | exit 0 |
137 | 161 | fi |
@@ -182,10 +206,10 @@ LAST_MILESTONE=0 |
182 | 206 | MILESTONE_CHECK_INTERVAL=$((MILESTONE_INTERVAL_MIN * 60)) # 分を秒に変換 |
183 | 207 |
|
184 | 208 | while true; do |
185 | | - # プロジェクト名を含むセッションの存在確認(より安全な方法) |
186 | | - if ! tmux list-panes -t Team1_PM 2>/dev/null | grep -q . && \ |
187 | | - ! tmux list-panes -t Team1_Workers1 2>/dev/null | grep -q .; then |
188 | | - echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] No project tmux sessions found, exiting" >> "$LOG_FILE" |
| 209 | + # プロジェクト名を含むセッションの存在確認(動的に検出) |
| 210 | + if ! tmux list-panes -t "$PM_SESSION" 2>/dev/null | grep -q . && \ |
| 211 | + ! tmux list-panes -t "$WORKER_SESSION" 2>/dev/null | grep -q .; then |
| 212 | + echo "[$(date -u +"%Y-%m-%dT%H:%M:%SZ")] No project tmux sessions found (${PROJECT_NAME}), exiting" >> "$LOG_FILE" |
189 | 213 | cleanup_and_exit |
190 | 214 | fi |
191 | 215 |
|
|
0 commit comments