Compare commits
4 Commits
a18948df98
...
fix/issue-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa8b8467ee | ||
|
|
51ec844365 | ||
|
|
ab06046273 | ||
|
|
798bee0f79 |
@@ -1,6 +1,40 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
source "$SCRIPT_DIR/kugetsu-config.sh"
|
||||||
|
|
||||||
|
log() {
|
||||||
|
local level="${1:-}"
|
||||||
|
local component="${2:-}"
|
||||||
|
local message="${3:-}"
|
||||||
|
local timestamp
|
||||||
|
timestamp=$(date -Iseconds)
|
||||||
|
|
||||||
|
case "$level" in
|
||||||
|
info|warn|error|debug) ;;
|
||||||
|
*)
|
||||||
|
echo "Error: log level must be info|warn|error|debug" >&2
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$message" ]; then
|
||||||
|
message="$component"
|
||||||
|
component="${level}"
|
||||||
|
level="info"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local masked
|
||||||
|
masked=$(mask_sensitive_vars "$message")
|
||||||
|
echo "[$timestamp] $level $component $masked"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_debug() { log "debug" "$1" "${2:-}"; }
|
||||||
|
log_info() { log "info" "$1" "${2:-}"; }
|
||||||
|
log_warn() { log "warn" "$1" "${2:-}"; }
|
||||||
|
log_error() { log "error" "$1" "${2:-}"; }
|
||||||
|
|
||||||
cmd_logs() {
|
cmd_logs() {
|
||||||
local count="${1:-10}"
|
local count="${1:-10}"
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,31 @@ check_task_completion() {
|
|||||||
local session_id=$(python3 -c "import json; print(json.load(open('$item')).get('opencode_session_id', ''))" 2>/dev/null)
|
local session_id=$(python3 -c "import json; print(json.load(open('$item')).get('opencode_session_id', ''))" 2>/dev/null)
|
||||||
local issue_ref=$(python3 -c "import json; print(json.load(open('$item')).get('issue_ref', ''))" 2>/dev/null)
|
local issue_ref=$(python3 -c "import json; print(json.load(open('$item')).get('issue_ref', ''))" 2>/dev/null)
|
||||||
local pid=$(python3 -c "import json; print(json.load(open('$item')).get('pid', ''))" 2>/dev/null)
|
local pid=$(python3 -c "import json; print(json.load(open('$item')).get('pid', ''))" 2>/dev/null)
|
||||||
|
local notified_at=$(python3 -c "import json; print(json.load(open('$item')).get('notified_at', ''))" 2>/dev/null)
|
||||||
|
|
||||||
|
local timed_out=false
|
||||||
|
if [ -n "$notified_at" ]; then
|
||||||
|
local notified_epoch=$(date -d "$notified_at" +%s 2>/dev/null || echo "0")
|
||||||
|
local now_epoch=$(date +%s)
|
||||||
|
local hours_elapsed=$(( (now_epoch - notified_epoch) / 3600 ))
|
||||||
|
if [ "$hours_elapsed" -ge "${TASK_TIMEOUT_HOURS:-1}" ]; then
|
||||||
|
timed_out=true
|
||||||
|
log_warn "queue-daemon" "Task $queue_id ($issue_ref) timed out after ${hours_elapsed}h"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$timed_out" = true ]; then
|
||||||
|
if [ -n "$pid" ] && [ "$pid" != "None" ]; then
|
||||||
|
kill "$pid" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
if [ -n "$session_id" ]; then
|
||||||
|
opencode session stop "$session_id" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
update_queue_item_state "$queue_id" "error"
|
||||||
|
log_error "queue-daemon" "Task $queue_id ($issue_ref) marked error — timeout after ${hours_elapsed}h"
|
||||||
|
release_lock "$issue_ref"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$pid" ] && [ "$pid" != "None" ]; then
|
if [ -n "$pid" ] && [ "$pid" != "None" ]; then
|
||||||
if ! kill -0 "$pid" 2>/dev/null; then
|
if ! kill -0 "$pid" 2>/dev/null; then
|
||||||
|
|||||||
Reference in New Issue
Block a user