# next 3 lines configured by make dsastats
if [ ! -r $logfile ]; then
echo "No such file <$logfile>" >&2
echo "$LOCALORG" |
tr "A-Z" "a-z" >/tmp
/dsastats$$.localorg
# try and sort out the format of the time into something a bit nicer
monthno = substr($0, 1, 2) + 0
printf("%s on %02d %s", time, dayno, montharray[monthno])
echo $logfile |
grep -s ".usage"
dsaname
=`basename $logfile .usage`
dsaname
=` grep mydsa $TAILORFILE | \
awk -F@ '{split($NF,parts, "=")
print parts[2] }' |sed 's/"//g'`
starttime
=`head -1 $logfile | nicetime`
endtime
=`tail -1 $logfile | nicetime`
echo "fordsa $dsaname" >/tmp
/dsastats$$
.2
echo "starts $starttime" >>/tmp
/dsastats$$
.2
echo "ends $endtime" >>/tmp
/dsastats$$
.2
sed 's/[^)]*) //' < $logfile |
awk ' BEGIN {
/^(Add|Read|List|Modify|Modifyrdn|Remove|Search|Compare|Getedb) \(.*/ {
if (op[1] != "DSA control")
saveline = "DSAControl " lastassoc ": " $(NF-1) " " $(NF)
cat $ETCDIR/quipulocaladds
/tmp
/dsastats$$
.1 |
awk '
if (substr($0, 1, 1) == "#")
locadd[no_localadds] = $0
conn [$2 "#" 1] = conn[$2 "#" 1] " " $0
/^(Add|Read|List|Modify|Modifyrdn|Remove|Search|Compare|Getedb|DSAControl) \(.*/ {
conn [opid "#" conn_op[opid]] = $1 " ROOT"
conn [opid "#" conn_op[opid]] = $1 oper[2]
if (conn[$2 "#" 0] == "")
print "\tChained " chain[$2] " operation"
print "\tChained " chain[$2] " operations"
print conntype[$2] " " conn[$2 "#" 1]
for ( i=2; i<= conn_op[$2]; i++)
print "\tChained " chain[j] " operation"
print "\tChained " chain[j] " operations"
print conntype[j] " " conn[j "#" 1]
for (i = 2; i <= conn_op[j]; i++)
conn [opid "#" 0] = "from" oper[2]
conn [opid "#" 1] = "DAP"
conntype [opid] = "remote"
thisadd = substr($0, y+1)
for (z =1 ; z <= no_localadds; z++)
if (substr(thisadd, 2, length(locadd[z])) == locadd[z])
conntype [opid] = "local"
conn [opid "#" 0] = "Quipu DSP from" oper[2]
conn [opid "#" 1] = "QuipuDSP"
conntype [opid] = "remote"
thisadd = substr($0, y+1)
for (z =1 ; z <= no_localadds; z++)
if (substr(thisadd, 2, length(locadd[z])) == locadd[z])
conntype [opid] = "local"
conn [opid "#" 0] = "from" oper[2]
conn [opid "#" 1] = "DSP"
conntype [opid] = "remote"
thisadd = substr($0, y+1)
for (z =1 ; z <= no_localadds; z++)
if (substr(thisadd, 2, length(locadd[z])) == locadd[z])
conntype [opid] = "local"
conn [lastcn "#" conn_op[lastcn]] = conn [lastcn "#" conn_op[lastcn]] "\n\tDAP Originator: " dn[2]
conn [lastcn "#" conn_op[lastcn]] = conn [lastcn "#" conn_op[lastcn]] "\n\tDAP Originator: anonymous"
for (i=1; i< nextdsa; i++)
printf " %-30s: tried %s", dsadn[i], try[i]
print ", failed " fail[i]
cat /tmp
/dsastats$$.localorg
$ETCDIR/quiputechusers
/tmp
/dsastats$$
.2 |
tr "A-Z" "a-z" |
awk '
if (substr($0, 1, 1) == "#")
userorgnames["dummy"] = 0
realaccessed["dummy"] = 0
dsaname = substr($0, 8, length($0)-8+1)
starttime = substr($0, 8, 40)
endtime = substr($0, 8, 40)
# add any originators from last DSP connection examined to usernames array
if (gotdspbind == "TRUE")
for (origuser in originators)
if (originators[origuser] != 0)
if (origuser == "anonymous")
originators[origuser] = 0
if (substr($0, 1, 6) == "remote")
/.* bind.*\(anonymous\).*/ {
if (substr($0, 1, 6) == "remote")
/.* bind.*\(no auth\).*/ {
if (substr($0, 1, 6) == "remote")
/.* bind.*\(simple\).*/ {
if (substr($0, 1, 6) == "remote")
/ bind.*\(no auth\)| bind.*\(simple\)/ {
username = substr($0, n+2)
# username = substr($0, n+3)
# if (username != "anonymous")
# originators[username]++
/^ read|^ list|^ search|^ modify|^ add/ {
n = split(opDN, RDNparts, "@")
if (substr(RDNparts[n], 1, 2) == "cn")
if (($1 == "read") && (n < 3)) #reading a DSA entry
for (i = 2; i < n-1; i++)
opDN = opDN "@" RDNparts[i]
# was this a system or real use?
if (gotdspbind == "TRUE")
origname = substr($0, n+3)
if (origname == username)
for (techperson in techies)
if (techperson == origname)
# pick up any last dsp originators
if (gotdspbind == "TRUE")
for (origuser in originators)
if (originators[origuser] != 0)
if (origuser == "anonymous")
originators[origuser] = 0
printf "Summary of calls to DSA <%s>\nFrom %s to %s\n\n", dsaname, \
printf "%-30s%8s%8s\n\n", "No. of binds", "local", "remote"
printf "%-20s%10s%8d%8d\n", "Anonymous", "", localanon, remoteanon
printf "%-20s%10s%8d%8d\n", "Unauth name DAP", "", localnoauthdap, remotenoauthdap
printf "%-20s%10s%8d%8d\n", "Unauth name DSP", "",localnoauthdsp, remotenoauthdsp
printf "%-20s%10s%8d%8d\n", "Simple", "", localsimple, remotesimple
#print "have this list of users"
# print user " " usernames[user]
for (techperson in techies)
techbinds += usernames[user]
n = split(user, RDNparts, "@")
userorg = RDNparts[1] ", " RDNparts[2]
for (org in userorgnames)
userorgbinds[userorg] += usernames[user]
printf "\nSystem usage (calls received)\n\n"
printf "%-38s%8d\n", "Binds by Directory technicians", techbinds
printf "%-38s%8d\n", "Reads of DSA entries", dsaread
printf "%-38s%8d\n", "Getedb operations", getedb
printf "%-38s%8d\n", "Spot shadows", spotshadows
printf "\nWho has used the directory?\n"
printf "*Real* usage by organisation\n"
printf "%9s%10s\n", "No. users", "No. binds"
for (name in userorgnames)
if (userorgnames[name] != 0)
printf "%9d%10d %s\n", userorgnames[name], userorgbinds[name], name
printf "\nWhich parts of the Directory have been accessed - real usage?\n"
printf "%s %s\n", "No. ops", "Subtree"
if (realaccessed[localorg] != 0)
printf "%7d %s\n", realaccessed[localorg], localorg
realaccessed[localorg] = 0
if ((realaccessed[dn] != 0) && \
(substr(dn, 1, length(localorg)) == localorg))
if (sortarray[j+1] < sortarray[j])
sortarray[j] = sortarray[j+1]
printf "%7d %s\n", realaccessed[sortarray[i]], sortarray[i]
realaccessed[sortarray[i]] = 0
printf "\nOther parts of the DIT\n"
if (realaccessed[dn] != 0)
n = split(dn, RDNparts, "@")
if (substr(RDNparts[1], 1, 2) == "c=")
otherditaccess[dn] += realaccessed[dn]
else if (substr(RDNparts[2], 1, 2) == "o=")
otherditaccess[RDNparts[1] "@" RDNparts[2]] += realaccessed[dn]
printf "%7d %s\n", otherditaccess["root"], "root"
otherditaccess["root"] = 0
for (dn in otherditaccess)
if (otherditaccess[dn] != 0)
if (sortarray[j+1] < sortarray[j])
sortarray[j] = sortarray[j+1]
printf "%7d %s\n", otherditaccess[sortarray[i]], sortarray[i]
otherditaccess[sortarray[i]] = 0
printf "\n\nWhich parts of the Directory have been accessed - system usage?\n"
printf "%s %s\n", "No. ops", "Subtree"
if (sysaccessed[localorg] != 0)
printf "%7d %s\n", sysaccessed[localorg], localorg
sysaccessed[localorg] = 0
if ((sysaccessed[dn] != 0) && \
(substr(dn, 1, length(localorg)) == localorg))
if (sortarray[j+1] < sortarray[j])
sortarray[j] = sortarray[j+1]
printf "%7d %s\n", sysaccessed[sortarray[i]], sortarray[i]
sysaccessed[sortarray[i]] = 0
printf "\nOther parts of the DIT\n"
if (sysaccessed[dn] != 0)
n = split(dn, RDNparts, "@")
otherditaccess[dn] += sysaccessed[dn]
otherditaccess[RDNparts[1] "@" RDNparts[2]] += sysaccessed[dn]
if (otherditaccess["root"] != 0)
printf "%7d %s\n", otherditaccess["root"], "root"
otherditaccess["root"] = 0
for (dn in otherditaccess)
if (otherditaccess[dn] != 0)
if (sortarray[j+1] < sortarray[j])
sortarray[j] = sortarray[j+1]
printf "%7d %s\n", otherditaccess[sortarray[i]], sortarray[i]
otherditaccess[sortarray[i]] = 0
rm -f /tmp
/dsastats$$
.1 /tmp
/dsastats$$
.2 /tmp
/dsastats$$.localorg