- 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 技能的日誌頁週次。
76 lines
2.2 KiB
Bash
Executable File
76 lines
2.2 KiB
Bash
Executable File
#!/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
|