Skip to content

Commit 998c953

Browse files
committed
Added optional handle duplicates step in federated reporting import
This feature removes duplicate hostkey entries during federated reporting import based on lastreporttimestamp in __hosts table. Enable this feature by defining a class in augments (def.json): { "classes": { "cfengine_mp_fr_handle_duplicate_hostkeys": ["any::"] } } Ticket: ENT-6035 Changelog: title
1 parent 83c4e0c commit 998c953

3 files changed

Lines changed: 28 additions & 1 deletion

File tree

cfe_internal/enterprise/federation/federation.cf

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,8 @@ bundle agent federation_manage_files
316316
"feeder_username" data => parsejson('{"feeder_username":"$(cfengine_enterprise_federation:config.transport_user)"}');
317317
"feeder" data => parsejson('{"feeder": "$(sys.key_digest)"}');
318318
"cf_version" data => parsejson('{"cf_version":"$(sys.cf_version)"}');
319+
"handle_duplicates_value" string => ifelse("cfengine_mp_fr_handle_duplicate_hostkeys", "yes", "no");
320+
"handle_duplicates" data => parsejson('{"handle_duplicates":"$(handle_duplicates_value)"}');
319321

320322
files:
321323
enterprise_edition.(policy_server|am_policy_hub)::
@@ -364,7 +366,11 @@ bundle agent federation_manage_files
364366
create => "true",
365367
template_method => "mustache",
366368
edit_template => "$(this.promise_dirname)/../../../templates/federated_reporting/config.sh.mustache",
367-
template_data => mergedata(@(login), @(feeder_username), @(feeder), @(cf_version),
369+
template_data => mergedata(@(login),
370+
@(feeder_username),
371+
@(feeder),
372+
@(cf_version),
373+
@(handle_duplicates),
368374
parsejson('{"inventory_refresh_cmd": ""}')),
369375
perms => default:mog( "640", "root", "$(transport_user)" );
370376

templates/federated_reporting/config.sh.mustache

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,5 @@ CFE_FR_IMPORT_FILTERS_DIR="${CFE_FR_IMPORT_FILTERS_DIR:-$DEFAULT_PREFIX/superhub
7676
CFE_FR_INVENTORY_REFRESH_CMD="{{inventory_refresh_cmd}}"
7777
CFE_FR_DB_USER="{{db_user}}"
7878
CFE_FR_DB_USER="${CFE_FR_DB_USER:-cfpostgres}"
79+
CFE_FR_HANDLE_DUPLICATES="{{handle_duplicates}}" # default is no (don't handle duplicates as it adds to time to import)
80+
CFE_FR_HANDLE_DUPLICATES="${CFE_FR_HANDLE_DUPLICATES:-no}"

templates/federated_reporting/import.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ true "${CFE_FR_COMPRESSOR_EXT?undefined}"
1717
true "${CFE_FR_EXTRACTOR?undefined}"
1818
true "${CFE_FR_TABLES?undefined}"
1919
true "${CFE_FR_INVENTORY_REFRESH_CMD?undefined}"
20+
true "${CFE_FR_HANDLE_DUPLICATES?undefined}"
2021

2122
if ! type "$CFE_FR_EXTRACTOR" >/dev/null; then
2223
log "Extractor $CFE_FR_EXTRACTOR not available!"
@@ -57,8 +58,10 @@ table_whitelist=$(printf "'%s'," $CFE_FR_TABLES | sed -e 's/,$//')
5758

5859
failed=0
5960
log "Setting up schemas for import"
61+
declare -a hostkeys
6062
for file in $dump_files; do
6163
hostkey=$(basename "$file" | cut -d. -f1)
64+
hostkeys+=($hostkey)
6265
"$CFE_BIN_DIR"/psql -U $CFE_FR_DB_USER -d cfdb --set "ON_ERROR_STOP=1" \
6366
-c "SELECT ensure_feeder_schema('$hostkey', ARRAY[$table_whitelist]);" \
6467
> schema_setup.log 2>&1 || failed=1
@@ -100,6 +103,22 @@ else
100103
done
101104
fi
102105

106+
if [ "$CFE_FR_HANDLE_DUPLICATES" = "yes" ]; then
107+
log "Handle Duplicate Hostkeys"
108+
hostkey_list=$(printf "'%s'," ${hostkeys[*]} | sed -e 's/,$//')
109+
"$CFE_BIN_DIR"/psql -U $CFE_FR_DB_USER -d cfdb --set "ON_ERROR_STOP=1" \
110+
-c "SELECT handle_duplicate_hostkeys_in_import(ARRAY[$hostkey_list]);" \
111+
> duplicates.log 2>&1 || failed=1
112+
if [ "$failed" = "0" ]; then
113+
log "Handle Duplicate Hostkeys: DONE"
114+
else
115+
log "Handle Duplicate Hostkeys: FAILED"
116+
log "last 10 lines of duplicates.log"
117+
tail -n 10 duplicates.log
118+
exit 1
119+
fi
120+
fi
121+
103122
failed=0
104123
log "Attaching schemas"
105124
for file in $dump_files; do

0 commit comments

Comments
 (0)