Diagnostics: Fixes some issues and improves scripts

This commit is contained in:
Amin Ben Ramdhane 2022-08-24 14:15:17 +01:00
parent 95a9418e04
commit ace24d82fc
7 changed files with 58 additions and 48 deletions

View file

@ -78,6 +78,16 @@ void init_diagnostics_operation(char *sec_name, char *operation_path)
dmcmd("/bin/sh", 2, operation_path, "stop");
}
void remove_unused_diagnostic_sections(char *sec_name)
{
struct uci_section *s = NULL, *stmp = NULL;
check_create_dmmap_package(DMMAP_DIAGNOSTIGS);
uci_path_foreach_sections_safe(bbfdm, DMMAP_DIAGNOSTIGS, sec_name, stmp, s) {
dmuci_delete_by_section_bbfdm(s, NULL, NULL);
}
}
void set_diagnostics_interface_option(struct dmctx *ctx, char *sec_name, char *value)
{
char *linker = NULL;

View file

@ -63,6 +63,7 @@ char *get_diagnostics_option_fallback_def(char *sec_name, char *option, char *de
void set_diagnostics_option(char *sec_name, char *option, char *value);
void reset_diagnostic_state(char *sec_name);
void init_diagnostics_operation(char *sec_name, char *operation_path);
void remove_unused_diagnostic_sections(char *sec_name);
void set_diagnostics_interface_option(struct dmctx *ctx, char *sec_name, char *value);
int start_upload_download_diagnostic(int diagnostic_type);
int bbf_upload_log(const char *url, const char *username, const char *password,

View file

@ -1847,8 +1847,8 @@ static int operate_IPDiagnostics_TraceRoute(char *refparam, struct dmctx *ctx, v
char *route_hops_errorcode = NULL;
int i = 1;
init_diagnostics_operation("RouteHops", TRACEROUTE_PATH);
init_diagnostics_operation("traceroute", TRACEROUTE_PATH);
remove_unused_diagnostic_sections("RouteHops");
char *host = dmjson_get_value((json_object *)value, 1, "Host");
if (host[0] == '\0')

View file

@ -771,8 +771,8 @@ static int operate_DNSDiagnostics_NSLookupDiagnostics(char *refparam, struct dmc
char *nslookup_response_time[2] = {0};
int i = 1;
init_diagnostics_operation("NSLookupResult", NSLOOKUP_PATH);
init_diagnostics_operation("nslookup", NSLOOKUP_PATH);
remove_unused_diagnostic_sections("NSLookupResult");
char *hostname = dmjson_get_value((json_object *)value, 1, "HostName");
if (hostname[0] == '\0')

View file

@ -18,54 +18,49 @@ nslookup_launch() {
[ -e "${LOG_FILE}" ] && rm ${LOG_FILE}
while [ $i -lt "$cnt" ]; do
i=$((i+1))
time1=$(date +%s)
if [ -z "$dnsserver" ]; then
nslookup "$hostname" >>${LOG_FILE} 2>&1
else
nslookup "$hostname" "$dnsserver" >>${LOG_FILE} 2>&1
fi
time2=$(date +%s)
timeresponse=$(($(($time2-$time1))*1000))
echo "ResponseTime: $timeresponse" >>${LOG_FILE}
nslookup -debug $hostname $dnsserver >>${LOG_FILE} 2>&1
error_code="$?"
nxd=$(cat ${LOG_FILE} | grep "NXDOMAIN")
[ -n "$nxd" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.nslookup.DiagnosticState=Error_DNSServerNotResolved; $UCI_COMMIT_BBF_DMMAP; return; }
[ "$error_code" != "0" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.nslookup.DiagnosticState=Error_Other; $UCI_COMMIT_BBF_DMMAP; return; }
echo "++++++++++++++++++++++++++++++" >>${LOG_FILE}
done
while IFS= read line; do
[ -z "$line" ] && continue;
server=$(echo "$line" | tr -d '\t' | tr -d ' ' | grep "Server:" | awk -F':' '{print $2}')
[ -z "$line" ] && continue;
server=$(echo "$line" | tr -d '\t' | tr -d ' ' | grep "Server:" | awk -F':' '{print $2}')
if [ -n "$server" ] && [ "$server" = "0.0.0.0" ]; then
status="Error_DNSServerNotAvailable"
continue
elif [ -n "$server" ]; then
dns_server_ip=$server
continue
fi
if [ -n "$server" ] && [ "$server" = "0.0.0.0" ]; then
status="Error_DNSServerNotAvailable"
continue
elif [ -n "$server" ]; then
dns_server_ip=$server
continue
fi
var=$(echo "$line" | tr -d '\t' | tr -d ' ' | grep "Name:" | awk -F':' '{print $2}')
[ -n "$var" ] && { HostNameReturned=$var; status="Success"; AnswerType="Authoritative"; success_count=$((success_count+1)); continue; }
var=$(echo "$line" | grep "Address: " | awk -F':' '{print substr($0, index($0,$2))}' | tr -d '\t' | tr -d ' ')
[ -n "$var" ] && { [ -z "$address" ] && address="$var" || address="$address,$var"; continue; }
var=$(echo "$line" | grep "completed" | awk -F'in' '{print $2}' | tr -d 'ms:\t ')
[ -n "$var" ] && { ResponseTime=$var; continue; }
var=$(echo "$line" | tr -d '\t' | tr -d ' ' | grep "Name:" | awk -F':' '{print $2}')
[ -n "$var" ] && { HostNameReturned=$var; status="Success"; AnswerType="Authoritative"; success_count=$((success_count+1)); continue; }
var=$(echo "$line" | grep "Address: " | awk -F':' '{print substr($0, index($0,$2))}' | tr -d '\t' | tr -d ' ')
[ -n "$var" ] && { [ -z "$address" ] && address="$var" || address="$address,$var"; continue; }
var=$(echo "$line" | tr -d '\t' | tr -d ' ' | grep "ResponseTime:" | awk -F':' '{print $2}')
[ -n "$var" ] && { ResponseTime=$var; continue; }
echo "$line" | grep 'Can' >/dev/null 2>&1 && { continue; }
echo "$line" | grep 'connection timed out' >/dev/null 2>&1 && { AnswerType="None"; status="Error_Timeout"; continue; }
echo "$line" | grep 'Non-authoritative' >/dev/null 2>&1 && { AnswerType="NonAuthoritative"; continue; }
if echo "$line" | grep '++++++++++++++++++++++' >/dev/null 2>&1; then
$UCI_ADD_BBF_DMMAP dmmap_diagnostics NSLookupResult
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].Status="$status"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].AnswerType="$AnswerType"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].HostNameReturned="$HostNameReturned"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].IPAddresses="$address"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].DNSServerIP="$dns_server_ip"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].ResponseTime="$ResponseTime"
j=$((j+1))
address=""
fi
echo "$line" | grep 'connection timed out' >/dev/null 2>&1 && { AnswerType="None"; status="Error_Timeout"; continue; }
echo "$line" | grep 'Non-authoritative' >/dev/null 2>&1 && { AnswerType="NonAuthoritative"; continue; }
if echo "$line" | grep '++++++++++++++++++++++' >/dev/null 2>&1; then
$UCI_ADD_BBF_DMMAP dmmap_diagnostics NSLookupResult
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].Status="$status"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].AnswerType="$AnswerType"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].HostNameReturned="$HostNameReturned"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].IPAddresses="$address"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].DNSServerIP="$dns_server_ip"
$UCI_SET_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[$j].ResponseTime="$ResponseTime"
j=$((j+1))
address=""
fi
done <${LOG_FILE}
rm -f ${LOG_FILE}
$UCI_SET_BBF_DMMAP dmmap_diagnostics.nslookup.SuccessCount=$success_count

View file

@ -33,11 +33,11 @@ serverselection_launch() {
i=$((i+1))
res=$(ping -q $proto -c 1 -W $timeout $device $host 2>&1)
ba=$(echo "$res" | grep "bad address")
[ -n "$ba" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.serverselection.DiagnosticState=Error_CannotResolveHostName; $UCI_COMMIT_BBF_DMMAP; break; }
[ -n "$ba" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.serverselection.DiagnosticState=Error_CannotResolveHostName; $UCI_COMMIT_BBF_DMMAP; return; }
ba=$(echo "$res" | grep "unknown host")
[ -n "$ba" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.serverselection.DiagnosticState=Error_CannotResolveHostName; $UCI_COMMIT_BBF_DMMAP; break; }
[ -n "$ba" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.serverselection.DiagnosticState=Error_CannotResolveHostName; $UCI_COMMIT_BBF_DMMAP; return; }
stc=$(echo "$res" | grep "received")
[ -z "$stc" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.serverselection.DiagnosticState=Error_Other; $UCI_COMMIT_BBF_DMMAP; break; }
[ -z "$stc" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.serverselection.DiagnosticState=Error_Other; $UCI_COMMIT_BBF_DMMAP; return; }
times=$(echo "$res" | grep "min/avg/max")
[ -z "$times" ] && break
sc1=$(echo "$stc" | awk '{print $4}')

View file

@ -21,7 +21,11 @@ traceroute_launch() {
[ "$timeout" = "0" ] && timeout="1"
i=-2
rm -f /tmp/traceres
traceroute -m $maxhop -w $timeout -q $cnt $proto $device $host $dsize 2>&1 >/tmp/traceres
res=$(traceroute -m $maxhop -w $timeout -q $cnt $proto $device $host $dsize 2>&1 >/tmp/traceres)
error_code="$?"
ba=$(echo "$res" | grep "bad address")
[ -n "$ba" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.traceroute.DiagnosticState=Error_CannotResolveHostName; $UCI_COMMIT_BBF_DMMAP; return; }
[ "$error_code" != "0" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.traceroute.DiagnosticState=Error_Other; $UCI_COMMIT_BBF_DMMAP; return; }
while read _ host ip time _; do
[ "$host" = "*" ] && [ "$ip" = "*" ] && continue
i=$((i+1))