1+ #! /bin/bash
2+ # ==============================================================================
3+ # Script Name: update-message-files-meter-id.sh
4+ #
5+ # Description: This script processes message files to add a "meter_id"
6+ # field to the JSON structure of the .message files.
7+ #
8+ # Usage: ./update-message-files-meter-id.sh <BASE_DIR>
9+ #
10+ # Arguments: BASE_DIR - The base directory to process
11+ #
12+ # Requirements: jq
13+ #
14+ # ==============================================================================
15+
16+ # Check if BASE_DIR is provided
17+ if [ -z " $1 " ]; then
18+ echo " Usage: $0 <BASE_DIR>"
19+ exit 1
20+ fi
21+
22+ BASE_DIR=" $1 "
23+
24+ updated_count=0
25+ skipped_count=0
26+
27+ # Function to update the message file format to include meter_id
28+ add_meter_id_to_message_file () {
29+ local message_file=" $1 "
30+ local meter_id=" $2 "
31+
32+ # Check if the message file is already in V4 format (contains meter_id)
33+ if jq -e ' .meter_id' " $message_file " > /dev/null 2>&1 ; then
34+ skipped_count=$(( skipped_count + 1 ))
35+ return
36+ fi
37+
38+ # Extract current values from the message file
39+ local event_id=$( jq -r ' .event_id' " $message_file " )
40+ local filename=$( jq -r ' .filename' " $message_file " )
41+ local md5sum=$( jq -r ' .md5sum' " $message_file " )
42+ local data_type=$( jq -r ' .data_type' " $message_file " )
43+
44+ # Update the message file by adding "meter_id"
45+ jq --arg meter_id " $meter_id " ' . | {event_id: .event_id, meter_id: $meter_id, filename: .filename, md5sum: .md5sum, data_type: .data_type}' " $message_file " > " $message_file .tmp" && mv " $message_file .tmp" " $message_file "
46+ echo " Updated: $( basename " $message_file " ) "
47+ updated_count=$(( updated_count + 1 ))
48+ }
49+
50+ # Main script logic to process directories and files
51+ for date_dir in " $BASE_DIR " /* ; do
52+ if [ -d " $date_dir " ]; then
53+ cur_date_dir=$( basename " $date_dir " )
54+ echo " Processing date directory: $cur_date_dir "
55+
56+ for meter_dir in " $date_dir " /* ; do
57+ if [ -d " $meter_dir " ]; then
58+ meter_id=$( basename " $meter_dir " )
59+ echo " Processing meter directory: $meter_id "
60+
61+ for message_file in " $meter_dir " /* .message; do
62+ if [ -f " $message_file " ]; then
63+ add_meter_id_to_message_file " $message_file " " $meter_id "
64+ fi
65+ done
66+ fi
67+ done
68+ fi
69+ done
70+
71+ # Print the tally of updated and skipped files
72+ echo -e " \nFinished processing message files in: $BASE_DIR \n"
73+ echo " Summary of Processed Message Formats:"
74+ echo " Files updated from V3 to V4 format (added 'meter_id'): $updated_count "
75+ echo " Files already in V4 format (skipped): $skipped_count "
76+
77+ # If no files were processed
78+ if [ " $updated_count " -eq 0 ] && [ " $skipped_count " -eq 0 ]; then
79+ echo " No message files were found or processed."
80+ fi
0 commit comments