#!/bin/bash

__code() {
	sed -e 's/^/    /g'
}

__cat() {
	echo
	cat $@ | __code
	echo
}

check_process_count_error() {
	echo "Запущено более 300 процессов, вероятно имеет место ошибка в продукте"
	echo "Если большая часть в списке ниже имеет отношение к редуктору - сообщите разработчикам в портал"
	echo "По адресу http://helpdesk.carbonsoft.ru"
	echo
	ps aux | __code
	echo
}

check_new_reg_error() {
	echo "Не был успешно произведён автоматический переход на новую систему регистрации / активации!"
	echo "До 01.11.2015 оставлен fallback-режим, работающий по старому."
	echo "Исправить проблему можно, запустив команду:"
	echo "/usr/local/Reductor/bin/setup_master.sh"
	echo "Повторно настраивать сканирование зеркала трафика не надо"
	echo "Если во время запуска мастера регистрации и настройки будут происходить ошибки: $GOTO_SUPPORT"
	echo "Данная ошибка говорит об отсутствии валидных файлов регистрации / активации:"
	for file in reg key; do
		if [ -f /var/reg/CRB-Reductor.$file ]; then
			echo "- /var/reg/CRB-Reductor.$file"
			cat /var/reg/CRB-Reductor."$file"
			echo
		fi
	done
}

check_bridge_error() {
	echo "Для работы в режиме съема зеркала трафика с коммутатора необходимо иметь как минимум 1 bridge-интерфейс."
	echo "Его можно создать автоматически в menu -> Настройка сканирования трафика."
	echo "Список интерфейсов в системе:"
	echo
	ip link | __code
	echo
}

is_module_load_fix() {
	echo "Модуль не загружен (возможно его выключили, либо проблема с демоном запускающим его)."
	echo "Попробуем запустить:"
	echo
	$BINDIR/start.sh | __code
	echo
}

check_proc_values_error() {
	echo "Возможно ядро сконфигурировано сторонними утилитами недостаточно правильно для работы Reductor"
}

check_tcpdump_http_mirror_error() {
	echo "Для этого нужно настроить зеркало трафика."
	echo "Возможно проблема в настройке vlan, как вариант можно на mirror-порту коммутатора снимать тэгирование."
	echo "Если вы ещё не настраивали зеркало на этом сервере, то запустите menu -> Настройка сканирования трафика."
	echo "Если использовано зеркало с маршрутизатора, включите опцию в прочих настройках'Не проверять настройки сети при старте'"
	echo ""
	echo "Если до этого всё работало, а сейчас перестало - перед обращением в техническую поддержку:"
	echo "1. Проверьте, действительно ли зеркало на коммутаторе работает, возможно по какой-либо причине кто-то менял настройки"
	echo "2. Переткните сетевой кабель по которому к Carbon Reductor идёт зеркало трафика"
	echo "3. Рестартаните сеть, возможно проблема в том, что с настройками сети проводились эксперименты и изменения не откатили."
	echo "   Это можно сделать командой /etc/init.d/network restart"
}

check_cert_error() {
	echo "На сервере отсутствует файл $USERDIR/provider.pem, либо он пустой."
	echo "Нужно положить туда закрытый ключ экспортированный с USB-токена."
	echo "Если у вас уже есть *.pfx-контейнер, положите его в папку $USERDIR"
	echo "и запустите menu -> Настройки обновления списков с zapret-info... -> Установка сертификата с USB-Token"
}

check_key_in_cert_error() {
	echo "В файле $USERDIR/provider.pem не найден закрытый ключ."
	echo "Вот его содержимое:"
	__cat $USERDIR/provider.pem
	echo "Проверьте флаги, которые выставляются при экспорте ключа с USB-токена в специальной утилите"
	echo "Если всё сделано правильно, в содержимом $USERDIR/provider.pem появится секция"
	echo "BEGIN PRIVATE KEY"
	echo "..."
	echo "END PRIVATE KEY"
	echo "А это сообщение больше не будет вас беспокоить."

}

check_total_packets_error() {
	echo "Эта ошибка означает, что в модуль Carbon Reductor ни разу не попадал пакет на проверку."
	echo "Есть две основные причины которые приводят к этому. Первая - не настроено зеркало трафика (90% вероятности)."
	echo "Вторая - отсутствие фильтрующего правила в iptables (10% вероятности)"
	echo
	iptables -t filter -nvL FORWARD | __code
	iptables -t mangle -nvL PREROUTING | __code
	echo
}

check_block_fact_error() {
	echo "Эта ошибка означает, что не происходило ни одного факта блокировки."
	echo "Вполне вероятно, что модуль был запущен относительно недавно и это просто не успело произойти"
	echo "Возможно не настроено зеркало трафика"
	echo "А также возможно что ваши абоненты - замечательные добропорядочные люди и не ходят на запрещённые сайты."
}

check_url_modify_error() {
	echo "Возможно у вас указан устаревший URL сервера обновления сигнатур."
	echo "Вероятно у вас из-за этого не активируется Carbon Reductor."
	echo "В последних версиях URL сервера активации обновляется при старте."
	echo "Данная опция в большей степени является опцией для разработчиков."
}

check_list_actuality_fix() {
	echo "Эта опция означает, что список с сервера РосКомНадзора не модифицировался более 6 часов"
	echo "Возможно это связано с ЭЦП (см проверки выше)."
	echo "Возможно также это связано с неправильными записями в /etc/cron.d/reductor:"
	__cat /etc/cron.d/reductor
	echo "На всякий случай попробуем запустить обновление:"
	echo
	timeout -s 15 3500s $BINDIR/update.sh | __code
	echo
}

check_activation_fix() {
	echo "Carbon Reductor не активирован! Попробуем обратиться к серверу активации:"
	echo
	$BINDIR/reg_util activate | __code
	$BINDIR/registration.sh activation | __code
	echo
}

check_disk_space_error() {
	echo "На системном диске кончилось или кончается место!"
	df -H
	echo "Попытка найти занимающие больше всего места файлы и папки:"
	echo "Поиск может занимать время до одной минуты, пожалуйста подождите..."
	echo
	$BINDIR/find_big_files.sh | __code
	echo
}

check_network_errors_error() {
	echo "На одной из сетевых карт возникают ошибки приёма/отправки пакетов"
	echo
	ip -s -s link show label eth* | __code
	echo
}

check_dropped_packets_error() {
	echo "На одной из сетевых карт дропаются пакеты, вероятно нужно настроить полинг очередей"
	echo "Воспользуйтесь статьёй http://docs.carbonsoft.ru/pages/viewpage.action?pageId=50660098 для починки"
	echo
	ip -s -s link show label eth* | __code
	echo
	cat /proc/interrupts | __code
	echo
	cat /proc/net/dev | __code
	echo
}
