#!/usr/bin/env fish

function pvc-usage --description "Show Longhorn PVC usage mapped to namespace/name"
  begin
    kubectl -n longhorn-system get volumes.longhorn.io -o json \
    | jq -r '.items[] | "\(.metadata.name)\t\(.status.actualSize)\t\(.spec.size)"' \
    | sed 's/^/V\t/'

    kubectl get pvc -A -o json \
    | jq -r '.items[] | "\(.spec.volumeName)\t\(.metadata.namespace)/\(.metadata.name)"' \
    | sed 's/^/P\t/'
  end \
  | awk 'BEGIN{FS="\t"}
    $1=="V"{vol=$2; vu[vol]=$3; vs[vol]=$4}
    $1=="P"{vol=$2; name=$3; map[vol]=name}
    END{
      for (v in vu){
        used=vu[v]+0; size=vs[v]+0; pct=(size>0?used/size*100:0);
        cmd="numfmt --to=iec --suffix=B " used; cmd|getline hu; close(cmd);
        cmd="numfmt --to=iec --suffix=B " size; cmd|getline hs; close(cmd);
        n=(v in map?map[v]:v);
        printf "%-40s %-10s / %-10s (%5.1f%%)\n", n, hu, hs, pct
      }
    }' | sort
end
