feat: improve api logging and summary
This commit is contained in:
+28
-4
@@ -99,9 +99,17 @@ api_request() {
|
|||||||
|
|
||||||
API_RESPONSE_BODY="$(cat "${body_file}")"
|
API_RESPONSE_BODY="$(cat "${body_file}")"
|
||||||
API_RESPONSE_HEADERS="$(cat "${headers_file}")"
|
API_RESPONSE_HEADERS="$(cat "${headers_file}")"
|
||||||
|
API_STATUS_TEXT="$(head -n 1 "${headers_file}" | tr -d '\r' | cut -d' ' -f2-)"
|
||||||
|
API_REQUEST_ID="$(
|
||||||
|
grep -iE '^(x-gitea-request-id|x-request-id):' "${headers_file}" | tail -n 1 | cut -d':' -f2- | tr -d '\r' | sed 's/^ *//'
|
||||||
|
)" || true
|
||||||
rm -f "${body_file}" "${headers_file}"
|
rm -f "${body_file}" "${headers_file}"
|
||||||
|
|
||||||
log "${method} ${path} -> ${API_HTTP_CODE}"
|
if [[ -n "${API_REQUEST_ID}" ]]; then
|
||||||
|
log "${method} ${path} -> ${API_STATUS_TEXT} request_id=${API_REQUEST_ID}"
|
||||||
|
else
|
||||||
|
log "${method} ${path} -> ${API_STATUS_TEXT}"
|
||||||
|
fi
|
||||||
[[ "${API_HTTP_CODE}" =~ ^2 ]]
|
[[ "${API_HTTP_CODE}" =~ ^2 ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,6 +171,10 @@ collect_package_candidates() {
|
|||||||
package_name="$(jq -r '.[0].name' <<<"${group_json}")"
|
package_name="$(jq -r '.[0].name' <<<"${group_json}")"
|
||||||
total_versions="$(jq 'length' <<<"${group_json}")"
|
total_versions="$(jq 'length' <<<"${group_json}")"
|
||||||
|
|
||||||
|
PACKAGE_COUNT=$((PACKAGE_COUNT + 1))
|
||||||
|
TOTAL_VERSION_COUNT=$((TOTAL_VERSION_COUNT + total_versions))
|
||||||
|
|
||||||
|
log "Package ${package_name}: total_versions=${total_versions} keep_versions=${keep_versions}"
|
||||||
log "Package ${package_name} versions (oldest -> newest):"
|
log "Package ${package_name} versions (oldest -> newest):"
|
||||||
while IFS=$'\t' read -r version created_at; do
|
while IFS=$'\t' read -r version created_at; do
|
||||||
[[ -z "${version}" ]] && continue
|
[[ -z "${version}" ]] && continue
|
||||||
@@ -171,9 +183,11 @@ collect_package_candidates() {
|
|||||||
|
|
||||||
if (( total_versions <= keep_versions )); then
|
if (( total_versions <= keep_versions )); then
|
||||||
log " keep all ${total_versions} versions"
|
log " keep all ${total_versions} versions"
|
||||||
|
KEPT_COUNT=$((KEPT_COUNT + total_versions))
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
KEPT_COUNT=$((KEPT_COUNT + keep_versions))
|
||||||
candidates_json="$(
|
candidates_json="$(
|
||||||
jq -c --argjson keep "${keep_versions}" \
|
jq -c --argjson keep "${keep_versions}" \
|
||||||
'sort_by(.created_at) | .[0:(length - $keep)]' <<<"${group_json}"
|
'sort_by(.created_at) | .[0:(length - $keep)]' <<<"${group_json}"
|
||||||
@@ -183,6 +197,7 @@ collect_package_candidates() {
|
|||||||
[[ -z "${name}" ]] && continue
|
[[ -z "${name}" ]] && continue
|
||||||
log "Candidate to delete: package ${name} version ${version} (created: ${created_at})"
|
log "Candidate to delete: package ${name} version ${version} (created: ${created_at})"
|
||||||
printf '%s\t%s\t%s\n' "${name}" "${version}" "${created_at}" >> "${CANDIDATES_FILE}"
|
printf '%s\t%s\t%s\n' "${name}" "${version}" "${created_at}" >> "${CANDIDATES_FILE}"
|
||||||
|
CANDIDATE_COUNT=$((CANDIDATE_COUNT + 1))
|
||||||
done < <(jq -r '.[] | [.name, .version, .created_at] | @tsv' <<<"${candidates_json}")
|
done < <(jq -r '.[] | [.name, .version, .created_at] | @tsv' <<<"${candidates_json}")
|
||||||
done < <(jq -c 'group_by(.name)[]' <<<"${packages_json}")
|
done < <(jq -c 'group_by(.name)[]' <<<"${packages_json}")
|
||||||
}
|
}
|
||||||
@@ -196,6 +211,7 @@ process_candidates() {
|
|||||||
|
|
||||||
if [[ ! -s "${CANDIDATES_FILE}" ]]; then
|
if [[ ! -s "${CANDIDATES_FILE}" ]]; then
|
||||||
log "No delete candidates found"
|
log "No delete candidates found"
|
||||||
|
log "Summary: packages=${PACKAGE_COUNT} versions=${TOTAL_VERSION_COUNT} kept=${KEPT_COUNT} candidates=0 deleted=0 skipped=0 errors=0 dry_run=${dry_run}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -209,15 +225,19 @@ process_candidates() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if api_request DELETE "/api/v1/packages/${REPO_OWNER}/nuget/${name}/${version}"; then
|
if api_request DELETE "/api/v1/packages/${REPO_OWNER}/nuget/${name}/${version}"; then
|
||||||
log "Deleted package ${name} version ${version} -> ${API_HTTP_CODE}"
|
log "Deleted package ${name} version ${version} -> ${API_STATUS_TEXT}"
|
||||||
deleted_count=$((deleted_count + 1))
|
deleted_count=$((deleted_count + 1))
|
||||||
else
|
else
|
||||||
log "ERROR: DELETE package ${name} version ${version} -> ${API_HTTP_CODE}"
|
if [[ -n "${API_REQUEST_ID}" ]]; then
|
||||||
|
log "ERROR: DELETE package ${name} version ${version} -> ${API_STATUS_TEXT} request_id=${API_REQUEST_ID}"
|
||||||
|
else
|
||||||
|
log "ERROR: DELETE package ${name} version ${version} -> ${API_STATUS_TEXT}"
|
||||||
|
fi
|
||||||
error_count=$((error_count + 1))
|
error_count=$((error_count + 1))
|
||||||
fi
|
fi
|
||||||
done < "${CANDIDATES_FILE}"
|
done < "${CANDIDATES_FILE}"
|
||||||
|
|
||||||
log "Summary: deleted=${deleted_count} kept=${keep_versions} candidates=$(wc -l < "${CANDIDATES_FILE}") skipped=${skipped_count} errors=${error_count} dry_run=${dry_run}"
|
log "Summary: packages=${PACKAGE_COUNT} versions=${TOTAL_VERSION_COUNT} kept=${KEPT_COUNT} candidates=${CANDIDATE_COUNT} deleted=${deleted_count} skipped=${skipped_count} errors=${error_count} dry_run=${dry_run}"
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
@@ -240,6 +260,10 @@ main() {
|
|||||||
|
|
||||||
CANDIDATES_FILE="$(mktemp)"
|
CANDIDATES_FILE="$(mktemp)"
|
||||||
export CANDIDATES_FILE
|
export CANDIDATES_FILE
|
||||||
|
PACKAGE_COUNT=0
|
||||||
|
TOTAL_VERSION_COUNT=0
|
||||||
|
KEPT_COUNT=0
|
||||||
|
CANDIDATE_COUNT=0
|
||||||
trap 'rm -f "${CANDIDATES_FILE}"' EXIT
|
trap 'rm -f "${CANDIDATES_FILE}"' EXIT
|
||||||
|
|
||||||
collect_package_candidates
|
collect_package_candidates
|
||||||
|
|||||||
Reference in New Issue
Block a user