Подскажите, есть ли такое в природе?
Именно библиотеку для встраивания найти не удалось.
Были только самодостаточние приложения.
Ситуация такая:
есть программа, которая больно много флудит в логи.
Было принято решение сжимать логи в определенное время.
В качестве метода сжатия, была выбрана библиотека zlib,
при помощи которой происходит сжатие файла в gzip формат.
Но проблема в том, что gzip может сжать лишь один файл.
Поэтому необходима библиотека, которая могла бы заархивировать
некоторое количество лог-файлов, для последующего сжатия этого архива в gzip.
Здравствуйте, Georgy Kazakov, Вы писали:
GK>Были только самодостаточние приложения.
И это хорошо.
Чем заниматься встраиванием в приложение такого функционала, лучше через system запускать внешний tar/gzip/bzip2/rar/7-zip и пр.
А еще лучше, вообще не нагружать приложение задачей архивации логов, а поручить это внешнему скрипту, который сам будет отыскивать подлежащие архивации файлы и паковать их в нужный формат. Создание такого скрипта на Ruby/Python/Perl отнимет день/два с полным тестированием. Зато затем модифицировать эти скрипты и подгонять их под новые условия будет гораздо проще.
Так что не ищите подобную библиотеку, есть более простые способы решения вышей проблемы.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Чем заниматься встраиванием в приложение такого функционала, лучше через system запускать внешний tar/gzip/bzip2/rar/7-zip и пр.
E>А еще лучше, вообще не нагружать приложение задачей архивации логов, а поручить это внешнему скрипту, который сам будет отыскивать подлежащие архивации файлы и паковать их в нужный формат. Создание такого скрипта на Ruby/Python/Perl отнимет день/два с полным тестированием. Зато затем модифицировать эти скрипты и подгонять их под новые условия будет гораздо проще.
E>Так что не ищите подобную библиотеку, есть более простые способы решения вышей проблемы.
Есть веские причины, почему мне не разрешается использовать system и тем более скрипты.
И причины эти, к сожалению, корпоративная тайна
Поэтому прошу подсказать именно по вопросу, который я задал,
а не давать советы типа "не юзай это <censored>! а юзай это <censored>!"
Здравствуйте, Georgy Kazakov, Вы писали:
GK>Есть веские причины, почему мне не разрешается использовать system и тем более скрипты. GK>И причины эти, к сожалению, корпоративная тайна
Попробуйте переубедить. Серьезно. Я ведь прошел через это: сначала архивация была встроена в приложение, потом было обнаружено несколько очень серьезных проблем с таким подходом, перешли на скрипты, затем несколько раз скрипты модифицировались. Решение на скриптах по многим параметрам выгоднее.
GK>Поэтому прошу подсказать именно по вопросу, который я задал, GK>а не давать советы типа "не юзай это <censored>! а юзай это <censored>!"
Тогда так: лично я подобных библиотек не знаю, но:
* сами утилиты вроде tar доступны в исходниках;
* ряд библиотек архивации (вроде zip) доступны в исходниках;
* архиватор 7-zip доступен в исходниках.
Так что выбирайте то, что подходит по лицензии.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Попробуйте переубедить. Серьезно. Я ведь прошел через это: сначала архивация была встроена в приложение, потом было обнаружено несколько очень серьезных проблем с таким подходом, перешли на скрипты, затем несколько раз скрипты модифицировались. Решение на скриптах по многим параметрам выгоднее.
Приложение у нас и так нагруженно постоянной обработкой данных, причем порядка 4000Гб в день.
Причем на одной системе, таких приложений может быть запущенно около 10 штук.
Вызов system для выполнение нового приложения будет тормозить систему еще больше.
Поэтому было принято решение подключать к программе библиотеки.
А как скрпты в данном случае будут работать?
Можно поподробнее?
E> E>Тогда так: лично я подобных библиотек не знаю, но: E>* сами утилиты вроде tar доступны в исходниках; E>* ряд библиотек архивации (вроде zip) доступны в исходниках; E>* архиватор 7-zip доступен в исходниках.
E>Так что выбирайте то, что подходит по лицензии.
tar в исходниках доступен только для никсовых систем.
На портирование его под Win и как библиотеку уйдет много времени,
а значит большие потери для фирмы.
zip, rar и прочие архиваторы стоят денег.
Фирма за покупку лицензий платить не будет.
Здравствуйте, Georgy Kazakov, Вы писали:
GK>Приложение у нас и так нагруженно постоянной обработкой данных, причем порядка 4000Гб в день. GK>Причем на одной системе, таких приложений может быть запущенно около 10 штук. GK>Вызов system для выполнение нового приложения будет тормозить систему еще больше. GK>Поэтому было принято решение подключать к программе библиотеки.
GK>А как скрпты в данном случае будут работать? GK>Можно поподробнее?
Можно, нет проблем.
Одна из неприятностей, с которой мы столкнулись, была в том, что приложений у нас так же было запущено несколько десятков. И все они имели свойство запускать архивацию практически одновременно, что напрочь грузило машину.
Вызов внешнего приложения удобен тем, что для него просто выставить низкий приоритет. Самый простой способ:
start /low something
Когда это запускается из скипта, это еще проще -- для смены параметров запуска не нужно перекомпилировать приложения, ведь скрипты всегда в исходниках.
Так же оказалось, что удобнее иметь один архивирующий скрипт на сервер, который сам отыскивает логи, чем настраивать архивацию для каждого приложения. Здесь же появляется дополнительная гибкость -- легко настраивать, сколько логов может архивировать в одном каталоге за раз, сколько всего за один запуск скрипта, логи каких размеров могут быть проигнорированы, логи каких размеров нельзя архивировать в дневное время (в часы наибольшей загрузки системы) и т.д.
GK>tar в исходниках доступен только для никсовых систем. GK>На портирование его под Win и как библиотеку уйдет много времени, GK>а значит большие потери для фирмы.
Вроде как есть уже портированные: http://unxutils.sourceforge.net/ (исходники доступны в CVS).
GK>zip, rar и прочие архиваторы стоят денег. GK>Фирма за покупку лицензий платить не будет.
А 7-zip? Разве он платный?
7-Zip is free software distributed under the GNU LGPL.
т.е. его даже в закрытый софт можно встраивать.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Georgy Kazakov, Вы писали:
GK>Здравствуйте.
GK>Подскажите, есть ли такое в природе? GK>Именно библиотеку для встраивания найти не удалось. GK>Были только самодостаточние приложения.
Есть libarchive, правда для *nix и на С . Лицензия — BSD. Цытата с сайта:
Libarchive is a programming library that can create and read several different streaming archive formats, including most popular tar variants and several cpio formats.
Здравствуйте, Georgy Kazakov, Вы писали:
GK>Здравствуйте.
GK>Подскажите, есть ли такое в природе? GK>Именно библиотеку для встраивания найти не удалось. GK>Были только самодостаточние приложения.
GK>Ситуация такая: GK>есть программа, которая больно много флудит в логи. GK>Было принято решение сжимать логи в определенное время.
GK>В качестве метода сжатия, была выбрана библиотека zlib, GK>при помощи которой происходит сжатие файла в gzip формат.
GK>Но проблема в том, что gzip может сжать лишь один файл. GK>Поэтому необходима библиотека, которая могла бы заархивировать GK>некоторое количество лог-файлов, для последующего сжатия этого архива в gzip.
GK>Заранее благодарен.
Есть библиотека ZipArchive. И много файлов пакует и gzip и еще на тома разрежет.