On Sat, Nov 06, 2021 at 12:32:14AM +0100, richard lucassen wrote:

> > >     postqueue -j | jq -nr --argjson days $days '
> > >               ...
> 
> I have run the jq script for a week or so ($days = 5) and it works like
> a charm :-)

You're welcome.  Of course if the number of days will never vary in your
case, it would be simpler to just hard-code the number into the jq script:

     # postqueue -j | jq -nr '
               (now - 86400 * 5) as $too_old
             | inputs
             | select(.queue_name == "hold" and .arrival_time  < $too_old)
             | .queue_id
             | select(test("^\\w+$"))
         ' |
         postsuper -d - hold

Making it an external variable was intended to facilitate use via shell
functions that might take the day count as an option, and perhaps even
an optional list of queue names:

    old_qids() {
        local OPTARG OPTIND=0 days=5
        while getopts hd: opt
        do
            case $opt in
            h) echo "Usage: old_qids [-h] [-d <days>] [all | <queue> ...]" >&2
               return 1;;
            d) days=$OPTARG;;
            *) return 1;;
            esac
        done
        shift $(( OPTIND - 1 ))
        postqueue -j |
            jq -nr --argjson days "$days" '
              (now - 86400 * $days) as $too_old
            | $ARGS.positional as $qs
            | inputs
            | select(.arrival_time < $too_old)
            | first(select($qs == [] or {(.queue_name,"all"):true}[$qs[]]))
            | .queue_id
            | select(test("^\\w+$"))
        ' --args -- "$@"
    }

-- 
    Viktor.

Reply via email to