
___x_cmd_worker_ls(){

    local fmt=tsv
    local ns="x-worker-default"

    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)      ___x_cmd help -m worker ls "$@" ; return 0 ;;
            --ns)           ns="$2" ; arg:2:shift ;;
            --json|--yml|--tsv)
                            fmt="${1#--}" ; shift ;;
            *)              break ;;
        esac
    done

    local dir="$___X_CMD_ROOT_DATA/worker/$ns"
    [ -d "$dir" ] || return 0
    ___x_cmd_worker_ls_"$fmt"
}

___x_cmd_worker_ls_tsv(){
    local x_
    ___x_cmd fsiter --dir_ "$dir"

    local runnerfile_pid

    local process_id=""
    local fingerprint=""
    local stime=""
    local state=""

    while read -r name; do
        runnerfile_pid="$dir/$name/_PIDFILE"
        [ -f "$runnerfile_pid" ] || continue

        {
            read -r process_id
            read -r fingerprint
            read -r stime
        } < "$runnerfile_pid"

        state="ongoing"
        ___x_cmd ps fingerprint check "$process_id" "$fingerprint" || state="done"

        printf "%s\t" "${name#runner.}" "$process_id" "$fingerprint" "$stime"
        printf "%s\n" "$state"
    done <<A
$x_
A
}
