#!/bin/sh #-T timestamp #-a action #-t target #-i insert, otherwise search op=search action= json=0 verbose=0 pkgfile=${ZPMDB:-/var/lib/zpm/local.db} order=asc while getopts f:t:a:T:ijvr opt; do case $opt in f) pkgfile="$OPTARG" ;; t) target="$OPTARG" ;; a) action="$OPTARG" ;; T) timestamp="$OPTARG" ;; i) op=insert ;; j) json=1 ;; v) verbose=1 ;; r) order=desc ;; *) printf '%s unknown option %s\n' "$0" "$opt" ; exit 1 ;; esac done shift $((OPTIND - 1)) if [ $op = 'insert' ]; then { cols='action,target,info'; if [ -n "$timestamp" ]; then cols='ts,action,target,info' fi printf "insert into zpmlog (%s)\n" $cols printf 'values('; if [ -n "$timestamp" ]; then printf "'%s', " "$timestamp" fi if [ -n "$action" ]; then printf "'%s', " "$action" else printf 'NULL,' fi if [ -n "$target" ]; then printf "'%s', " "$target" else printf 'NULL,' fi printf "'%s')" "$*" printf ';\n' } | zpm shell $pkgfile if [ $verbose -ne 0 ]; then printf "%s %s %s\n" "$action" "$target" "$*" 1>&2 fi fi cols='ts,target,action,info' if [ $op = 'search' ]; then if [ $json -eq 1 ]; then cols="json_group_array(json_object('ts',ts,'target',target,'action',action,'info',info))" fi { printf ".separator ' '\n" printf 'select %s from zpmlog where\n' "$cols"; if [ -n "$timestamp" ]; then printf "ts >= '%s' and " "$timestamp" fi if [ -n "$action" ]; then printf "action like '%s' and " "$action" fi if [ -n "$target" ]; then printf "target like '%s' and " "$target" fi printf "true order by ts $order;\n" } | zpm shell $pkgfile fi