#!/usr/bin/env bash set -ex discord_bot_name="bench-tps dos ${test_type}" discord_avatar_url="$DISCORD_AVATAR_URL" [[ -z "$DISCORD_WEBHOOK" ]]&&echo "ERROR : DISCORD_WEBHOOK=$DISCORD_WEBHOOK"&&exit 1 # give discord_txt a value to send to discord channel via webhook function discord_send(){ curl -H "Content-Type: application/json" -H "Expect: application/json" -X POST "${DISCORD_WEBHOOK}" -d "${discord_txt}" 2>/dev/null } printf -v test_config '**Test Configuration:**\\n```%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n```' \ "test-type = $test_type" "client = $client" "branch = $SOLANA_BUILD_BRANCH" "commit = $git_commit" \ "cluster version = $cluster_version" "bench-tps-clients = $num_clients" "read-client-keys = $client_keypair_path" \ "duration = $duration" "tx_count = $tx_count" "thread_batch_sleep_ms = $thread_batch_sleep_ms" "durable_nonce = $USE_DURABLE_NONCE" # Construct Slack Result_Details Report printf -v time_range 'time range: %s ~ %s' \ "$(date --rfc-3339=seconds -u -d @$start_time)" "$(date --rfc-3339=seconds -u -d @$stop_time)" printf -v slot_range '%s\\n%s' \ "$start_slot_txt" "$end_slot_txt" printf -v s_tx_count '%s\\n%s\\n%s\\n%s' \ "$mean_tx_count_txt" "$max_tx_count_txt" "$p90_tx_count_txt" "$p99_tx_count_txt" printf -v s_tower_vote_dist '%s\\n%s\\n%s\\n%s' \ "$mean_tower_vote_distance_txt" "$max_tower_vote_distance_txt" "$p90_tower_vote_distance_txt" "$p99_tower_vote_distance_txt" printf -v s_optimistic_slot_elapsed '%s\\n%s\\n%s\\n%s' \ "$mean_optimistic_slot_elapsed_txt" "$max_optimistic_slot_elapsed_txt" "$p90_optimistic_slot_elapsed_txt" "$p99_optimistic_slot_elapsed_txt" printf -v s_ct_stats_block_cost '%s\\n%s\\n%s\\n%s' \ "$mean_ct_stats_block_cost_txt" "$max_ct_stats_block_cost_txt" "$p90_ct_stats_block_cost_txt" "$p99_ct_stats_block_cost_txt" printf -v s_ct_stats_tx_count '%s\\n%s\\n%s\\n%s' \ "$mean_mean_ct_stats_tx_count_txt" "$max_mean_ct_stats_tx_count_txt" "$p90_mean_ct_stats_tx_count_txt" "$p99_mean_ct_stats_tx_count_txt" printf -v s_ct_stats_number_of_accts '%s\\n%s\\n%s\\n%s' \ "$mean_ct_stats_num_of_accts_txt" "$max_ct_stats_num_of_accts_txt" "$p90_ct_stats_num_of_accts_txt" "$p99_ct_stats_num_of_accts_txt" printf -v blocks_fill '%s\\n%s\\n%s\\n%s\\n%s' \ "$total_blocks_txt" "$blocks_fill_50_txt" "$blocks_fill_90_txt" "$blocks_fill_50_percent_txt" "$blocks_fill_90_percent_txt" printf -v skip_rate '%s\\n%s\\n%s\\n%s\\n' \ "$mean_skip_rate_txt" "$max_skip_rate_txt" "$skip_rate_90_txt" "$mean_skip_rate_b4_test_txt" printf -v buildkite_link '%s' "[Buildkite]($BUILDKITE_BUILD_URL)" printf -v grafana_link '%s' "[Grafana]($gf_url)" # compose report without link printf -v test_report '%s %s\\n%s\\n**Test Details:**\\n```%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n%s\\n```' \ "$grafana_link" "$buildkite_link" \ "$test_config" "$time_range" "$slot_range" \ "$s_tx_count" "$s_tower_vote_dist" "$s_optimistic_slot_elapsed" \ "$s_ct_stats_block_cost" "$s_ct_stats_tx_count" "$s_ct_stats_number_of_accts" "$blocks_fill" "$skip_rate" # compose discord message d_username="\"username\": \"${discord_bot_name}\"" d_content="\"content\": \"${test_report}\"" d_avatar="\"avatar_url\": \"${discord_avatar_url}\"" discord_txt="{${d_avatar},${d_username},${d_content}}"