#!/bin/sh # # This file is part of darktable, # copyright (c) 2009--2010 johannes hanika. # # darktable is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # darktable is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with darktable. If not, see . # header=$(cat << EOF EOF ) rect=$(cat << EOF EOF ) text=$(cat << EOF REP_TEXT EOF ) footer=$(cat << EOF EOF ) # input file log=$1 # output file output="control.svg" # output file header echo "$header" > $output # collect thread ids: ids=$(grep -E "^\[run_job" $log | cut -f 2 -d ' ' | sort | uniq) # start time: start_time=$(grep -E "^\[run_job" $log | cut -f 3 -d ' ' | head -1 | sed "s/,/./g") # calculate the radical inverse in posix bc: def_ri=$(cat << EOF define ri(i) { auto val,digit,bit val=0 digit=0.5 while(i) { scale=0 bit = i%2 scale=20 val += digit * bit digit /= 2 scale=0 i /= 2 scale=20 } return val } EOF ) # make a new bar for every thread offset=0 for id in $ids do # get index to start sort (begin of time) len=${#id} start=$(awk -v a="$(head -1 $log)" -v b="$id" 'BEGIN{print index(a,b)}') offs=$(($len + $start)) # get sorted outputs by time (should already be sorted, in fact) numlines=$(cat $log | grep -E '^\[run_job.\] '$id | sort -n -k $offs | wc -l) for i in $(seq 0 2 $(($numlines-1))) do line1=$(cat $log | grep -E '^\[run_job.\] '$id | sort -n -k $offs | tail -$(($numlines - $i)) | head -1 | sed "s/,/./g") line2=$(cat $log | grep -E '^\[run_job.\] '$id | sort -n -k $offs | tail -$(($numlines - $i - 1)) | head -1 | sed "s/,/./g") # get two lines, assert +- and job description string descr=$(echo $line1 | cut -f 4- -d" ") on=$(echo $line1 | cut -f 3 -d" ") off=$(echo $line2 | cut -f 3 -d" ") x_on=$(echo "100 * ($on - $start_time)" | bc -l) x_wd=$(echo "100 * ($off - $start_time) - $x_on" | bc -l) y=$(($offset * 30)) ht=20 yt=$(($y+10)) # choose color by radical inverse of the image id, if 'image XXXX' is given imgid=$(awk -v a="$line1" -v b="image" 'BEGIN{print substr(a,index(a,b)+6,4)}' | grep -v -E '[^0-9]') if [ "$imgid" != "" ] then color=$(echo "$def_ri"'; inv=ri('$imgid'); scale=0; obase=16; inv*16777215' | bc -l | cut -f1 -d'.') else color="f7f7f7" fi # run rect and text through sed echo "$rect" | sed -e "s/REP_ID/$offset/g" -e "s/REP_X/$x_on/g" -e "s/REP_WIDTH/$x_wd/g" -e "s/REP_Y/$y/g" -e "s/REP_HEIGHT/$ht/g" -e "s/REP_COLOR/$color/g" >> $output echo "$text" | sed -e "s/REP_ID/$offset/g" -e "s/REP_X/$x_on/g" -e "s/REP_Y/$yt/g" -e "s/REP_TEXT/$descr/g" >> $output done offset=$((offset + 1)) done # output file footer echo "$footer" >> $output