| #!/bin/sh |
| ########################################################################## |
| # If not stated otherwise in this file or this component's Licenses.txt |
| # file the following copyright and licenses apply: |
| # |
| # Copyright 2016 RDK Management |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| ########################################################################## |
| |
| |
| #### |
| ## This script will be invoked upon receiving events from ATOM when processed telemetry dat is available for upload |
| ## This cript is expected to pull the |
| #### |
| |
| . /etc/include.properties |
| . /etc/device.properties |
| |
| if [ -f /lib/rdk/utils.sh ]; then |
| . /lib/rdk/utils.sh |
| fi |
| source /etc/log_timestamp.sh |
| TELEMETRY_PATH="$PERSISTENT_PATH/.telemetry" |
| TELEMETRY_RESEND_FILE="$PERSISTENT_PATH/.resend.txt" |
| TELEMETRY_TEMP_RESEND_FILE="$PERSISTENT_PATH/.temp_resend.txt" |
| |
| TELEMETRY_PROFILE_DEFAULT_PATH="/tmp/DCMSettings.conf" |
| TELEMETRY_PROFILE_RESEND_PATH="$PERSISTENT_PATH/.DCMSettings.conf" |
| TELEMETRY_TFTP_UPLOAD_JSON_FILE="$PERSISTENT_PATH/tftp_json.txt" |
| |
| RTL_LOG_FILE="$LOG_PATH/dcmscript.log" |
| |
| HTTP_FILENAME="$TELEMETRY_PATH/dca_httpresult.txt" |
| |
| DCMRESPONSE="$PERSISTENT_PATH/DCMresponse.txt" |
| |
| PEER_COMM_ID="/tmp/elxrretyt.swr" |
| |
| #pokuru if [ ! -f /usr/bin/GetConfigFile ];then |
| #pokuru echo "Error: GetConfigFile Not Found" |
| #pokuru exit 127 |
| #pokuru fi |
| |
| SIGN_FILE="/tmp/.signedRequest_$$_`date +'%s'`" |
| DIRECT_BLOCK_TIME=86400 |
| DIRECT_BLOCK_FILENAME="/tmp/.lastdirectfail_dca" |
| |
| SLEEP_TIME_FILE="/tmp/.rtl_sleep_time.txt" |
| #MAX_LIMIT_RESEND=2 |
| # Max backlog queue set to 5, after which the resend file will discard subsequent entries |
| MAX_CONN_QUEUE=5 |
| DIRECT_RETRY_COUNT=2 |
| |
| ignoreResendList="false" |
| |
| # exit if an instance is already running |
| if [ ! -f /tmp/.dca-splunk.upload ];then |
| # store the PID |
| echo $$ > /tmp/.dca-splunk.upload |
| else |
| pid=`cat /tmp/.dca-splunk.upload` |
| if [ -d /proc/$pid ];then |
| echo_t "dca : previous instance of dcaSplunkUpload.sh is running." |
| ignoreResendList="true" |
| # Cannot exit as triggers can be from immediate log upload |
| else |
| rm -f /tmp/.dca-splunk.upload |
| echo $$ > /tmp/.dca-splunk.upload |
| fi |
| fi |
| |
| conn_type_used="" # Use this to check the connection success, else set to fail |
| conn_type="Direct" # Use this to check the connection success, else set to fail |
| first_conn=useDirectRequest |
| sec_conn=useCodebigRequest |
| CodebigAvailable=0 |
| |
| CURL_TIMEOUT=30 |
| TLS="--tlsv1.2" |
| |
| mkdir -p $TELEMETRY_PATH |
| |
| # Processing Input Args |
| inputArgs=$1 |
| |
| # dca_utility.sh does not uses TELEMETRY_PROFILE_RESEND_PATH, to hardwired to TELEMETRY_PROFILE_DEFAULT_PATH |
| [ "x$sendInformation" != "x" ] || sendInformation=1 |
| if [ "$sendInformation" -ne 1 ] ; then |
| TELEMETRY_PROFILE_PATH=$TELEMETRY_PROFILE_RESEND_PATH |
| else |
| TELEMETRY_PROFILE_PATH=$TELEMETRY_PROFILE_DEFAULT_PATH |
| fi |
| |
| echo "Telemetry Profile File Being Used : $TELEMETRY_PROFILE_PATH" >> $RTL_LOG_FILE |
| |
| #Adding support for opt override for dcm.properties file |
| if [ "$BUILD_TYPE" != "prod" ] && [ -f $PERSISTENT_PATH/dcm.properties ]; then |
| . $PERSISTENT_PATH/dcm.properties |
| else |
| . /etc/dcm.properties |
| fi |
| TelemetryNewEndpointAvailable=0 |
| getTelemetryEndpoint() { |
| DEFAULT_DCA_UPLOAD_URL="$DCA_UPLOAD_URL" |
| TelemetryEndpoint=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.TelemetryEndpoint.Enable | grep value | awk '{print $5}'` |
| TelemetryEndpointURL="" |
| if [ "x$TelemetryEndpoint" = "xtrue" ]; then |
| TelemetryEndpointURL=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.TelemetryEndpoint.URL | grep value | awk '{print $5}'` |
| if [ ! -z "$TelemetryEndpointURL" ]; then |
| DCA_UPLOAD_URL="https://$TelemetryEndpointURL" |
| echo_t "dca upload url from RFC is $TelemetryEndpointURL" >> $RTL_LOG_FILE |
| TelemetryNewEndpointAvailable=1 |
| fi |
| else |
| if [ -f "$DCMRESPONSE" ]; then |
| TelemetryEndpointURL=`grep '"uploadRepository:URL":"' $DCMRESPONSE | awk -F 'uploadRepository:URL":' '{print $NF}' | awk -F '",' '{print $1}' | sed 's/"//g' | sed 's/}//g'` |
| |
| if [ ! -z "$TelemetryEndpointURL" ]; then |
| DCA_UPLOAD_URL="$TelemetryEndpointURL" |
| echo_t "dca upload url from dcmresponse is $TelemetryEndpointURL" >> $RTL_LOG_FILE |
| fi |
| fi |
| fi |
| |
| if [ -z "$TelemetryEndpointURL" ]; then |
| DCA_UPLOAD_URL="$DEFAULT_DCA_UPLOAD_URL" |
| fi |
| } |
| |
| getTelemetryEndpoint |
| |
| if [ -z $DCA_UPLOAD_URL ]; then |
| echo_t "dca upload url read from dcm.properties is NULL" |
| exit 1 |
| fi |
| |
| pidCleanup() |
| { |
| # PID file cleanup |
| if [ -f /tmp/.dca-splunk.upload ];then |
| rm -rf /tmp/.dca-splunk.upload |
| fi |
| } |
| |
| IsDirectBlocked() |
| { |
| ret=0 |
| # Temporarily disabling blocking of direct connection due to increased load on Codebig servers. |
| return $ret |
| } |
| |
| # Get the configuration of codebig settings |
| get_Codebigconfig() |
| { |
| # If GetServiceUrl not available, then only direct connection available and no fallback mechanism |
| if [ -f /usr/bin/GetServiceUrl ]; then |
| CodebigAvailable=1 |
| fi |
| if [ "$CodebigAvailable" -eq "1" ]; then |
| CodeBigEnable=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.CodeBigFirst.Enable | grep true 2>/dev/null` |
| fi |
| if [ "$CodebigAvailable" -eq "1" ] && [ "x$CodeBigEnable" != "x" ] ; then |
| conn_type="Codebig" |
| first_conn=useCodebigRequest |
| sec_conn=useDirectRequest |
| fi |
| |
| if [ "$CodebigAvailable" -eq 1 ]; then |
| echo_t "dca : Using $conn_type connection as the Primary" >> $RTL_LOG_FILE |
| else |
| echo_t "dca : Only $conn_type connection is available" >> $RTL_LOG_FILE |
| fi |
| } |
| |
| # Direct connection Download function |
| useDirectRequest() |
| { |
| # Direct connection will not be tried if .lastdirectfail exists |
| IsDirectBlocked |
| if [ "$?" -eq "1" ]; then |
| return 1 |
| fi |
| echo_t "dca$2: Using Direct commnication" |
| proUpdel=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c` |
| echo "number of proUPdel1:"$proUpdel |
| #proUpdel=$((proUpdel - 1)) |
| uploadProtocoltel=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$proUpdel` |
| echo "Upload protocol telemetry is:"$uploadProtocoltel |
| if [ "$uploadProtocoltel" != "TFTP" ]; then |
| echo "before HTTP upload" |
| delimhttp=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c` |
| echo "number of httpdeli:"$delimhttp |
| delimhttp=$((delimhttp - 4)) |
| HTTPURL=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$delimhttp` |
| if [ "$HTTPURL" == "" ]; then |
| echo "No HTTP URL configured in xconf,going with internal one !!" |
| HTTPURL=$DCM_HTTP_SERVER_URL |
| fi |
| echo "HTTPTELEMETRYURL:"$HTTPURL |
| CURL_CMD="curl --tlsv1.2 -w '%{http_code}\n' -H \"Accept: application/json\" -H \"Content-type: application/json\" -X POST -d @/nvram/rtl_json.txt '$HTTPURL' --connect-timeout 30 -m 30" |
| echo "------CURL_CMD:"$CURL_CMD |
| HTTP_CODE=`result= eval $CURL_CMD` |
| http_code=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' ) |
| echo "http code in telemetry is :"$http_code |
| #curl --tlsv1.2 -w '%{http_code}\n' -H "Accept: application/json" -H "Content-type: application/json" -X POST -d @/nvram/hell.txt '$HTTPURL' -o "/nvram/dca_httpresult.txt" --connect-timeout 30 -m 30 |
| if [ $http_code -eq 200 ]; then |
| echo "HTTP telemetry curl upload succeded!!!!!!!!!!!!!!!!!" |
| ret=0 |
| else |
| uploadRetryCount=0 |
| while [ $uploadRetryCount -lt 2 ] |
| do |
| echo "Trying to upload telemetry file..." |
| CURL_CMD="curl --tlsv1.2 -w '%{http_code}\n' -H \"Accept: application/json\" -H \"Content-type: application/json\" -X POST -d @/nvram/rtl_json.txt '$HTTPURL' --connect-timeout 30 -m 30" |
| HTTP_CODE=`result= eval $CURL_CMD` |
| http_code_retry=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' ) |
| echo "http code in telemetry is :"$http_code_retry |
| if [ "$http_code_retry" != "200" ]; then |
| echo "Error in uploading telemetry file" |
| else |
| echo "telemetry json upload succeded in retry" |
| ret=0 |
| break |
| fi |
| uploadRetryCount=`expr $uploadRetryCount + 1` |
| done |
| if [ $uploadRetryCount -eq 2]; then |
| ret=1 |
| echo "HTTP telemetry curl upload failed!!!!!!!!!!!!!!!!!" |
| fi |
| fi |
| if [ $ret -eq 0 ]; then |
| echo_t "dca$2: Direct connection success - ret:$ret " >> $RTL_LOG_FILE |
| # Use direct connection for rest of the connections |
| conn_type_used="Direct" |
| cd .. |
| return 0 |
| else |
| echo_t "dca$2: Direct Connection Failure - ret:$ret " >> $RTL_LOG_FILE |
| direct_retry=$(( direct_retry += 1 )) |
| if [ "$direct_retry" -ge "$DIRECT_RETRY_COUNT" ]; then |
| # .lastdirectfail will not be created for only direct connection |
| [ "$CodebigAvailable" -ne "1" ] || [ -f $DIRECT_BLOCK_FILENAME ] || touch $DIRECT_BLOCK_FILENAME |
| fi |
| sleep 10 |
| cd .. |
| return 1 |
| fi |
| else |
| echo "before TFTP load-----------" |
| delimnr=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | tr -dc ':' |wc -c` |
| echo "number of delim:"$delimnr |
| delimnr=$((delimnr - 1)) |
| IP=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d ":" -f$delimnr | cut -d '"' -f 2` |
| echo "tftp ip is :"$IP |
| cd /nvram/ |
| if [ -f "rtl_json.txt" ]; then |
| echo "rtl_json.txt available,going for tftp upload" |
| iptables -t raw -I OUTPUT -j CT -p udp -m udp --dport 69 --helper tftp |
| FilogicMacAddress=`ifconfig erouter0 | grep HWaddr | cut -c39-55` |
| extractVal=`echo $FilogicMacAddress | sed -e 's/://g'` |
| dt=`date "+%m-%d-%y-%I-%M%p"` |
| cp /nvram/rtl_json.txt /nvram/$extractVal-TELE-$dt.json |
| tftp -p -r $extractVal-TELE-$dt.json $IP |
| else |
| echo "No rtl_json.txt available,returning 1" |
| return 1 |
| fi |
| ret=$? |
| echo $ret |
| if [ "$ret" -eq 1 ]; then |
| tftpuploadRetryCount=0 |
| while [ $tftpuploadRetryCount -lt 2 ] |
| do |
| echo "Trying to upload telemetry file using tftp again..." |
| tftp -p -r $extractVal-TELE-$dt.json $IP |
| ret=$? |
| if [ "$ret" -eq 1 ]; then |
| echo "error in uploading using tftp" |
| else |
| echo "tftp upload in retry succeded" |
| ret=0 |
| break |
| fi |
| tftpuploadRetryCount=`expr $tftpuploadRetryCount + 1` |
| done |
| if [ "$tftpuploadRetryCount" -eq 2]; then |
| ret=1 |
| echo "TFTP telemetry upload failed!!!!!!!!!!!!!!!!!" |
| fi |
| else |
| echo "TFTP Telemetry succeded !!!" |
| ret=0 |
| fi |
| sleep 10 |
| |
| echo_t "dca $2 : Direct Connection HTTP RESPONSE CODE : $http_code" >> $RTL_LOG_FILE |
| if [ $ret -eq 0 ]; then |
| echo_t "dca$2: Direct connection success - ret:$ret " >> $RTL_LOG_FILE |
| # Use direct connection for rest of the connections |
| conn_type_used="Direct" |
| cd .. |
| return 0 |
| else |
| echo_t "dca$2: Direct Connection Failure - ret:$ret " >> $RTL_LOG_FILE |
| direct_retry=$(( direct_retry += 1 )) |
| if [ "$direct_retry" -ge "$DIRECT_RETRY_COUNT" ]; then |
| # .lastdirectfail will not be created for only direct connection |
| [ "$CodebigAvailable" -ne "1" ] || [ -f $DIRECT_BLOCK_FILENAME ] || touch $DIRECT_BLOCK_FILENAME |
| fi |
| sleep 10 |
| cd .. |
| return 1 |
| fi |
| fi |
| } |
| |
| # Codebig connection Download function |
| useCodebigRequest() |
| { |
| # Do not try Codebig if CodebigAvailable != 1 (GetServiceUrl not there) |
| if [ "$CodebigAvailable" -eq "0" ] ; then |
| echo "dca$2 : Only direct connection Available" |
| return 1 |
| fi |
| |
| if [ "x$CodeBigEnable" = "x" ] ; then |
| echo_t "dca$2 : Codebig connection attempts are disabled through RFC. Exiting !!!" >> $RTL_LOG_FILE |
| return 1 |
| fi |
| |
| if [ "$TelemetryNewEndpointAvailable" -eq "1" ]; then |
| SIGN_CMD="GetServiceUrl 10 " |
| else |
| SIGN_CMD="GetServiceUrl 9 " |
| fi |
| eval $SIGN_CMD > $SIGN_FILE |
| CB_SIGNED_REQUEST=`cat $SIGN_FILE` |
| rm -f $SIGN_FILE |
| CURL_CMD="curl $TLS -w '%{http_code}\n' --interface $EROUTER_INTERFACE $addr_type -H \"Accept: application/json\" -H \"Content-type: application/json\" -X POST -d '$1' -o \"$HTTP_FILENAME\" \"$CB_SIGNED_REQUEST\" --connect-timeout $CURL_TIMEOUT -m $CURL_TIMEOUT" |
| echo_t "dca$2: Using Codebig connection at `echo "$CURL_CMD" | sed -ne 's#.*\(https:.*\)?.*#\1#p'`" >> $RTL_LOG_FILE |
| echo_t "CURL_CMD: `echo "$CURL_CMD" | sed -ne 's#oauth_consumer_key=.*oauth_signature=.* --#<hidden> --#p'`" >> $RTL_LOG_FILE |
| HTTP_CODE=`curl $TLS -w '%{http_code}\n' --interface $EROUTER_INTERFACE $addr_type -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "$1" -o "$HTTP_FILENAME" "$CB_SIGNED_REQUEST" --connect-timeout $CURL_TIMEOUT -m $CURL_TIMEOUT` |
| curlret=$? |
| http_code=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' ) |
| [ "x$http_code" != "x" ] || http_code=0 |
| # log security failure |
| echo_t "dca $2 : Codebig Connection HTTP RESPONSE CODE : $http_code" >> $RTL_LOG_FILE |
| case $curlret in |
| 35|51|53|54|58|59|60|64|66|77|80|82|83|90|91) |
| echo_t "dca$2: Codebig Connection Failure - ret:$curlret http_code:$http_code" >> $RTL_LOG_FILE |
| ;; |
| esac |
| if [ "$http_code" -eq 200 ]; then |
| echo_t "dca$2: Codebig connection success - ret:$curlret http_code:$http_code" >> $RTL_LOG_FILE |
| conn_type_used="Codebig" |
| return 0 |
| fi |
| if [ "$curlret" -eq 0 ]; then |
| echo_t "dca$2: Codebig Connection Failure - ret:$curlret http_code:$http_code" >> $RTL_LOG_FILE |
| fi |
| sleep 10 |
| return 1 |
| } |
| |
| # Function to get erouter0 ipv4 address |
| getErouterIpv4() |
| { |
| erouter_ipv4=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IP | grep value | awk '{print $5}'` |
| if [ "$erouter_ipv4" != "" ];then |
| echo $erouter_ipv4 |
| else |
| echo "null" |
| fi |
| } |
| |
| # Function to get erouter0 ipv6 address |
| getErouterIpv6() |
| { |
| erouter_ipv6=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IPv6 | grep value | awk '{print $5}'` |
| if [ "$erouter_ipv6" != "" ];then |
| echo $erouter_ipv6 |
| else |
| echo "null" |
| fi |
| } |
| |
| timestamp=`date +%Y-%b-%d_%H-%M-%S` |
| #main app |
| estbMac=`getErouterMacAddress` |
| cur_time=`date "+%Y-%m-%d %H:%M:%S"` |
| erouteripv4=`getErouterIpv4` |
| erouteripv6=`getErouterIpv6` |
| DEFAULT_IPV4="<#=#>EROUTER_IPV4<#=#>" |
| DEFAULT_IPV6="<#=#>EROUTER_IPV6<#=#>" |
| |
| # If interface doesnt have ipv6 address then we will force the curl to go with ipv4. |
| # Otherwise we will not specify the ip address family in curl options |
| addr_type="" |
| [ "x`ifconfig $EROUTER_INTERFACE | grep inet6 | grep -i 'Global'`" != "x" ] || addr_type="-4" |
| |
| if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then |
| ## 1] Pull processed data from ATOM |
| rm -f $TELEMETRY_JSON_RESPONSE |
| |
| |
| GetConfigFile $PEER_COMM_ID |
| scp -i $PEER_COMM_ID root@$ATOM_INTERFACE_IP:$TELEMETRY_JSON_RESPONSE $TELEMETRY_JSON_RESPONSE > /dev/null 2>&1 |
| if [ $? -ne 0 ]; then |
| scp -i $PEER_COMM_ID root@$ATOM_INTERFACE_IP:$TELEMETRY_JSON_RESPONSE $TELEMETRY_JSON_RESPONSE > /dev/null 2>&1 |
| fi |
| echo_t "Copied $TELEMETRY_JSON_RESPONSE " >> $RTL_LOG_FILE |
| rm -f $PEER_COMM_ID |
| sleep 2 |
| fi |
| |
| # Add the erouter MAC address from ARM as this is not available in ATOM |
| sed -i -e "s/ErouterMacAddress/$estbMac/g" $TELEMETRY_JSON_RESPONSE |
| |
| |
| if [ ! -f $SLEEP_TIME_FILE ]; then |
| if [ -f $DCMRESPONSE ]; then |
| cron=`grep -i TelemetryProfile $DCMRESPONSE | awk -F '"schedule":' '{print $NF}' | awk -F "," '{print $1}' | sed 's/://g' | sed 's/"//g' | sed -e 's/^[ ]//' | sed -e 's/^[ ]//'` |
| fi |
| |
| if [ -n "$cron" ]; then |
| sleep_time=`echo "$cron" | awk -F '/' '{print $2}' | cut -d ' ' -f1` |
| fi |
| |
| if [ -n "$sleep_time" ];then |
| sleep_time=`expr $sleep_time - 1` #Subtract 1 miute from it |
| sleep_time=`expr $sleep_time \* 60` #Make it to seconds |
| # Adding generic RANDOM number implementation as sh in RDK_B doesn't support RANDOM |
| RANDOM=`awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1)*(max-min+1)*1000)}'` |
| sleep_time=$(($RANDOM%$sleep_time)) #Generate a random value out of it |
| echo "$sleep_time" > $SLEEP_TIME_FILE |
| else |
| sleep_time=10 |
| fi |
| else |
| sleep_time=`cat $SLEEP_TIME_FILE` |
| fi |
| |
| if [ -z "$sleep_time" ];then |
| sleep_time=10 |
| fi |
| |
| if [ "$inputArgs" = "logbackup_without_upload" ];then |
| echo_t "log backup during bootup, Will upload on later call..!" |
| if [ -f $TELEMETRY_JSON_RESPONSE ]; then |
| outputJson=`cat $TELEMETRY_JSON_RESPONSE` |
| fi |
| if [ ! -f $TELEMETRY_JSON_RESPONSE ] || [ "x$outputJson" = "x" ] ; then |
| echo_t "dca: Unable to find Json message or Json is empty." >> $RTL_LOG_FILE |
| if [ ! -f /etc/os-release ];then pidCleanup; fi |
| exit 0 |
| fi |
| if [ -f $TELEMETRY_RESEND_FILE ]; then |
| #If resend queue has already reached MAX_CONN_QUEUE entries then remove recent two |
| if [ "`cat $TELEMETRY_RESEND_FILE | wc -l`" -ge "$MAX_CONN_QUEUE" ]; then |
| echo_t "resend queue size at its max. removing recent two entries" >> $RTL_LOG_FILE |
| sed -i '1,2d' $TELEMETRY_RESEND_FILE |
| fi |
| mv $TELEMETRY_RESEND_FILE $TELEMETRY_TEMP_RESEND_FILE |
| fi |
| # ensure that Json is put at the top of the queue |
| echo "$outputJson" > $TELEMETRY_RESEND_FILE |
| if [ -f $TELEMETRY_TEMP_RESEND_FILE ] ; then |
| cat $TELEMETRY_TEMP_RESEND_FILE >> $TELEMETRY_RESEND_FILE |
| rm -f $TELEMETRY_TEMP_RESEND_FILE |
| fi |
| if [ ! -f /etc/os-release ];then pidCleanup; fi |
| exit 0 |
| fi |
| get_Codebigconfig |
| direct_retry=0 |
| ## 2] Check for unsuccessful posts from previous execution in resend que. |
| ## If present repost either with appending to existing or as independent post |
| echo "=============Telemetry has file only one upload=======================" |
| if [ -f $TELEMETRY_RESEND_FILE ] && [ "x$ignoreResendList" != "xtrue" ]; then |
| echo "=============Loop1=======================" |
| rm -f $TELEMETRY_TEMP_RESEND_FILE |
| while read resend |
| do |
| resend=`echo $resend | sed "s/$DEFAULT_IPV4/$erouteripv4/" | sed "s/$DEFAULT_IPV6/$erouteripv6/"` |
| echo_t "dca resend : $resend" >> $RTL_LOG_FILE |
| $first_conn "$resend" "resend" || $sec_conn "$resend" "resend" || conn_type_used="Fail" |
| |
| if [ "x$conn_type_used" = "xFail" ] ; then |
| echo "$resend" >> $TELEMETRY_TEMP_RESEND_FILE |
| echo_t "dca Connecion failed for this Json : requeuing back" >> $RTL_LOG_FILE |
| fi |
| echo_t "dca Attempting next Json in the queue " >> $RTL_LOG_FILE |
| sleep 10 |
| done < $TELEMETRY_RESEND_FILE |
| sleep 2 |
| rm -f $TELEMETRY_RESEND_FILE |
| fi |
| |
| ## 3] Attempt to post current message. Check for status if failed add it to resend queue |
| if [ -f $TELEMETRY_JSON_RESPONSE ]; then |
| outputJson=`cat $TELEMETRY_JSON_RESPONSE` |
| fi |
| if [ ! -f $TELEMETRY_JSON_RESPONSE ] || [ "x$outputJson" = "x" ] ; then |
| echo_t "dca: Unable to find Json message or Json is empty." >> $RTL_LOG_FILE |
| [ ! -f $TELEMETRY_TEMP_RESEND_FILE ] || mv $TELEMETRY_TEMP_RESEND_FILE $TELEMETRY_RESEND_FILE |
| if [ ! -f /etc/os-release ];then pidCleanup; fi |
| exit 0 |
| fi |
| |
| echo "$outputJson" > $TELEMETRY_RESEND_FILE |
| # sleep for random time before upload to avoid bulk requests on splunk server |
| echo_t "dca: Sleeping for $sleep_time before upload." >> $RTL_LOG_FILE |
| sleep $sleep_time |
| timestamp=`date +%Y-%b-%d_%H-%M-%S` |
| $first_conn "$outputJson" || $sec_conn "$outputJson" || conn_type_used="Fail" |
| if [ "x$conn_type_used" != "xFail" ]; then |
| echo_t "dca: Json message successfully submitted." >> $RTL_LOG_FILE |
| rm -f $TELEMETRY_RESEND_FILE |
| [ ! -f $TELEMETRY_TEMP_RESEND_FILE ] || mv $TELEMETRY_TEMP_RESEND_FILE $TELEMETRY_RESEND_FILE |
| else |
| if [ -f $TELEMETRY_TEMP_RESEND_FILE ] ; then |
| if [ "`cat $TELEMETRY_TEMP_RESEND_FILE | wc -l `" -ge "$MAX_CONN_QUEUE" ]; then |
| echo_t "dca: resend queue size has already reached MAX_CONN_QUEUE. Not adding anymore entries" >> $RTL_LOG_FILE |
| mv $TELEMETRY_TEMP_RESEND_FILE $TELEMETRY_RESEND_FILE |
| else |
| cat $TELEMETRY_TEMP_RESEND_FILE >> $TELEMETRY_RESEND_FILE |
| echo_t "dca: Json message submit failed. Adding message to resend queue" >> $RTL_LOG_FILE |
| fi |
| rm -f $TELEMETRY_TEMP_RESEND_FILE |
| fi |
| fi |
| #rm -f $TELEMETRY_JSON_RESPONSE |
| # PID file cleanup |
| if [ ! -f /etc/os-release ];then pidCleanup; fi |