blob: 5cd86b68770b6bf2d704e4d2ffd33d7eb5336534 [file] [log] [blame]
developer15a43312022-04-12 11:23:23 +08001#!/bin/sh
2##########################################################################
3# If not stated otherwise in this file or this component's Licenses.txt
4# file the following copyright and licenses apply:
5#
6# Copyright 2016 RDK Management
7#
8# Licensed under the Apache License, Version 2.0 (the "License");
9# you may not use this file except in compliance with the License.
10# You may obtain a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing, software
15# distributed under the License is distributed on an "AS IS" BASIS,
16# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17# See the License for the specific language governing permissions and
18# limitations under the License.
19##########################################################################
20
21. /etc/include.properties
22. /etc/device.properties
23
24echo "inside dca_utility script with 1 as value for arguments"
25
26if [ -f /lib/rdk/utils.sh ]; then
27 . /lib/rdk/utils.sh
28fi
29if [ -f /etc/mount-utils/getConfigFile.sh ];then
30 . /etc/mount-utils/getConfigFile.sh
31fi
32source /etc/log_timestamp.sh
33source /lib/rdk/getpartnerid.sh
34source /lib/rdk/getaccountid.sh
35EROUTER_IF=erouter0
36DCMRESPONSE="$PERSISTENT_PATH/DCMresponse.txt"
37DCM_SETTINGS_CONF="/tmp/DCMSettings.conf"
38
39TELEMETRY_PATH="$PERSISTENT_PATH/.telemetry"
40TELEMETRY_PATH_TEMP="$TELEMETRY_PATH/tmp"
41TELEMETRY_PROFILE_PATH="$PERSISTENT_PATH/.DCMSettings.conf"
42LOG_SYNC_PATH="/rdklogs/logs/"
43
44RTL_LOG_FILE="$LOG_PATH/dcmProcessing.log"
45RTL_DELTA_LOG_FILE="$RAMDISK_PATH/.rtl_temp.log"
46MAP_PATTERN_CONF_FILE="$TELEMETRY_PATH/dcafile.conf"
47TEMP_PATTERN_CONF_FILE="$TELEMETRY_PATH/temp_dcafile.conf"
48EXEC_COUNTER_FILE="/tmp/.dcaCounter.txt"
49
50# Persist this files for telemetry operation
51# Regenerate this only when there is a change identified from XCONF update
52SORTED_PATTERN_CONF_FILE="$TELEMETRY_PATH/dca_sorted_file.conf"
53
54current_cron_file="$PERSISTENT_PATH/cron_file.txt"
55
56#Performance oriented binaries
57DCA_BINARY="/usr/bin/dca"
58
59TELEMETRY_INOTIFY_FOLDER=/rdklogs/logs/
60TELEMETRY_INOTIFY_EVENT="$TELEMETRY_INOTIFY_FOLDER/eventType.cmd"
61TELEMETRY_EXEC_COMPLETE="/tmp/.dca_done"
62SCP_COMPLETE="/tmp/.scp_done"
63
64PEER_COMM_ID="/tmp/elxrretyt.swr"
65IDLE_TIMEOUT=30
66
67DEFAULT_IPV4="<#=#>EROUTER_IPV4<#=#>"
68DEFAULT_IPV6="<#=#>EROUTER_IPV6<#=#>"
69TELEMETRY_PREVIOUS_LOG="/tmp/.telemetry_previous_log"
70TELEMETRY_PREVIOUS_LOG_COMPLETE="/tmp/.telemetry_previous_log_done"
71TEMP_NVRAM_LOG_PATH="/tmp/nvram2_logs/"
72NVRAM_LOG_PATH="/nvram/logs/"
73
74
75# Retain source for future enabling. Defaulting to disable for now
76snmpCheck=false
77
78dcaCleanup()
79{
80 if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
81 $CONFIGPARAMGEN jx $PEER_COMM_DAT $PEER_COMM_ID
82 ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'notifyTelemetryCleanup' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
83 echo_t "notify ARM for dca execution completion" >> $RTL_LOG_FILE
84 rm -f $PEER_COMM_ID
85 else
86 touch $TELEMETRY_EXEC_COMPLETE
87 fi
88
89 echo_t "forced DCA execution before log upload/reboot. Clearing all markers !!!" >> $RTL_LOG_FILE
90 # Forced execution before flusing of logs, so clear the markers
91 if [ -d $TELEMETRY_PATH_TEMP ]; then
92 rm -rf $TELEMETRY_PATH_TEMP
93 fi
94 rm -rf $TELEMETRY_PATH
95
96}
97
98# exit if an instance is already running
99if [ ! -f /tmp/.dca-utility.pid ];then
100 # store the PID
101 echo $$ > /tmp/.dca-utility.pid
102 echo "No dca-utility pid -------"
103else
104 echo "dca-utility pis existing----------"
105 pid=`cat /tmp/.dca-utility.pid`
106 if [ -d /proc/$pid ];then
107 if [ "$1" == "2" ]; then
108 loop=0
109 while [ $loop -le 6 ]
110 do
111 sleep 10
112 loop=$((loop+1))
113 if [ ! -f /tmp/.dca-utility.pid ] || [ ! -d /proc/`cat /tmp/.dca-utility.pid` ]; then
114 dcaCleanup
115 break
116 fi
117 done
118 fi
119 exit 0
120 else
121 echo $$ > /tmp/.dca-utility.pid
122 fi
123fi
124
125mkdir -p $LOG_PATH
126touch $RTL_LOG_FILE
127
128previousLogPath=""
129if [ -f $TELEMETRY_PREVIOUS_LOG ]; then
130
131 isAxb6Device="no"
132 if [ "$MODEL_NUM" == "TG3482G" ];then
133 isNvram2Mounted=`grep nvram2 /proc/mounts`
134 if [ "$isNvram2Mounted" == "" -a -d "/nvram/logs" ];then
135 isAxb6Device="yes"
136 fi
137 fi
138
139 if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" -a "x$isAxb6Device" == "xno" ]; then
140 previousLogPath="$TEMP_NVRAM_LOG_PATH"
141 elif [ "x$isAxb6Device" = "xyes" ]; then
142 previousLogPath="$NVRAM_LOG_PATH"
143 else
144 previousLogPath="$LOG_SYNC_PATH"
145 fi
146
147 echo_t "Telemetry run for previous log path : "$previousLogPath
148fi
149
150if [ ! -f /tmp/.dca_bootup -a ! -f $TELEMETRY_PREVIOUS_LOG ]; then
151 echo_t "First dca execution after bootup. Clearing all markers."
152 touch /tmp/.dca_bootup
153 rm -rf $TELEMETRY_PATH
154 rm -f $RTL_LOG_FILE
155fi
156
157
158PrevFileName=''
159
160#Adding support for opt override for dcm.properties file
161if [ "$BUILD_TYPE" != "prod" ] && [ -f $PERSISTENT_PATH/dcm.properties ]; then
162 . $PERSISTENT_PATH/dcm.properties
163else
164 . /etc/dcm.properties
165fi
166
167
168if [ ! -d "$TELEMETRY_PATH_TEMP" ]
169then
170 echo_t "Telemetry Folder does not exist . Creating now"
171 mkdir -p "$TELEMETRY_PATH_TEMP"
172else
173 cp $TELEMETRY_PATH/rtl_* $TELEMETRY_PATH_TEMP/
174fi
175
176mkdir -p $TELEMETRY_PATH
177
178pidCleanup()
179{
180 # PID file cleanup
181 if [ -f /tmp/.dca-utility.pid ];then
182 rm -rf /tmp/.dca-utility.pid
183 fi
184}
185
186if [ $# -ne 1 ]; then
187 echo "Usage : `basename $0` <0/1/2> 0 - Telemtry From Cron 1 - Reinitialize Map 2 - Forced Telemetry search " >> $RTL_LOG_FILE
188 pidCleanup
189 exit 0
190fi
191
192# 0 if as part of normal execution
193# 1 if initiated due to an XCONF update
194# 2 if forced execution before log upload
195# 3 if modify the cron schedule
196
197triggerType=$1
198echo_t "dca: Trigger type is :"$triggerType
199
200cd $LOG_PATH
201
202
203isNum()
204{
205 Number=$1
206 if [ $Number -ne 0 -o $Number -eq 0 2>/dev/null ];then
207 echo 0
208 else
209 echo 1
210 fi
211}
212
213# Function to get erouerMAC
214getEstbMac()
215{
216
217 estbMac=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_MAC | grep type: | awk '{print $5}'|tr '[:lower:]' '[:upper:]'`
218
219 if [ "$estbMac" ]; then
220 echo "$estbMac"
221 else
222 if [ "$BOX_TYPE" == "XB3" ]; then
223 estbMac=`/usr/bin/rpcclient $ARM_ARPING_IP "ifconfig erouter0" | grep 'Link encap:' | cut -d ' ' -f7`
224 echo "$estbMac"
225 else
226 estbMac=`ifconfig erouter0 | grep 'Link encap:' | cut -d ' ' -f7`
227 echo "$estbMac"
228 fi
229 fi
230
231}
232
233# Function to get erouter0 ipv4 address
234getErouterIpv4()
235{
236 erouter_ipv4=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IP | grep value | awk '{print $5}'`
237 if [ "$erouter_ipv4" != "" ];then
238 echo $erouter_ipv4
239 else
240 echo "null"
241 fi
242}
243
244# Function to get erouter0 ipv6 address
245getErouterIpv6()
246{
247 erouter_ipv6=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IPv6 | grep value | awk '{print $5}'`
248 if [ "$erouter_ipv6" != "" ];then
249 echo $erouter_ipv6
250 else
251 echo "null"
252 fi
253}
254
255getSNMPUpdates() {
256 snmpMIB=$1
257 TotalCount=0
258 export MIBS=ALL
259 export MIBDIRS=/mnt/nfs/bin/target-snmp/share/snmp/mibs:/usr/share/snmp/mibs
260 export PATH=$PATH:/mnt/nfs/bin/target-snmp/bin
261 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs/bin/target-snmp/lib:/mnt/nfs/usr/lib
262 snmpCommunityVal=`head -n 1 /tmp/snmpd.conf | awk '{print $4}'`
263 tuneString=`snmpwalk -OQv -v 2c -c $snmpCommunityVal 127.0.0.1 $snmpMIB`
264 for count in $tuneString
265 do
266 count=`echo $count | tr -d ' '`
267 if [ $(isNum $count) -eq 0 ]; then
268 TotalCount=`expr $TotalCount + $count`
269 else
270 TotalCount=$count
271 fi
272 done
273
274 echo $TotalCount
275}
276
277## Reatining for future support when net-snmp tools will be enabled in XB3s
278getControllerId(){
279 ChannelMapId=''
280 ControllerId=''
281 VctId=''
282 vodServerId=''
283 export MIBS=ALL
284 export MIBDIRS=/mnt/nfs/bin/target-snmp/share/snmp/mibs:/usr/share/snmp/mibs
285 export PATH=$PATH:/mnt/nfs/bin/target-snmp/bin
286 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs/bin/target-snmp/lib:/mnt/nfs/usr/lib
287
288 snmpCommunityVal=`head -n 1 /tmp/snmpd.conf | awk '{print $4}'`
289 ChannelMapId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 1.3.6.1.4.1.17270.9225.1.1.40 | awk -F '= ' '{print $2}'`
290 ControllerId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 1.3.6.1.4.1.17270.9225.1.1.41 | awk -F '= ' '{print $2}'`
291 VctId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 OC-STB-HOST-MIB::ocStbHostCardVctId.0 | awk -F '= ' '{print $2}'`
292 vodServerId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 1.3.6.1.4.1.17270.9225.1.1.43 | awk -F '= ' '{print $2}'`
293
294 echo "{\"ChannelMapId\":\"$ChannelMapId\"},{\"ControllerId\":\"$ControllerId\"},{\"VctId\":$VctId},{\"vodServerId\":\"$vodServerId\"}"
295}
296
297# Function to get RF status
298## Reatining for future support when net-snmp tools will be enabled in XB3s
299getRFStatus(){
300 Dwn_RX_pwr=''
301 Ux_TX_pwr=''
302 Dx_SNR=''
303 export MIBS=ALL
304 export MIBDIRS=/mnt/nfs/bin/target-snmp/share/snmp/mibs
305 export PATH=$PATH:/mnt/nfs/bin/target-snmp/bin
306 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs/bin/target-snmp/lib:/mnt/nfs/usr/lib
307
308 snmpCommunityVal=`head -n 1 /tmp/snmpd.conf | awk '{print $4}'`
309 Dwn_RX_pwr=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 192.168.100.1 DOCS-IF-MIB::docsIfDownChannelPower.3 | awk -F '= ' '{print $2}'`
310 Ux_TX_pwr=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 192.168.100.1 DOCS-IF-MIB::docsIfCmStatusTxPower.2 | awk -F '= ' '{print $2}'`
311 Dx_SNR=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 192.168.100.1 DOCS-IF-MIB::docsIfSigQSignalNoise.3 | awk -F '= ' '{print $2}'`
312
313 echo "{\"Dwn_RX_pwr\":\"$Dwn_RX_pwr\"},{\"Ux_TX_pwr\":\"$Ux_TX_pwr\"},{\"Dx_SNR\":\"$Dx_SNR\"}"
314}
315
316processJsonResponse()
317{
318 FILENAME=$1
319 #Condider getting the filename as an argument instead of using global file name
320 if [ -f "$FILENAME" ]; then
321 # Start pre-processing the original file
322 sed -i 's/,"urn:/\n"urn:/g' $FILENAME # Updating the file by replacing all ',"urn:' with '\n"urn:'
323 sed -i 's/^{//g' $FILENAME # Delete first character from file '{'
324 sed -i 's/}$//g' $FILENAME # Delete first character from file '}'
325 echo "" >> $FILENAME # Adding a new line to the file
326 # Start pre-processing the original file
327
328 OUTFILE=$DCM_SETTINGS_CONF
329 OUTFILEOPT="$PERSISTENT_PATH/.DCMSettings.conf"
330 #rm -f $OUTFILE #delete old file
331 cat /dev/null > $OUTFILE #empty old file
332 cat /dev/null > $OUTFILEOPT
333 while read line
334 do
335 # Special processing for telemetry
336 profile_Check=`echo "$line" | grep -ci 'TelemetryProfile'`
337 if [ $profile_Check -ne 0 ];then
338 #echo "$line"
339 echo "$line" | sed 's/"header":"/"header" : "/g' | sed 's/"content":"/"content" : "/g' | sed 's/"type":"/"type" : "/g' >> $OUTFILE
340
341 echo "$line" | sed 's/"header":"/"header" : "/g' | sed 's/"content":"/"content" : "/g' | sed 's/"type":"/"type" : "/g' | sed -e 's/uploadRepository:URL.*","//g' >> $OUTFILEOPT
342 else
343 echo "$line" | sed 's/":/=/g' | sed 's/"//g' >> $OUTFILE
344 fi
345 done < $FILENAME
346 else
347 echo "$FILENAME not found." >> $RTL_LOG_FILE
348 return 1
349 fi
350}
351
352scheduleCron()
353{
354 echo "schedulecronjob!!"
355 cron=''
356 scheduler_Check=`grep '"schedule":' $DCM_SETTINGS_CONF`
357 if [ -n "$scheduler_Check" ]; then
358 cron=`grep -i TelemetryProfile $DCM_SETTINGS_CONF | awk -F '"schedule":' '{print $NF}' | awk -F "," '{print $1}' | sed 's/://g' | sed 's/"//g' | sed -e 's/^[ ]//' | sed -e 's/^[ ]//'`
359 fi
360
361 #During diagnostic mode need to apply the cron schedule value through this custom configuration
362 DiagnosticMode=`dmcli eRT getv Device.SelfHeal.X_RDKCENTRAL-COM_DiagnosticMode | grep value | cut -f3 -d : | cut -f2 -d" "`
363 if [ "$DiagnosticMode" == "true" ];then
364 LogUploadFrequency=`dmcli eRT getv Device.SelfHeal.X_RDKCENTRAL-COM_DiagMode_LogUploadFrequency | grep value | cut -f3 -d : | cut -f2 -d" "`
365 if [ "$LogUploadFrequency" != "" ]; then
366 cron=''
367 cron="*/$LogUploadFrequency * * * *"
368 echo "$timestamp dca: the default Cron schedule from XCONF is ignored and instead SNMP overriden value is used" >> $RTL_LOG_FILE
369 fi
370 fi
371
372 #Check whether cron having empty value if it is empty then need to assign
373 #15mins by default
374 if [ -z "$cron" ]; then
375 echo "$timestamp: dca: Empty cron value so set default as 15mins"
376 cron="*/15 * * * *"
377 fi
378
379 if [ -n "$cron" ]; then
380 # Dump existing cron jobs to a file
381 crontab -l -c $CRON_SPOOL > $current_cron_file
382 # Check whether any cron jobs are existing or not
383 existing_cron_check=`cat $current_cron_file | tail -n 1`
384 tempfile="$PERSISTENT_PATH/tempfile.txt"
385 rm -rf $tempfile # Delete temp file if existing
386 if [ -n "$existing_cron_check" ]; then
387 rtl_cron_check=`grep -c 'dca_utility.sh' $current_cron_file`
388 if [ $rtl_cron_check -eq 0 ]; then
389 echo "$cron nice -n 19 sh $RDK_PATH/dca_utility.sh 1" >> $tempfile
390 fi
391 while read line
392 do
393 retval=`echo "$line" | grep 'dca_utility.sh'`
394 if [ -n "$retval" ]; then
395 echo "$cron nice -n 19 sh $RDK_PATH/dca_utility.sh 1" >> $tempfile
396 else
397 echo "$line" >> $tempfile
398 fi
399 done < $current_cron_file
400 else
401 # If no cron job exists, create one, with the value from DCMSettings.conf file
402 echo "$cron nice -n 19 sh $RDK_PATH/dca_utility.sh 1" >> $tempfile
403 fi
404 # Set new cron job from the file
405 crontab $tempfile -c $CRON_SPOOL
406 rm -rf $current_cron_file # Delete temp file
407 rm -rf $tempfile # Delete temp file
408 else
409 echo " `date` Failed to read \"schedule\" cronjob value from DCMSettings.conf." >> $RTL_LOG_FILE
410 fi
411}
412
413dropbearRecovery()
414{
415 dropbearPid=`ps | grep -i dropbear | grep "$ATOM_INTERFACE_IP" | grep -v grep`
416 if [ -z "$dropbearPid" ]; then
417 DROPBEAR_PARAMS_1="/tmp/.dropbear/dropcfg1$$"
418 DROPBEAR_PARAMS_2="/tmp/.dropbear/dropcfg2$$"
419 if [ ! -d '/tmp/.dropbear' ]; then
420 echo "wan_ssh.sh: need to create dropbear dir !!! " >> $RTL_LOG_FILE
421 mkdir -p /tmp/.dropbear
422 fi
423 echo "wan_ssh.sh: need to create dropbear files !!! " >> $RTL_LOG_FILE
424 getConfigFile $DROPBEAR_PARAMS_1
425 getConfigFile $DROPBEAR_PARAMS_2
426 dropbear -r $DROPBEAR_PARAMS_1 -r $DROPBEAR_PARAMS_2 -E -s -p $ATOM_INTERFACE_IP:22 &
427 sleep 2
428 fi
429 rm -rf /tmp/.dropbear/*
430}
431
432clearTelemetryConfig()
433{
434 echo_t "dca: Clearing telemetry config and markers" >> $RTL_LOG_FILE
435 if [ -f $RTL_DELTA_LOG_FILE ]; then
436 echo_t "dca: Deleting : $RTL_DELTA_LOG_FILE" >> $RTL_LOG_FILE
437 rm -f $RTL_DELTA_LOG_FILE
438 fi
439
440 if [ -f $MAP_PATTERN_CONF_FILE ]; then
441 echo_t "dca: MAP_PATTERN_CONF_FILE : $MAP_PATTERN_CONF_FILE" >> $RTL_LOG_FILE
442 rm -f $MAP_PATTERN_CONF_FILE
443 fi
444
445 if [ -f $TEMP_PATTERN_CONF_FILE ]; then
446 echo_t "dca: TEMP_PATTERN_CONF_FILE : $TEMP_PATTERN_CONF_FILE" >> $RTL_LOG_FILE
447 rm -f $TEMP_PATTERN_CONF_FILE
448 fi
449
450 if [ -f $SORTED_PATTERN_CONF_FILE ]; then
451 echo_t "dca: SORTED_PATTERN_CONF_FILE : $SORTED_PATTERN_CONF_FILE" >> $RTL_LOG_FILE
452 rm -f $SORTED_PATTERN_CONF_FILE
453 fi
454
455 # Clear markers with XCONF update as logs will be flushed in case of maintenance window case as well.
456 # During boot-up no need of maintaining old markers.
457 if [ -d $TELEMETRY_PATH ]; then
458 rm -rf $TELEMETRY_PATH
459 mkdir -p $TELEMETRY_PATH
460 fi
461
462 if [ -d $TELEMETRY_PATH_TEMP ]; then
463 rm -rf $TELEMETRY_PATH_TEMP
464 mkdir -p $TELEMETRY_PATH_TEMP
465 fi
466
467}
468
469## Pass The I/P O/P Files As Arguments
470generateTelemetryConfig()
471{
472 echo_t "dca: Generating telemetry config file." >> $RTL_LOG_FILE
473 input_file=$1
474 output_file=$2
475 touch $TEMP_PATTERN_CONF_FILE
476 if [ -f $input_file ]; then
477 grep -i 'TelemetryProfile' $input_file | sed 's/=\[/\n/g' | sed 's/},/}\n/g' | sed 's/],.*?/\n/g'| sed -e 's/^[ ]//' > $TEMP_PATTERN_CONF_FILE
478 fi
479
480 # Create map file from json message file
481 while read line
482 do
483 header_Check=`echo "$line" | grep -c '{"header"'`
484 if [ $header_Check -ne 0 ];then
485 polling=`echo "$line" | grep -c 'pollingFrequency'`
486 if [ $polling -ne 0 ];then
487 header=`echo "$line" | awk -F '"header" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
488 content=`echo "$line" | awk -F '"content" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
489 logFileName=`echo "$line" | awk -F '"type" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
490 skipInterval=`echo "$line" | sed -e "s/.*pollingFrequency\":\"//g" | sed 's/"}//'`
491 else
492 header=`echo "$line" | awk -F '"header" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
493 content=`echo "$line" | awk -F '"content" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
494 logFileName=`echo "$line" | awk -F '"type" :' '{print $NF}' | sed -e 's/^[ ]//' | sed 's/^"//' | sed 's/"}//'`
495 #default value to 0
496 skipInterval=0
497 fi
498
499 if [ -n "$header" ] && [ -n "$content" ] && [ -n "$logFileName" ] && [ -n "$skipInterval" ]; then
500 echo "$header<#=#>$content<#=#>$logFileName<#=#>$skipInterval" >> $MAP_PATTERN_CONF_FILE
501 fi
502 fi
503 done < $TEMP_PATTERN_CONF_FILE
504 # Sort the config file based on file names to minimise the duplicate delta file generation
505 if [ -f $MAP_PATTERN_CONF_FILE ]; then
506 if [ -f $output_file ]; then
507 rm -f $output_file
508 fi
509 awk -F '<#=#>' '{print $3,$0}' $MAP_PATTERN_CONF_FILE | sort -n | cut -d ' ' -f 2- > $output_file
510 fi
511
512}
513
514 echo "triggertype------------"$triggerType
515# Reschedule the cron based on diagnositic mode
516if [ $triggerType -eq 3 ] ; then
517 echo_t "$timestamp: dca: Processing rescheduleCron job" >> $RTL_LOG_FILE
518 scheduleCron
519 ## Telemetry must be invoked only for reschedule cron job
520 pidCleanup
521 exit 0
522fi
523
524# Pull the settings from Telemetry server periodically
525estbMacAddress=`ifconfig erouter0 | grep HWaddr | cut -c39-55`
526JSONSTR=$estbMacAddress
527CURL_CMD="curl '$DCM_LOG_SERVER_URL?estbMacAddress=$JSONSTR&model=$MODEL_NAME' -o $DCMRESPONSE > /tmp/httpcode.txt"
528
529# Execute curl command
530result= eval $CURL_CMD
531sleep 5
532echo "sleep for :------------------$timeout"
533
534# Regenerate config only during boot-up and when there is an update
535if [ ! -f $SORTED_PATTERN_CONF_FILE ] || [ $triggerType -eq 1 -a ! -f $TELEMETRY_PREVIOUS_LOG ] ; then
536# Start crond daemon for yocto builds
537 pidof crond
538 if [ $? -ne 0 ]; then
539 mkdir -p $CRON_SPOOL
540 touch $CRON_SPOOL/root
541 crond -c $CRON_SPOOL -l 9
542 fi
543
544 if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
545 while [ ! -f $DCMRESPONSE ]
546 do
547 echo "WARNING !!! Unable to locate $DCMRESPONSE .. Retrying " >> $RTL_LOG_FILE
548 GetConfigFile $PEER_COMM_ID
549 scp -i $PEER_COMM_ID -r $ARM_INTERFACE_IP:$DCMRESPONSE $DCMRESPONSE > /dev/null 2>&1
550 rm -f $PEER_COMM_ID
551 sleep 10
552 done
553 fi
554 echo "calling processJsonResponse--------"
555 processJsonResponse $DCMRESPONSE
556 echo "after calling processJsonResponse-----------"
557 clearTelemetryConfig
558 echo "after calling clearTelemetryConfig-----------"
559 generateTelemetryConfig $TELEMETRY_PROFILE_PATH $SORTED_PATTERN_CONF_FILE
560 echo "after calling generateTelemetryConfig--------"
561 scheduleCron
562 echo "after calling scheduleCron-------------------"
563 if [ $triggerType -eq 1 ]; then
564 bootupTelemetryBackup=true
565 ## Telemetry must be invoked only via cron and not during boot-up
566 # pidCleanup
567 #exit 0
568 fi
569fi
570
571mkdir -p $TELEMETRY_PATH_TEMP
572
573if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
574 dropbearRecovery
575 mkdir -p $LOG_PATH
576 TMP_SCP_PATH="/tmp/scp_logs"
577 mkdir -p $TMP_SCP_PATH
578 GetConfigFile $PEER_COMM_ID
579 scp -i $PEER_COMM_ID -r $ARM_INTERFACE_IP:$LOG_PATH/* $TMP_SCP_PATH/ > /dev/null 2>&1
580 scp -i $PEER_COMM_ID -r $ARM_INTERFACE_IP:$LOG_SYNC_PATH/$SelfHealBootUpLogFile $ARM_INTERFACE_IP:$LOG_SYNC_PATH/$PcdLogFile $TMP_SCP_PATH/ > /dev/null 2>&1
581 rm -f $PEER_COMM_ID
582
583 RPC_RES=`rpcclient $ARM_ARPING_IP "touch $SCP_COMPLETE"`
584 RPC_OK=`echo $RPC_RES | grep "RPC CONNECTED"`
585 if [ "$RPC_OK" == "" ]; then
586 echo_t "RPC touch failed : attemp 1"
587
588 RPC_RES=`rpcclient $ARM_ARPING_IP "touch $SCP_COMPLETE"`
589 RPC_OK=`echo $RPC_RES | grep "RPC CONNECTED"`
590 if [ "$RPC_OK" == "" ]; then
591 echo_t "RPC touch failed : attemp 2"
592 fi
593 fi
594
595 ATOM_FILE_LIST=`echo ${ATOM_FILE_LIST} | sed -e "s/{//g" -e "s/}//g" -e "s/,/ /g"`
596 for file in $ATOM_FILE_LIST
597 do
598 if [ -f $TMP_SCP_PATH/$file ]; then
599 rm -f $TMP_SCP_PATH/$file
600 fi
601 done
602
603 if [ -d $TMP_SCP_PATH ]; then
604 cp -r $TMP_SCP_PATH/* $LOG_PATH/
605 rm -rf $TMP_SCP_PATH
606 fi
607
608 sleep 2
609fi
610
611#Clear the final result file
612rm -f $TELEMETRY_JSON_RESPONSE
613
614
615## Generate output file with pattern to match count values
616if [ ! -f $SORTED_PATTERN_CONF_FILE ]; then
617 echo "WARNING !!! Unable to locate telemetry config file $SORTED_PATTERN_CONF_FILE. Exiting !!!" >> $RTL_LOG_FILE
618else
619 # echo_t "Using telemetry pattern stored in : $SORTED_PATTERN_CONF_FILE.!!!" >> $RTL_LOG_FILE
620 defaultOutputJSON="{\"searchResult\":[{\"<remaining_keys>\":\"<remaining_values>\"}]}"
621 echo "nice -n 19 $DCA_BINARY $SORTED_PATTERN_CONF_FILE $previousLogPath" >> $RTL_LOG_FILE
622 dcaOutputJson=`nice -n 19 $DCA_BINARY $SORTED_PATTERN_CONF_FILE $previousLogPath 2>> $RTL_LOG_FILE`
623 if [ -z "$dcaOutputJson" ];
624 then
625 dcaOutputJson=$defaultOutputJSON
626 fi
627
628 echo "dcaoutputjson----!!!!!!!!!!!!----"$dcaOutputJson
629 singleEntry=true
630
631 # Get the snmp and performance values when enabled
632 # Need to check only when SNMP is enabled in future
633 if [ "$snmpCheck" == "true" ] ; then
634 while read line
635 do
636 pattern=`echo "$line" | awk -F '<#=#>' '{print $1}'`
637 filename=`echo "$line" | awk -F '<#=#>' '{print $2}'`
638 if [ $filename == "snmp" ] || [ $filename == "SNMP" ]; then
639 retvalue=$(getSNMPUpdates $pattern)
640 header=`grep "$pattern<#=#>$filename" $MAP_PATTERN_CONF_FILE | head -n 1 | awk -F '<#=#>' '{print $1}'`
641 if $singleEntry ; then
642 tuneData="{\"$header\":\"$retvalue\"}"
643 outputJson="$outputJson$tuneData"
644 singleEntry=false
645 else
646 tuneData=",{\"$header\":\"$retvalue\"}"
647 outputJson="$outputJson$tuneData"
648 fi
649 fi
650 done < $SORTED_PATTERN_CONF_FILE
651 fi
652
653
654 ## This interface is not accessible from ATOM, replace value from ARM
655 estbMac=$(getEstbMac)
656 firmwareVersion=$(getFWVersion)
657 firmwareVersion=$(echo $firmwareVersion | sed -e "s/imagename://g")
658 partnerId=$(getPartnerId)
659 accountId=$(getAccountId)
660 erouterIpv4=$(getErouterIpv4)
661 erouterIpv6=$(getErouterIpv6)
662
663
664 if [ "$triggerType" = "1" ]; then
665 if [ "$erouterIpv4" = "null" ]; then
666 erouterIpv4="$DEFAULT_IPV4"
667 fi
668 if [ "$erouterIpv6" = "null" ]; then
669 erouterIpv6="$DEFAULT_IPV6"
670 fi
671 fi
672
673 cur_time=`date "+%Y-%m-%d %H:%M:%S"`
674
675 if $singleEntry ; then
676 outputJson="$outputJson{\"Profile\":\"RDKB\"},{\"mac\":\"$estbMac\"},{\"erouterIpv4\":\"$erouterIpv4\"},{\"erouterIpv6\":\"$erouterIpv6\"},{\"PartnerId\":\"$partnerId\"},{\"AccountId\":\"$accountId\"},{\"Version\":\"$firmwareVersion\"},{\"Time\":\"$cur_time\"}"
677 singleEntry=false
678 else
679 outputJson="$outputJson,{\"Profile\":\"RDKB\"},{\"mac\":\"$estbMac\"},{\"erouterIpv4\":\"$erouterIpv4\"},{\"erouterIpv6\":\"$erouterIpv6\"},{\"PartnerId\":\"$partnerId\"},{\"AccountId\":\"$accountId\"},{\"Version\":\"$firmwareVersion\"},{\"Time\":\"$cur_time\"}"
680 fi
681 echo "outputjson---------------"$outputJson
682
683 remain="{\"<remaining_keys>\":\"<remaining_values>\"}"
684 outputJson=`echo "$dcaOutputJson" | sed "s/$remain/$outputJson/"`
685 echo "outputjson1---------------"$outputJson
686 echo "$outputJson" > $TELEMETRY_JSON_RESPONSE
687 sleep 2
688
689 echo "TELEMETRY_JSON_RESPONSE file is -----------"$TELEMETRY_JSON_RESPONSE
690 if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
691 echo "Notify ARM to pick the updated JSON message in $TELEMETRY_JSON_RESPONSE and upload to splunk" >> $RTL_LOG_FILE
692 # Trigger inotify event on ARM to upload message to splunk
693 GetConfigFile $PEER_COMM_ID
694 if [ $triggerType -eq 2 ]; then
695 ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'notifyFlushLogs' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
696 echo_t "notify ARM for dca execution completion" >> $RTL_LOG_FILE
697 else
698 if [ -f $TELEMETRY_PREVIOUS_LOG -a $triggerType -eq 1 ];then
699 ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'previousLog' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
700 echo_t "notify ARM for dca running is for previous log" >> $RTL_LOG_FILE
701 else
702 if [ "$bootupTelemetryBackup" = "true" -a $triggerType -eq 1 ];then
703 ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'bootupBackup' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
704 else
705 ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'splunkUpload' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
706 fi
707 fi
708 fi
709 rm -f $PEER_COMM_ID
710 else
711 if [ $triggerType -eq 2 ]; then
712 touch $TELEMETRY_EXEC_COMPLETE
713 fi
714 if [ $triggerType -eq 1 -a -f $TELEMETRY_PREVIOUS_LOG ];
715 then
716 echo "calling splunkupload----------------------------"
717 sh /lib/rdk/dcaSplunkUpload.sh logbackup_without_upload &
718 else
719 sh /lib/rdk/dcaSplunkUpload.sh &
720 fi
721 proUpdel=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c`
722 echo "number of proUPdel:"$proUpdel
723 #proUpdel=$((proUpdel - 1))
724 uploadProto=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$proUpdel`
725 echo "Upload protocol is:"$uploadProto
726 if [ "$uploadProto" != "TFTP" ]; then
727 HTTPLOGUPLOADURL=`cat /tmp/DCMSettings.conf | grep -i "urn:settings:LogUploadSettings:RepositoryURL" | cut -d "=" -f2`
728 if [ "$HTTPLOGUPLOADURL" == "" ]; then
729 echo "No HTTP URL configured in xconf,going with internal one !!"
730 HTTPLOGUPLOADURL=$DCM_LA_SERVER_URL
731 fi
732 echo "HTTPURL:"$HTTPLOGUPLOADURL
733 sh $RDK_PATH/uploadSTBLogs.sh $HTTPLOGUPLOADURL 1 1 1 0 0 &
734 else
735 delimnr=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | tr -dc ':' |wc -c`
736 echo "number of deli:"$delimnr
737 delimnr=$((delimnr - 1))
738 TFTPIP=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d ":" -f$delimnr | cut -d '"' -f 2`
739 echo "TFTPIP:"$TFTPIP
740 sh $RDK_PATH/uploadSTBLogs.sh $TFTPIP 1 1 1 0 0 &
741 fi
742 fi
743fi
744
745if [ -f $RTL_DELTA_LOG_FILE ]; then
746 rm -f $RTL_DELTA_LOG_FILE
747fi
748
749if [ -f $TEMP_PATTERN_CONF_FILE ]; then
750 rm -f $TEMP_PATTERN_CONF_FILE
751fi
752
753if [ $triggerType -eq 2 ]; then
754 echo_t "forced DCA execution before log upload/reboot. Clearing all markers !!!" >> $RTL_LOG_FILE
755 # Forced execution before flusing of logs, so clear the markers
756 if [ -d $TELEMETRY_PATH_TEMP ]; then
757 rm -rf $TELEMETRY_PATH_TEMP
758 fi
759 rm -rf $TELEMETRY_PATH
760
761fi
762
763if [ -f $EXEC_COUNTER_FILE ]; then
764 dcaNexecCounter=`cat $EXEC_COUNTER_FILE`
765 dcaNexecCounter=`expr $dcaNexecCounter + 1`
766else
767 dcaNexecCounter=0;
768fi
769
770if [ -f $TELEMETRY_PREVIOUS_LOG ]; then
771 echo_t "dca for previous log done" >> $RTL_LOG_FILE
772 rm -f $TELEMETRY_PREVIOUS_LOG $SORTED_PATTERN_CONF_FILE
773 rm -rf $TEMP_NVRAM_LOG_PATH
774 touch $TELEMETRY_PREVIOUS_LOG_COMPLETE
775fi
776
777echo "$dcaNexecCounter" > $EXEC_COUNTER_FILE
778# PID file cleanup
779pidCleanup