#!/bin/bash
function print_tikv_or_tiflash_status()
{
	local ti="${1}"
	local ti_file="${2}"
	local ti_args="${3}"
	local cmd_hosts="${4}"
	local cmd_indexes="${5}"
	local mod="${6}"
	local port_name="${7}"
	local address_name="${8}"

	local name=`from_mod_get_name "${mod}"`
	local dir=`from_mod_get_dir "${mod}"`
	local host=`from_mod_get_host "${mod}"`

	local port=`ssh_get_value_from_proc_info "${host}" "${dir}" "${port_name}"`
	if [ -z "${port}" ]; then
		echo "[func print_tikv_or_tiflash_status] getting port failed" >&2
		return 1
	fi
	local status=`"${integrated}/ops/ti.sh" -k "${ti_args}" -h "${cmd_hosts}" "${ti_file}" "pd/ctl_raw" "store"`
	if [ -z "${status}" ]; then
		echo "[func print_tikv_or_tiflash_status] pd/ctl_raw failed" >&2
		return 1
	fi
	local status=`echo "${status}" | print_jpath "$.stores[?(@.store.${address_name}=='${host}:${port}')].store.state_name"`
	if [ -z "${status}" ]; then
		local status="Empty"
	fi
	echo "${host}:${port} ${name} ${status}"
}

function cmd_ti_status()
{
	local ti_file="${1}"
	local ti_args="${2}"
	local cmd_mod_names="${3}"
	local cmd_hosts="${4}"
	local cmd_indexes="${5}"
	local mods="${6}"
	shift 6

	local tikv_mods=`from_mods_by_type "${mods}" 'tikv'`
	local tiflash_mods=`from_mods_by_type "${mods}" 'tiflash'`
	if [ -z "${tikv_mods}" ] && [ -z "${tiflash_mods}" ]; then
		echo '[cmd store/status] cannot find tikv or tiflash mod' >&2
		return 1
	fi

	local ti="${integrated}/ops/ti.sh"
	if [ ! -z "${tikv_mods}" ]; then
		echo "${tikv_mods}" | while read tikv_mod; do
			print_tikv_or_tiflash_status "${ti}" "${ti_file}" "${ti_args}" "${cmd_hosts}" \
				"${cmd_indexes}" "${tikv_mod}" "tikv_port" "address"
		done
	fi
	if [ ! -z "${tiflash_mods}" ]; then
		echo "${tiflash_mods}" | while read tiflash_mod; do
			print_tikv_or_tiflash_status "${ti}" "${ti_file}" "${ti_args}" "${cmd_hosts}" \
				"${cmd_indexes}" "${tiflash_mod}" "proxy_port" "peer_address"
		done
	fi
}

set -euo pipefail
cmd_ti_status "${@}"
