Files
log/tools/worklog-target.sh
jiantw83 1bec87b047 feat(tools): 報表彙總與工作週週五都交給腳本算
- What:新增 tools/log-aggregate.sh,把日誌頁彙總成報表數字;
  tools/worklog-target.sh 新增 friday 子命令,印出該工作週的週五。
- Why:彙總與日期原本只寫在技能散文裡,每次跑都靠模型自己數。
  四個條目只有一個填了花費時間時,模型容易把它攤到每一筆,得出一個沒人做過的工時。
  週五同理,跨月、跨年那一週用手算就會差一天。規則寫進程式,每次跑才會一樣。
- How:log-aggregate.sh 讀日誌條目的固定版型,依條目標題的日期取範圍內的條目,
  印出條目數、存取庫、花費時間、各 CLI 的 token 用量與狀態計數。
  「無資料不估算」寫死在程式裡:沒填時間的條目不進總和,只進 ELAPSED_MISSING;
  整段期間都沒有時間就印「無資料」,不印 0,因為 0 會被讀成「花了 0 分鐘」。
  friday 的週界向 report-range.sh weekly 取得,這裡只做「週一加四天」,不自己定義週的起點。
- Who:report 技能的數字彙總,worklog 技能的日誌頁週次。
2026-08-31 11:07:16 +08:00

76 lines
2.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env sh
# worklog-target.sh: 由已算好的 hash 組出 worklog wiki 目標頁名稱,並算出工作週的週五。
# hash 一律由 jsc-gitea/tools/hash-id 算出後傳入,本腳本不再自行計算 SHA-1。
# 用法:
# worklog-target.sh <hash> [page|contents|all]
# worklog-target.sh friday [基準日期 yyyy-MM-dd]
#
# friday 印出一行 yyyy-MM-dd:基準日期所在工作週的週五(基準日期省略時用今天)。
# 週界不在這裡算,一律問 report-range.sh weekly——週一起算的 ISO 週定義只有那一支說了算,
# 兩邊各算一次就會在跨月、跨年的那一週各走各的。這裡只做「週一加四天」這一步。
#
# 結束碼: 0=成功 2=用法錯誤 4=系統的 date 不支援日期運算(由 report-range.sh 判定)
set -eu
HERE=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
usage() {
cat >&2 <<'EOF'
用法:
worklog-target.sh <hash> [page|contents|all] 組出 LOG_{HASH} 與 LOG_CONTENTS
worklog-target.sh friday [yyyy-MM-dd] 印出該工作週的週五日期
結束碼: 0=成功 2=用法錯誤 4=系統的 date 不支援日期運算
EOF
exit 2
}
add_days() { # $1=yyyy-MM-dd $2=要加的天數
if date -d "$1 +$2 days" +%Y-%m-%d >/dev/null 2>&1; then
date -d "$1 +$2 days" +%Y-%m-%d
return 0
fi
if date -j -f %Y-%m-%d -v"+$2d" "$1" +%Y-%m-%d >/dev/null 2>&1; then
date -j -f %Y-%m-%d -v"+$2d" "$1" +%Y-%m-%d
return 0
fi
echo "系統的 date 不支援日期運算,算不出工作週的週五" >&2
exit 4
}
[ "$#" -ge 1 ] || usage
[ "$#" -le 2 ] || usage
if [ "$1" = friday ]; then
base="${2:-}"
if [ -n "$base" ]; then
case "$base" in
[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]) ;;
*) echo "基準日期格式要是 yyyy-MM-dd:$base" >&2; exit 2 ;;
esac
fi
range=$(sh "$HERE/report-range.sh" weekly ${base:+"$base"}) || exit $?
monday=$(printf '%s\n' "$range" | cut -f1)
add_days "$monday" 4
exit 0
fi
hash=$1
field=${2:-page}
if [ -z "$hash" ]; then
usage
fi
page="LOG_${hash}"
contents='LOG_CONTENTS'
case "$field" in
page) printf '%s\n' "$page" ;;
contents) printf '%s\n' "$contents" ;;
all)
printf 'PAGE=%s\n' "$page"
printf 'CONTENTS=%s\n' "$contents"
;;
*) usage ;;
esac