05.10.2019
Tosser — События на изменения файлов
По работе часто встает необходимость, после обработки файла какой-либо программой (те же исходники после сохранения в ide), загрузить на сетевое хранилище, или переместить в папку с тестовым окружением, загрузить на удаленный сервер и так далее.
Всегда раньше писал для этого shell скрипты, но потом решил — хватит, каждый раз тратить время на написание нового скрипта, да и иногда все же приходится программировать из под windows, где с баш скриптами все хуже обстоит…
Само собой существуют программы непрерывной интеграции, которые делают по большому счету то же самое и да же больше — но это все громоздкие серверные решения. У нас же речь идет о легком, быстром, локальном, DEV инструменте, который просто как 2 копейки и выполняет свои задачи. Без веб хуков, множества воркеров и прочего, все в одном ведерке.
Так начала появляться данная программа — Tosser (от англ. toss — бросать, толкать). Все еще разрабатываю ее и добавляю функционал. Все настройки хранятся в файле.
Краткий список возможностей:
- Перемещение файлов в папках на пк и по сети
- Загрузка файлов на удаленный SFTP
- Многопоточная обработка множества файлов и каталогов
- Выполнение команд с различными переменными по изменению файлов (например сжатие)
- Различные действия на существование файла
- Разные правила действий по маскам файлов да же в 1 папке
- Списки исключений по маскам
- Статистика реалтайм в браузере (отключается, если не нужна).
- Интервалы сканирования изменений в файлах
- Моментальное автообновление конфигурационного файла в программе
- Встроенная ротация логов
Что планируется добавить в ближайшее время:
Поддержка SFTP- Поддержка FTP
- Сворачивание в трей
- Поддержка webUpload
- Больше переменных внутри обработки команд
- Выполнение команд на удаленном сервере по SSH
- Выполнение веб-хуков (обращение к адресам после исполнения правил)
В первую очередь, сюда попадают задачи, которые мне самому приходится решать довольно часто.
Файл конфигурации с полным описанием и примерами
За основу конфига, был взят от другого софта, структура показалась мне довольно удобной для заполнения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
#Включить просмотр статистики по HTTP enable_http: true #адрес:порт на котором будет доступна статистика listen: 0.0.0.0:8899 #Интервал сканирования всех папок (в секундах) rescaninterval: 10 #max_scan_threads - количество потоков сканирования папок #Такой поток сканирует папки в поисках подходящих под правила файлов, #а затем отдает найденные файлы потокам копирования max_scan_threads: 4 #max_copy_threads - количество потоков, которые копируют файлы, найденные потоками сканирования max_copy_threads: 4 #Уровень отладки. #Допустимые значения: DEBUG INFO ERROR loglevel: INFO #максимальный размер лога в Мб log_max_size: 100 #сколько лог-файлов хранить log_max_backups: 10 #после скольки дней удалять лог log_max_age: 30 #расположение лог-файла log_filename: 'logs/fm.log' #глобальный список исключений #файлы с заданными тут масками будут игнорироваться excludemasks: - '*.tmp' - 'thumbs.db' #Папки для сканирования #Если необходимо несколько папок обработать одинаковыми правилами - перечислять их тут #- src_dirs: # - c:\test\src # - c:\test\src2 # есть шаблоны даты %Y%m%d (ггггммдд) и %H%M%S (ЧЧ24ММСС) # #Список исключений для папки и под папок # excludemasks: # - '*.tmp' # - 'thumbs.db' # #Набор правил в src_dir # rules: # 0: # masks: # - '*.exe' # - '*.dll' # excludemasks: # - '123*.exe' # dst_dir: c:\test\dst\%Y%m%d # ifexists: replace # mode: move # # masks: - список масок, которые будут применяться к файлам внутри папок src_dir # dst_dir: - куда копировать/перемещать найденные по маскам (masks) файлы # допустимо использовать шаблоны для даты %Y%m%d (ггггммдд) и %H%M%S (ЧЧ24ММСС) # ifexists: - что делать, если файл уже существует в каталоге, куда копируется файл # допустимые значения: replace - заменить, skip - пропустить и не копировать файл # mode: - режим обработки файлов. move - перемещать, при этом остальные правила будут пропущены # copy - копировать файлы, при этом будут применены другие правила, если они есть # ВНИМАНИЕ! если не будет ни одного правила с mode: move, то один и тот же файл будет копироваться бесконечно! # ВНИМАНИЕ! если первое правило настроено в режиме копирования с пропуском существующих файлов, а второе (с теми же масками) на перемещение, # то если в каталоге назначения первого правила файл будет существовать, файл скопирован не будет, # а второе правило переместит его. В итоге в каталог назначения первого правила файл НЕ ДОЙДЕТ scangroups: - src_dirs: - c:\test\src - c:\test\src2 enabled: false #отключено для примера create_src: true excludemasks: - '*.tmp' - 'thumbs.db' rules: 0: masks: - '*.exe' - '*.dll' excludemasks: - '123*.exe' dst_dir: c:\test\dst\%Y%m%d ifexists: replace mode: move #Пример в котором для папок настроено два правила #Первое копирует, найденные файлы в одну папку, а второе перемещает их во вторую - src_dirs: - c:\test\src3 - c:\test\src4 enabled: false #отключено для примера create_src: true excludemasks: - '*.tmp' - 'thumbs.db' rules: #копируем 0: masks: - '*.xml' dst_dir: c:\test\dst2\ ifexists: replace mode: copy #перемещаем 1: masks: - '*.xml' dst_dir: c:\test\dst3\ ifexists: replace mode: move #Пример в котором файлы загружаются по SFTP #папка назначения указывается любая, она будет игнорирована и взята из параметров подключения - src_dirs: - c:\test\src3 - c:\test\src4 enabled: false #отключено для примера create_src: true excludemasks: - '*.tmp' - 'thumbs.db' rules: #копируем 0: masks: - '*.jar' dst_dir: c:\test\dst2\ ifexists: replace mode: SFTP SFTP: ip_server: 127.0.0.1 login: root password: root port: 22 folder: /root/ #Пример в котором файлы не копируются, к ним запускается команда #папка назначения указывается любая, она будет проигнорена и взята из параметров подключения - src_dirs: - /home/less/ enabled: false #отключено для примера create_src: false excludemasks: - '*.tmp' rules: #выполняем задачу 0: masks: - '*.less' dst_dir: /home/css/ ifexists: replace mode: exec #Переменные которые обрабатываются внутри команды: #{FILE_PATH_FULL} - полный путь до исходного файла #{dst_dir} - значение поля dst_dir текущего правила #{FILE_ONLY_NAME} - имя файла без разширения exec: 'lessc -x {FILE_PATH_FULL} > {dst_dir}/{FILE_ONLY_NAME}.css' |
- Размер: 6,9 MB
- Скачиваний: 98