#!/bin/bash # Constants and Configuration INDEX_NAME="wazuh-agents" USERNAME="admin" PASSWORD="admin" IP="127.0.0.1" PORT="9200" # Default number of documents to index number=0 log_dir="tmp/logs" log_file="$log_dir/populate-agents-index.log" # Function to check if URL is up function wait_for_cluster() { local max_retries=12 local sleep_interval=5 # seconds local url="http://$IP:$PORT/_cluster/health" for ((i = 1; i <= max_retries; i++)); do response=$(curl -s -o /dev/null -w "%{http_code}" -u $USERNAME:$PASSWORD $url) if [[ $response -eq 200 ]]; then echo "Cluster is up and running." return 0 else echo "Cluster not available yet. Waiting..." sleep $sleep_interval fi done echo "Failed to connect to the cluster after $max_retries retries." return 1 } # Function to generate random date function generate_random_date() { local start_date local end_date local random_date start_date=$(date -u +%s) end_date=$((start_date - 864000)) random_date=$((start_date - RANDOM % (start_date - end_date))) date -u -r "$random_date" '+%Y-%m-%dT%H:%M:%S.%3NZ' } # Function to generate random groups function generate_random_groups() { local groups=() for ((i = 1; i <= $((RANDOM % 5 + 1)); i++)); do groups+=("\"group00$((RANDOM % 6))\"") done printf '[%s]' "$( IFS=, echo "${groups[*]}" )" } # Function to generate random agent function generate_random_agent() { local agent agent=$( cat < Number of documents to generate. If not provided, the script will prompt for the number of docs to generate." echo " -o (Optional) Directory to store the output log. Default: 'tmp/logs/'" echo " -h (Optional) Display this help message" echo "Example: $0 -n 100" echo exit 0 ;; n) number=$OPTARG ;; o) log_dir=$OPTARG log_file="$log_dir/populate-agents-index.log" ;; \?) echo "Invalid option: $OPTARG" 1>&2 exit 1 ;; esac done } # Main function function populate_index() { if [[ $number -lt 1 ]]; then echo -n "How many docs do you want to generate? " read -r number if ! [[ "$number" =~ ^[0-9]+$ ]]; then echo "Invalid input. Please enter a valid number." return fi fi echo "Waiting for the cluster to be up and running..." if ! wait_for_cluster; then echo "Cluster did not start in time. Exiting." exit 1 fi echo "Generating and indexing $number docs..." for ((i = 1; i <= number; i++)); do doc=$(generate_random_agent) echo "$doc" index_documents "$doc" done echo "Data generation completed." } parse_args "$@" if [[ ! -d "$log_dir" ]]; then mkdir -p "$log_dir" fi # Run the populate_index function in the background and redirect output to log file (populate_index) >"$log_file" 2>&1 &