Хранение эфира по русски

CopyPolice заголовок

Предисловие:

В одной из первых статей я рассказывал про модернизацию нашей телекомпании. В ходе пуско-наладочных работ было не мало проблем, и я тогда упоминал лишь об одной из них. И вот пришло время поговорить еще об одной (как тогда показалось) мелочи. И о том, как эта мелочь выросла в целую историю.

А история эта началась вовремя приёмо – сдаточных испытаний. Когда у нас дошло дело до системы логгирования / регистрации эфира, интеграторы показали пальцем на очередной из множества сервер, со словами: «Это сервер полицейской записи. Пишет весь эфир 24/7». Конечно, удобно, надёжно, любой «чих» в эфире тут же записан и т.д. Но! Первый же логичный вопрос: а сколько данный сервер хранит записи? Давайте, для начала, обратимся к законодательству. Статья 34 Закона “О средствах массовой информации” гласит:

В целях обеспечения доказательств, имеющих значение для правильного разрешения споров, редакция радио-, телепрограммы обязана:

сохранять материалы собственных передач, вышедших в эфир в записи;

Сроки хранения:

материалов передач – не менее одного месяца со дня выхода в эфир;

Аудио- и видеозаписи вышедших в эфир радио- и телепрограмм, содержащих предвыборную агитацию, агитацию по вопросам референдума, хранятся в соответствующей организации, осуществляющей теле- и (или) радиовещание, не менее 12 месяцев со дня выхода указанных программ в эфир.

И так, вопрос по времени хранения материала, как наверно понимает дорогой читатель, ни разу не лишний. Суровые люди в пиджаках, в случае чего, могу не кисло наказать за несоблюдение такой статьи. Так вот, ответ от представителя интеграторов меня сильно удивил: «нууу… в зависимости от битрейта, разрешения и бла-бла-бла… где-то 2 – 3 месяца». Опа! Или кто-то не читал законов или кто-то пытается нас нагреть. И так, после недолгих переговоров между нами, головным предприятием и интеграторами, нас как филиал поставили перед фактом. Много слов было сказано, и про деньги, и про стандартизированные схемы, но пересказывать тут их смысла нет, не о том речь. В двух словах: е#$сь с этой x%$#ёй сам, сын мой! (ссылка на авторство фразы по картинке ниже)

Глава 1 «минус на минус дают костыли»

После приёмо – сдаточных испытаний, сели мы с инженерами думать, как решать эту проблему. Очевидное решение – наращивать память в сервере, но (крылатая фраза) денег нет, а диски там стоят SAS, что тоже не удешевляет решение. Значит нужно куда-то данные периодически перекачивать. И вот, ползая по спецификации «стандартизированного комплекса» я натыкаюсь на один из серверов вещания. Объем дискового массива – 28 Тб. Хм… путём не хитрых математических вычислений, понимаю, что такие объемы там просто не к чему. Да черт вас дери, что за «умы» выдумывали этот комплекс??? Откуда такие цифры? При наших объемах вещания, нам нужна от силы четверть! После того, как я потушил свой пылающий от негодования и недоумевания тухес, мы посчитали объем требуемого хранения полицейской записи, получили 12 Тб. Ну что же, вот нам и место! Осталось решить кто и как будет переносить данные? Ну нет, на человека вешать такие задачи – это моветон и вообще не инженерский подход. Значит ТЗ:

  • Раз в сутки, чтобы не большими объемами, забирать порцию видеофайлов mp4 из папки – источника
  • Выбирать только те файлы, что старше определенного времени, чтобы не плодить большую избыточность.
  • В то же время, в папке назначения нужно проверять и удалять файлы старше определенного времени, чтобы не хранить лишнее.
  • Естественно все действия нужно логгировать.

Глава 2 «Ну что, погнали кодить!»

Самое простое, что мне пришло в голову – C#. Дело я с ним ранее имел, да и примеров в интернете достаточно. Значит создаём проект и начинаем говнокодить.

И первое же, без чего мы не сможем обойтись, это где и как хранить настройки:

Тут же прописываем функции чтения и записи настроек. В качестве файла с настройками у нас будет .xml файл. При каждом пересохранении будем его бэкапить, на всякий случай.

Значит настройки проверили, работает. Накидываем по-быстрому простенький интерфейс (незабываем про иконку! Без неё работать будет не по феншую):

Итого имеем:

  • Указатель папки исходника
  • Указатель дней, старше которых нужно забирать файлы
  • Указатель типа файлов, на случай если в папке лежит еще куча всего. Мусор нам тянуть не нужно
  • Указатель папки назначения (архива). Туда же будем класть файл с логами.
  • Указатель дней, сколько нужно хранить файлы в архиве
  • А также указатель времени выполнения задачи и размера файла логов. По истечении последнего, файл с логами будет зачищаться автоматически.
  • Так же предусмотрим кнопку ручного копирования и ручного удаления. Это полезно при первом пуске программы, чтобы вручную перетянуть большой начальный объем данных.

Переходим к основному коду:

Тут всё просто. Вешаем таймер и сравниваем в нём текущее время с тем, что указали в настройках. Как только время пришло, выполняем функции чистки логов, копирование и удаления файлов, не забывая в логи прописать все свои действия.

Функция очистки логов проверяет, достигнут ли объем указанный в настройках, и если да, то зачищает файл. Эта функция специально идёт первая, чтобы не затирать последние свои действия. Т.е. если объем логов превышен – зачищаем их, пишем в лог об этом, а потом пишем туда какие файлы и когда были удалены и скопированы.

Функция копирования находит все файлы в указанной папке, выбирает и копирует из них по очереди все файлы, соответствующие условиям (расширение и дата изменения).

Функция удаления производит все те же итерации что и предыдущая функция, но со своими параметрами и в папе архива.

Заключение «CopyPolice»

Программа CopyPolice была написана за 3-4 дня и «подвешена» на сервере вещания. Выбрано время, когда сервер простаивал и произведен начальный перенос данных вручную. После этого программа сидит в памяти 24/7, потребляя 3-4 Мб оперативной памяти, и в назначенный час выполняет свои манипуляции. Недостаток в ходе года эксплуатации выявил только один: когда программа выполняет процессы копирования и удаления, интерфейс перестает отвечать на это время и программа как бы «подвисает». Конечно, это можно исправить, но это уже как обычно – когда дойдут руки. Ну а для тебя, мой самый усидчивый читатель, сама программа с исходниками во вложении к этой статье внизу. Надеюсь кому то она еще пригодится.

исходники проекта

Добавить комментарий

Ваш адрес электронной почты не будет опубликован.Обязательные поля помечены *