#!/usr/bin/env bash set -o pipefail LIB_SRC=${LIB_SRC:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)} # shellcheck source=./src/utils.bash source "${LIB_SRC}/utils.bash" # shellcheck source=./src/codex.bash source "${LIB_SRC}/codex.bash" # shellcheck source=./src/prometheus.bash source "${LIB_SRC}/prometheus.bash" _experiment_type="" _experiment_id="" exp_set_outputs() { _exp_outputs="${1}" mkdir -p "${_exp_outputs}" || return 1 } _ensure_outputs_set() { if [ -z "${_exp_outputs}" ]; then echoerr "experiments output not set" return 1 fi } exp_start() { local experiment_id experiment_type="$1" _ensure_outputs_set || return 1 experiment_id="$(date +%s)-${RANDOM}" || return 1 _experiment_id="${experiment_id}" _experiment_type="${experiment_type}" _experiment_output="${_exp_outputs}/${experiment_type}-${experiment_id}" mkdir -p "${_experiment_output}" || return 1 pm_set_outputs "${_experiment_output}/pm" cdx_set_outputs "${_experiment_output}/codex" cdx_add_defaultopts "--metrics" pm_register_callback "codex" _codex_target_changed } _codex_target_changed() { local event="$1" if [ "$event" = "start" ]; then shift 3 _add_target "$@" elif [ "$event" = "exit" ]; then shift 4 _remove_target "$@" fi } _add_target() { local node_index="$1" metrics_port metrics_port=$(_cdx_metrics_port "$node_index") || return 1 prom_add "${metrics_port}" "${_experiment_type}" "${_experiment_id}"\ "${node_index}" "codex" } _remove_target() { local node_index="$1" metrics_port metrics_port=$(_cdx_metrics_port "$node_index") || return 1 prom_remove "${metrics_port}" "${_experiment_type}" "${_experiment_id}"\ "${node_index}" "codex" }