#!/bin/sh
#
# Helper to check network.mptcp metrics and emit code fragments for
# any missing ones
#

if [ ! -f pmda_linux.so ]
then
    echo "Error: pmda_linux.so missing ... need make?"
    exit 1
fi

tmp=/var/tmp/add-mptcp-$$
trap "rm -f $tmp.*; exit 0" 0 1 2 3 15

pminfo -L -K clear -K add,60,./pmda_linux.so,linux_init -v network.mptcp 2>&1 \
| sed -n >$tmp.need \
    -e '/MPTcpExt: unknown /{
s/"$//
s/.*"//
p
}'

if [ ! -s $tmp.need ]
then
    echo "All up to date."
    exit
fi

pminfo -L -K clear -K add,60,./pmda_linux.so,linux_init -m network.mptcp \
| sed \
    -e 's/.*\.//' \
| sort -nr \
| head -1 >$tmp.item

# biggest item so far ...
#
next_item=`cat $tmp.item`

# and next item ...
#
next_item=`expr $next_item + 1`

# pmns
#
echo "root_linux (pmns) ..."
item=$next_item
for fld in `cat $tmp.need`
do
    metric=`echo $fld | tr '[A-Z]' '[a-z]'`
    echo "    $metric	60:53:$item"
    item=`expr $item + 1`
done

# proc_net_netstat.h
#
echo
echo "proc_net_netstat.h ..."
for fld in `cat $tmp.need`
do
    macro=`echo $fld | tr '[a-z]' '[A-Z]'`
    echo "    _PM_NETSTAT_MPTCPEXT_$macro,"
done

# pmda.c
#
echo
echo "pmda.c ..."
item=$next_item
for fld in `cat $tmp.need`
do
    metric=`echo $fld | tr '[A-Z]' '[a-z]'`
    macro=`echo $fld | tr '[a-z]' '[A-Z]'`
    echo
    echo "/* network.mptcp.$metric */"
    echo "  { &_pm_proc_net_netstat.mptcp[_PM_NETSTAT_MPTCPEXT_$macro],"
    echo "    { PMDA_PMID(CLUSTER_NET_NETSTAT,$item), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,"
    echo "    PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } },"
    item=`expr $item + 1`
done

# proc_net_netstat.c
#
echo
echo "proc_net_netstat.c ..."
for fld in `cat $tmp.need`
do
    macro=`echo $fld | tr '[a-z]' '[A-Z]'`
    echo "    { .field = \"$fld\","
    echo "      .offset = &_pm_proc_net_netstat.mptcp[_PM_NETSTAT_MPTCPEXT_$macro] },"
done

# help text
#
echo
echo "help ..."
for fld in `cat $tmp.need`
do
    metric=network.mptcp.`echo $fld | tr '[A-Z]' '[a-z]'`
    echo "@ $metric the $fld field of the MPTcp line from /proc/net/netstat"
done

# qa/1805 data
#
echo
echo "../../../qa/linux/proc_net_netstat ..."
echo "MPTcpExt: ... `tr '\012' ' ' <$tmp.need`"
data=''
ord=`sed -n <../../../qa/linux/proc_net_netstat -e '/^MPTcpExt: 1 /s/.* //p'`
for fld in `cat $tmp.need`
do
    ord=`expr $ord + 1`
    data="$data $ord"
done
echo "MPTcpExt: ...$data"

echo
echo "and need to remake qa/1805"


