Данное программное обеспечение предназначено для использования в сети `FidoNet` и других FTN-сетях

---

# T-Hist для Linux x86_64/i686 и Windows 64/32

Утилита `T-Hist` создаёт текстовые файлы с графиками и гистограммами загрузки узла FTN-сети и со статистикой по сессиям и линкам
за указанный интервал суток для заданных FTN-адресов (групп адресов). Информация о загрузке берется из файлов истории (бинарных логов) мейлеров.
`T-Hist` поддерживает форматы бинарных логов следующих мейлеров: T-Mail, Binkd, Argus, The Brake!, Bink/+, FhMail, DVMmail, KittenMail,
BinkleyTerm-XE, FrontDoor, InternetRex, X-Mail32, BasicMail.

Разработку `T-Hist` я начал в 1996 году. Последняя версия `T-Hist` `0.30.alpha7` для DOS, OS/2 и NT (win32) была выпущена в 2003 году (архив с этой версией находится в каталоге `_old`).
Через 23 года я снова взялся за исходники и скомпилировал `T-Hist`, а также сопутствующие утилиты `LnkStat` и `DmpHist`, для Linux x86_64/i686 и Windows 64/32.

Данный архив содержит исполняемые файлы в следующих каталогах:
* `linux` &ndash; исполняемые файлы Linux для архитектур x86_64 и i686;
* `linux-static` &ndash; исполняемые файлы Linux для архитектур x86_64 и i686, скомпилированные со статическими библиотеками;
* `windows` &ndash; исполняемые файлы для Windows 64-bit и 32-bit.

Полную документацию на новую версию я пока не сделал. В качестве основы можно взять описание утилит и пример конфигурационного файла из архива с версией `0.30.alpha7` в каталоге `_old`.
Возможные сообщения об ошибках при распаковке архива игнорируйте: `unzip` распаковывает архив без ошибок, а `7z` сообщает об ошибках, но извлекает файлы правильно.

Текстовые файлы и пример конфигурационного файла в архиве со старой версией имеют кодировку CP866, окончание строк досовское.
Для использования в Linux старого конфигурационного файла сконвертируйте его в Unix-формат:

```shell
dos2unix t-hist.ctl
```

Для сохранения русского текста в параметрах, имеющих текстовые значение, и в комментариях используйте кодировку UTF-8.

## Используемые ниже термины

- Под термином `старые версии` понимается версия `T-Hist` `0.30.alpha7`, выпущенная в 2003 году, и более ранние версии утилиты.

- Под термином `параметр` понимается параметр в конфигурационном файле. 

- Под терминами `группа`, `группа адресов` понимается адрес, заданный в параметре `Addr` с использованием хотя бы одного макроса `#`.
Адреса, заданные с использованием символов подстановки `*`, но не содержащие макросов `#`, группами не являются.

- Термины `бинарный лог` и `файл истории` эквивалентны.

## Основные особенности новой версии

- Все утилиты выводят информацию и создают выходные текстовые файлы в кодировке UTF-8.
Для размещения статистики в русскоязычных эхоконференциях/нетмейле текстовые файлы необходимо преобразовать в кодировку CP866:

	```shell
	iconv -f UTF-8 -t CP866 in.txt -o out.txt
	```

- Дополнительно утилитам `LnkStat` и `DmpHist` (но не `T-Hist`) добавлена опция командной строки `-u` для выбора кодировки выводимой информации:

	`-u`, `-u+` &ndash; использовать UTF-8 (по умолчанию)

	`-u-` &ndash; использовать ASCII 7-bit без символов псевдографики

- Корректировка длительности коротких сессий: для сессий, записанных в бинарный лог с длительностью 0 секунд, задаётся длительность 1 секунда.
Это позволяет более корректно строить гистограммы загрузки.

	**Причина корректировки**: интервалы времени в бинарных логах записаны с точностью до секунды (форматы бинарных логов разрабатывались во времена dial-up,
когда сессий короче секунды практически не было). Но при использовании Fido-over-IP в сетях с высокой пропуской способностью часто сессии длятся меньше секунды.
Для таких сессий в бинарный лог будет записана длительность 0 секунд. Старые версии не учитывали такие короткие сессии при построении гистограмм загрузки.

	**Исключение**: утилита `DmpHist` такую корректировку длительности сессий не делает. Эта утилита продолжает работать по-старому:
выводит сырые данные из бинарных логов без какой-либо корректировки. Для сессий короче секунды утилита выведет длительность 0 секунд, как записано в бинарном логе.

	**Побочный эффект корректировки**: заниженная оценка по-умолчанию среднего CPS (Characters per Second - количество символов/байт, передаваемых за одну секунду).
По-умолчанию при подсчёте среднего CPS суммируется длительность всех сессий: и непустых, и пустых. В старых версиях большинство пустых IP-сессий имели длительность 0 секунд
(как записано в бинарном логе) и не увеличивали суммарное время всех сессий. После данного изменения каждая пустая сессия увеличивает расчётное суммарное время как минимум на 1 секунду,
хотя скорее всего сессия была короче. Чем больше пустых сессий обработано, тем сильнее подсчитанная сумма длительностей всех сессий будет превышать реальное суммарное время,
что приводит к заниженной оценке CPS. Для совместимости со старыми версиями такое поведение по-умолчанию сохранено.
А для более корректного подсчёта среднего CPS при использовании IP-мейлеров укажите в конфигурационном файле:

	`AdvancedCPS Yes`

- На гистограммах уровень загрузки больше 0%, но меньше 3% отображается с помощью символа `_`.
В старых версиях из-за отсутствия подходящего символа псевдографики такой уровень загрузки либо отображался избыточно большим - как уровень 3-10%, либо не отображался вообще.

- Порядок задания адресов с помощью параметров `Addr` теперь не важен. Независимо от того, в каком порядке заданы адреса и группы адресов, при генерации статистики они будут отсортированы
от менее общих к более общим. При этом исключаемые адреса и группы адресов будут размещены в начале списка, попутно удаляя все адреса, совпадающие с исключаемой группой.
Повторные задания одних и тех же адресов будут игнорироваться. Например, если в конфигурационном файле указано:

	```yaml
	Addr 2:5020/#.#
	Addr 2:5020/378.0
	Addr #:#/#.#
	Addr 2:5020/378.0
	Addr 2:#/#.#
	Addr 2:5020/1132.0
	Addr 2:5020/408.0
	Addr !2:5020/1132.*
	Addr !*:*/*.666
	Addr 2:5020/715.#
	Addr 2:5020/1132.0
	Addr !2:5020/408.0
	```

	то при генерации статистики будет использоваться вот такой список адресов:

	```yaml
	Addr !2:5020/408.0
	Addr !2:5020/1132.*
	Addr !*:*/*.666
	Addr 2:5020/378.0
	Addr 2:5020/715.#
	Addr 2:5020/#.#
	Addr 2:#/#.#
	Addr #:#/#.#
	```

- Новый алгоритм просмотра списка адресов, заданных параметрами `Addr`, при генерации статистики. В старых версиях просмотр списка адресов завершался
после первого совпадения адреса сессии с одним из адресов `Addr`. Теперь если адрес сессии не задан как исключаемый из статистики, просмотр будет продолжаться до конца списка.
Такой алгоритм позволяет учесть сессии с отдельно заданным адресом также и в статистике по группам, к которым принадлежит адрес. Например, для списка адресов

	```yaml
	Addr !2:5020/1132.0
	Addr 2:5020/378.0
	Addr 2:5020/#.#
	Addr 2:#/#.#
	Addr #:#/#.#
	```

	сессии с адресом `2:5020/378.0` будут учтены не только в отдельной статистике для этого адреса, но и в групповой статистике сессий с адресами из сети `2:5020`,
	в групповой статистике сессий с адресами из второй зоны и в групповой статистике сессий с любыми адресами. А сессии с адресом `2:5020/1132.0` будут игнорироватся.

- Исправлена обработка исключаемых из статистики адресов (например, `Addr !2:5020/1132.0`).
В старых версиях сессии с таким адресами ошибочно отображались в таблице сессий, причём всегда как оборванные. Теперь такие адреса исключены из всех видов статистики.

- В таблице сессий время начала сессий теперь указывается с точностью до секунд (в старых версиях была точность до минут).
Время окончания сессий исключено по причине избыточности &ndash; в таблице приведена длительность сессий.

- В таблице сессий теперь отмечаются оборванные сессии мейлера Binkd. Раньше для оборванных сессий Binkd отметка `A` (aborted) после адреса не ставилась.

- Действие параметра `NoDrawZero` распространяется и на гистограммы (в старых версиях этот параметр влиял только на графики).
Теперь общая гистограмма загрузки всегда соответствует "суммированию" всех строк графика.

- Утилита `DmpHist` выводит время начала сессий в точности так, как оно записано в бинарном логе, без каких-либо корректировок. Параметр `TimeShift` игнорируется.
Также `DmpHist` теперь выводит в конце таблицы более подробную расшифровку битов статуса сессий.

- Имена параметров в конфигурационном файле и их значения регистронезависимые за исключением имён файлов в Linux.

- Исполняемые файлы Linux, скомпилированные со статическими библиотеками, сжаты упаковщиком исполняемых файлов [UPX 4.2.4](https://upx.github.io) для уменьшения размера.

## Оптимизация

При использовании `T-Hist` только для обработки бинарных логов IP-мейлера Binkd целесообразно указать в конфигурационном файле:

`SupportNewFormat No`

Бинарный лог Binkd имеет старый формат. Отключение поддержки нового формата заодно отключит поддержку всех мейлеров, за исключением Binkd и T-Mail до версии 2603,
что уменьшит количество различных проверок во время выполнения программ.

## Как добавить поддержку нового мейлера

Чтобы использовать `T-Hist` вместе с мейлерами, которые он не поддерживает, необходимо сконвертировать логи мейлеров в один из форматов бинарных логов, понимаемых `T-Hist`.
Проще всего использовать формат бинарного лога Binkd и T-Mail до версии 2603 (так называемый старый формат). Подробнее читайте в файле `ADD-NEW-MAILER-ru.md`.

## Благодарности

Выражаю благодарность Alex Barinov `2:5020/715`, `2:50/0` за тестирование новых версий `T-Hist` на своём узле.
Также благодарю всех, чьи идеи, предложения и помощь в тестировании позволили создать и развивать этот проект.
Имена некоторых из этих людей приведены в файле документации к старой версии.

---

Mikhail Markovskiy (klug), 2:5020/378

https://klug-photo.dreamwidth.org/709558.html

https://klug.livejournal.com/1102966.html