Tatsuki Makino wrote on 2023/07/10 11:13: > Kevin Oberman wrote on 2023/07/10 09:52: >> only completed 459 packages, a rate of 10 packages/hour and, if it >> continues at this rate, will not complete for about 40 days. Nt sure if > > The numbers in that area are meaningless :)
I made this statement because I had an idea for a long time. And I was also thinking about how I was going to implement it, but it could only be something like this email attachment :) I'm exhausted here. Someone please make something better than this :) It also serves as my memorandum of understanding, so it contains some odd garbage :) I don't know how anyone but me uses poudriere, but this returns text to the terminal that ran poudriere. What I thought after making and using this, The value is rather close to the result. Values are not exact and vary considerably. It is not much different from the estimate using the Pkg/Hour values... It does not seem to have a good effect, as it can only track values close to when the queue is as follows :) Originally I wanted the progress bar to be accurate... poudriere bulk -j ... -C lang/gcc12 x11-fonts/fontconfig x11-fonts/xorg-fonts Regards.
#! /bin/sh # # install: # pkg install textproc/jq # mkdir -p /usr/local/etc/poudriere.d/hooks/plugins/some-appropriate-name # mv thisfile /usr/local/etc/poudriere.d/hooks/plugins/some-appropriate-name/some-appropriate-name.sh # sh /usr/local/etc/poudriere.d/hooks/plugins/some-appropriate-name/some-appropriate-name.sh # # uninstall: # rm -r /usr/local/etc/poudriere.d/hooks/plugins/some-appropriate-name # find /usr/local/poudriere/data/logs/ -name .progress\* -print -delete # data_json=".data.json" file_pfx=".progress" CAT="/bin/cat" CP="/bin/cp" DATE="/bin/date" FIND="/usr/bin/find" INSTALL="/usr/bin/install" JQ="/usr/local/bin/jq" LOCKF="/usr/bin/lockf" LOGGER="/usr/bin/logger" MKTEMP="/usr/bin/mktemp" MV="/bin/mv" READLINK="/usr/bin/readlink" REALPATH="/bin/realpath" SH="/bin/sh" ARG0_BASE="${0##*/}" ARG0_DIR="${0%/*}" if [ "${ARG0_DIR}" = "${ARG0_BASE}" ] ; then ARG0_DIR=. fi if [ -L "${0}" ] ; then ARG0_READLINK="$("${READLINK}" -n -- "${0}")" fi single_instance_mutex () { local _lockfile _lockfile="/tmp/${0##*/}.lock" case "${XXX_LOCKF:-false}" in # ( false) XXX_LOCKF="true" LOCKF_PID="${$}" "${LOCKF}" -- "${_lockfile}" "${SH}" ${-:+"-${-}"} "${0}" ${1+"${@}"} exit 0 ;; # ( *) #"${LOGGER}" -p user.notice -t "${0}" -- ${1+"${@}"} ;; esac } single_instance_mutex ${1+"${@}"} install_hooks () { local f for f do if [ -e "${ARG0_DIR}/${f}.sh" ] ; then return 0 fi "${INSTALL}" -l rs -- "${0}" "${ARG0_DIR}/${f}.sh" done } check_variable () { : ${LOG?} #: ${POUDRIERE_DATA?} #: ${POUDRIERE_BUILD_TYPE?} #: ${MASTERNAME?} #log_path_jail="${POUDRIERE_DATA}/logs/${POUDRIERE_BUILD_TYPE}/${MASTERNAME}" log_path_jail="$("${REALPATH}" -q "${LOG}/..")" } case "${ARG0_BASE}" in # ( build_queue.sh) check_variable || return 0 case "${1}" in # ( start) if [ ! -f "${log_path_jail}/${file_pfx}.json" ] ; then if tmpfile="$("${MKTEMP}" "${log_path_jail}/${file_pfx}.json.XXXX")" ; then "${FIND}" "${log_path_jail}" -mindepth 2 -name .data.json\ -exec "${JQ}" -c -r ".ports.built?|[.[]?|{([.origin,if .flavor then .flavor else empty end]|join(\"@\")):(.elapsed|tonumber)}]|add|.//empty" {} + | "${JQ}" -c -r -s "add" > "${tmpfile}" "${MV}" -- "${tmpfile}" "${log_path_jail}/${file_pfx}.json" else echo "{}" > "${log_path_jail}/${file_pfx}.json" fi fi if tmpfile="$("${MKTEMP}" "${LOG}/${file_pfx}.json.XXXX")" ; then "${JQ}" -c -r ".ports.queued?|.[]?|([.origin,if .flavor then .flavor else empty end]|join(\"@\"))"\ "${LOG}/${data_json}" | while read origin do "${JQ}" -c -r ".[\"${origin}\"]|({\"${origin}\":.})"\ "${log_path_jail}/${file_pfx}.json" done | "${JQ}" -c -r -s "[{\"\":(.|add)},{\"length\":(.|length)},{\"known\":(.|add|with_entries(select(.value != null))|length)}]|add"\ > "${tmpfile}" "${CP}" -p -- "${tmpfile}" "${LOG}/${file_pfx}.json" "${JQ}" -c -r ".started|tonumber"\ "${LOG}/${data_json}" | while read started do "${JQ}" -c -r ".started=${started}"\ "${LOG}/${file_pfx}.json"\ > "${tmpfile}" done "${CP}" -p -- "${tmpfile}" "${LOG}/${file_pfx}.json" "${JQ}" -c -r ".total=(.[\"\"]|add)|.elapsedperpkg=(if .known == 0 then 1 else (.total/.known)|ceil end)|.remain=(.total+.elapsedperpkg*(.length-.known))|.done=0"\ "${LOG}/${file_pfx}.json"\ > "${tmpfile}" "${MV}" -- "${tmpfile}" "${LOG}/${file_pfx}.json" "${DATE}" -r "$( "${JQ}" -c -r ".started+.remain|ceil"\ "${LOG}/${file_pfx}.json" )" "+# Estimated completion time: %+" fi ;; # ( stop) if tmpfile="$("${MKTEMP}" "${log_path_jail}/${file_pfx}.json.XXXX")" ; then "${JQ}" -c -r ".ports.built?|[.[]?|{([.origin,if .flavor then .flavor else empty end]|join(\"@\")):(.elapsed|tonumber)}]|add|.//empty" "${LOG}/${data_json}" | "${CAT}" "${log_path_jail}/${file_pfx}.json" - | "${JQ}" -c -r -s "add" > "${tmpfile}" "${MV}" -- "${tmpfile}" "${log_path_jail}/${file_pfx}.json" fi ;; # ( *) ;; esac ;; # ( pkgbuild.sh) check_variable || return 0 origin="${2}" # flavor not included pkgname="${3}" date_now="$("${DATE}" +%s)" # not reflected in .data.json here, except for queued. flavor="$( "${JQ}" -c -r ".ports.queued[]|select(.pkgname==\"${pkgname}\")|.flavor"\ "${LOG}/${data_json}" )" if [ "${flavor}" != "null" ] ; then origin="${origin}${flavor:+@${flavor}}" fi case "${1}" in # ( success|failed|skipped|ignored) if tmpfile="$("${MKTEMP}" "${LOG}/${file_pfx}.json.XXXX")" ; then "${JQ}" -c -r ".[\"\"][\"${origin}\"]"\ "${LOG}/${file_pfx}.json" | while read elapsed do if [ "${elapsed}" = "null" ] ; then "${JQ}" -c -r ".done+=.elapsedperpkg"\ "${LOG}/${file_pfx}.json"\ > "${tmpfile}" else "${JQ}" -c -r ".done+=${elapsed}"\ "${LOG}/${file_pfx}.json"\ > "${tmpfile}" fi done "${MV}" -- "${tmpfile}" "${LOG}/${file_pfx}.json" "${DATE}" -r "$( "${JQ}" -c -r "((.remain/.done)-1)*(${date_now}-.started)|.+${date_now}|ceil"\ "${LOG}/${file_pfx}.json" )" "+# Estimated completion time: %+" fi ;; # ( *) ;; esac ;; # ( *) if [ -z "${ARG0_READLINK:-}" ] ; then install_hooks build_queue pkgbuild || echo "install hooks failed" else return 0 fi ;; esac return 0 # poudriere will be difficult to restore if it is non-zero :)