developer | 15a4331 | 2022-04-12 11:23:23 +0800 | [diff] [blame] | 1 | #!/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 | |
| 24 | echo "inside dca_utility script with 1 as value for arguments" |
| 25 | |
| 26 | if [ -f /lib/rdk/utils.sh ]; then |
| 27 | . /lib/rdk/utils.sh |
| 28 | fi |
| 29 | if [ -f /etc/mount-utils/getConfigFile.sh ];then |
| 30 | . /etc/mount-utils/getConfigFile.sh |
| 31 | fi |
| 32 | source /etc/log_timestamp.sh |
| 33 | source /lib/rdk/getpartnerid.sh |
| 34 | source /lib/rdk/getaccountid.sh |
| 35 | EROUTER_IF=erouter0 |
| 36 | DCMRESPONSE="$PERSISTENT_PATH/DCMresponse.txt" |
| 37 | DCM_SETTINGS_CONF="/tmp/DCMSettings.conf" |
| 38 | |
| 39 | TELEMETRY_PATH="$PERSISTENT_PATH/.telemetry" |
| 40 | TELEMETRY_PATH_TEMP="$TELEMETRY_PATH/tmp" |
| 41 | TELEMETRY_PROFILE_PATH="$PERSISTENT_PATH/.DCMSettings.conf" |
| 42 | LOG_SYNC_PATH="/rdklogs/logs/" |
| 43 | |
| 44 | RTL_LOG_FILE="$LOG_PATH/dcmProcessing.log" |
| 45 | RTL_DELTA_LOG_FILE="$RAMDISK_PATH/.rtl_temp.log" |
| 46 | MAP_PATTERN_CONF_FILE="$TELEMETRY_PATH/dcafile.conf" |
| 47 | TEMP_PATTERN_CONF_FILE="$TELEMETRY_PATH/temp_dcafile.conf" |
| 48 | EXEC_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 |
| 52 | SORTED_PATTERN_CONF_FILE="$TELEMETRY_PATH/dca_sorted_file.conf" |
| 53 | |
| 54 | current_cron_file="$PERSISTENT_PATH/cron_file.txt" |
| 55 | |
| 56 | #Performance oriented binaries |
| 57 | DCA_BINARY="/usr/bin/dca" |
| 58 | |
| 59 | TELEMETRY_INOTIFY_FOLDER=/rdklogs/logs/ |
| 60 | TELEMETRY_INOTIFY_EVENT="$TELEMETRY_INOTIFY_FOLDER/eventType.cmd" |
| 61 | TELEMETRY_EXEC_COMPLETE="/tmp/.dca_done" |
| 62 | SCP_COMPLETE="/tmp/.scp_done" |
| 63 | |
| 64 | PEER_COMM_ID="/tmp/elxrretyt.swr" |
| 65 | IDLE_TIMEOUT=30 |
| 66 | |
| 67 | DEFAULT_IPV4="<#=#>EROUTER_IPV4<#=#>" |
| 68 | DEFAULT_IPV6="<#=#>EROUTER_IPV6<#=#>" |
| 69 | TELEMETRY_PREVIOUS_LOG="/tmp/.telemetry_previous_log" |
| 70 | TELEMETRY_PREVIOUS_LOG_COMPLETE="/tmp/.telemetry_previous_log_done" |
| 71 | TEMP_NVRAM_LOG_PATH="/tmp/nvram2_logs/" |
| 72 | NVRAM_LOG_PATH="/nvram/logs/" |
| 73 | |
| 74 | |
| 75 | # Retain source for future enabling. Defaulting to disable for now |
| 76 | snmpCheck=false |
| 77 | |
| 78 | dcaCleanup() |
| 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 |
| 99 | if [ ! -f /tmp/.dca-utility.pid ];then |
| 100 | # store the PID |
| 101 | echo $$ > /tmp/.dca-utility.pid |
| 102 | echo "No dca-utility pid -------" |
| 103 | else |
| 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 |
| 123 | fi |
| 124 | |
| 125 | mkdir -p $LOG_PATH |
| 126 | touch $RTL_LOG_FILE |
| 127 | |
| 128 | previousLogPath="" |
| 129 | if [ -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 |
| 148 | fi |
| 149 | |
| 150 | if [ ! -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 |
| 155 | fi |
| 156 | |
| 157 | |
| 158 | PrevFileName='' |
| 159 | |
| 160 | #Adding support for opt override for dcm.properties file |
| 161 | if [ "$BUILD_TYPE" != "prod" ] && [ -f $PERSISTENT_PATH/dcm.properties ]; then |
| 162 | . $PERSISTENT_PATH/dcm.properties |
| 163 | else |
| 164 | . /etc/dcm.properties |
| 165 | fi |
| 166 | |
| 167 | |
| 168 | if [ ! -d "$TELEMETRY_PATH_TEMP" ] |
| 169 | then |
| 170 | echo_t "Telemetry Folder does not exist . Creating now" |
| 171 | mkdir -p "$TELEMETRY_PATH_TEMP" |
| 172 | else |
| 173 | cp $TELEMETRY_PATH/rtl_* $TELEMETRY_PATH_TEMP/ |
| 174 | fi |
| 175 | |
| 176 | mkdir -p $TELEMETRY_PATH |
| 177 | |
| 178 | pidCleanup() |
| 179 | { |
| 180 | # PID file cleanup |
| 181 | if [ -f /tmp/.dca-utility.pid ];then |
| 182 | rm -rf /tmp/.dca-utility.pid |
| 183 | fi |
| 184 | } |
| 185 | |
| 186 | if [ $# -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 |
| 190 | fi |
| 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 | |
| 197 | triggerType=$1 |
| 198 | echo_t "dca: Trigger type is :"$triggerType |
| 199 | |
| 200 | cd $LOG_PATH |
| 201 | |
| 202 | |
| 203 | isNum() |
| 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 |
| 214 | getEstbMac() |
| 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 |
| 234 | getErouterIpv4() |
| 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 |
| 245 | getErouterIpv6() |
| 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 | |
| 255 | getSNMPUpdates() { |
| 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 |
| 278 | getControllerId(){ |
| 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 |
| 299 | getRFStatus(){ |
| 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 | |
| 316 | processJsonResponse() |
| 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 | |
| 352 | scheduleCron() |
| 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 | |
| 413 | dropbearRecovery() |
| 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 | |
| 432 | clearTelemetryConfig() |
| 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 |
| 470 | generateTelemetryConfig() |
| 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 |
| 516 | if [ $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 |
| 522 | fi |
| 523 | |
| 524 | # Pull the settings from Telemetry server periodically |
| 525 | estbMacAddress=`ifconfig erouter0 | grep HWaddr | cut -c39-55` |
| 526 | JSONSTR=$estbMacAddress |
| 527 | CURL_CMD="curl '$DCM_LOG_SERVER_URL?estbMacAddress=$JSONSTR&model=$MODEL_NAME' -o $DCMRESPONSE > /tmp/httpcode.txt" |
| 528 | |
| 529 | # Execute curl command |
| 530 | result= eval $CURL_CMD |
| 531 | sleep 5 |
| 532 | echo "sleep for :------------------$timeout" |
| 533 | |
| 534 | # Regenerate config only during boot-up and when there is an update |
| 535 | if [ ! -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 |
| 569 | fi |
| 570 | |
| 571 | mkdir -p $TELEMETRY_PATH_TEMP |
| 572 | |
| 573 | if [ "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 |
| 609 | fi |
| 610 | |
| 611 | #Clear the final result file |
| 612 | rm -f $TELEMETRY_JSON_RESPONSE |
| 613 | |
| 614 | |
| 615 | ## Generate output file with pattern to match count values |
| 616 | if [ ! -f $SORTED_PATTERN_CONF_FILE ]; then |
| 617 | echo "WARNING !!! Unable to locate telemetry config file $SORTED_PATTERN_CONF_FILE. Exiting !!!" >> $RTL_LOG_FILE |
| 618 | else |
| 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 |
| 743 | fi |
| 744 | |
| 745 | if [ -f $RTL_DELTA_LOG_FILE ]; then |
| 746 | rm -f $RTL_DELTA_LOG_FILE |
| 747 | fi |
| 748 | |
| 749 | if [ -f $TEMP_PATTERN_CONF_FILE ]; then |
| 750 | rm -f $TEMP_PATTERN_CONF_FILE |
| 751 | fi |
| 752 | |
| 753 | if [ $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 | |
| 761 | fi |
| 762 | |
| 763 | if [ -f $EXEC_COUNTER_FILE ]; then |
| 764 | dcaNexecCounter=`cat $EXEC_COUNTER_FILE` |
| 765 | dcaNexecCounter=`expr $dcaNexecCounter + 1` |
| 766 | else |
| 767 | dcaNexecCounter=0; |
| 768 | fi |
| 769 | |
| 770 | if [ -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 |
| 775 | fi |
| 776 | |
| 777 | echo "$dcaNexecCounter" > $EXEC_COUNTER_FILE |
| 778 | # PID file cleanup |
| 779 | pidCleanup |