- For use this script bundle your PixHawk must connect to Companation Computer with USB (NOT UART!)
- Нельзя запрашивать несколько mavftp-команд параллельно, будет ошибка: "FTP: Busy". По этой причине нельзя создавать несколько downloader'ов, а также по этой причине введена mavftp_lock между downloader'ом и finder'ом. Аналогичным образом работает QGC.
- Найти ошибку в crc32 для проверки файлов по контрольной сумме
- Ускорить загрузку логов mavlink/mavros#874
- Переполнение лога программы
- Не запуск программы из-за ошибки (например, db.json incorrect)
- Хеш не совпадает
- Нет места на сервере
- Как помечать на сервере файлы, которые только передаются
- Нужно добавить автоматическое создание бекапа бд
- Начинаем качать в буффер сначала или с сохраненной позции
- Спрашиваем сколько мы передали без ошибок
- Смотрим, что у нас есть в буффере
- Сбрасываем буффер (выбрасываем исключение в target.write()), если у нас позиция невходит в него
Данные случаи не должны приводить к остановке программы требующей участия человека, а также к перезаписи всего файла сначала
- Выключение программы и RPi
- Горячее изъятие и вставка флеш-карты
- Выключение FTP
-
Если процесс непрерывный и последовательный, можно сделать одну числовую переменную, описывающую состояния файла. Например:
- 0 - лог найден в source
- 1 - лог скачен в local
- 2 - лог выкачен в target
- 3 - лог удален из source
- 4 - лог выкачен не полностью
-
Reverse direction
-
Надежность
- Вот так можно сломать:
pi@raspberrypi:~ $ sudo mount /dev/disk/by-uuid/5C3D-DD9E /mnt
FUSE exfat 1.2.5
ERROR: 'Video_Tuner_WP_20151216_004_110904.mp4' points to invalid cluster 0.
- Если качать с FTP на DISK и отключать диск, бывает так, что файл не сохраняет свою позицию. Мб нужно добавить в деструктор какой-нибудь внутренний Lock (ожидание чтобы операции download & upload завершились). Или что-то, что могло бы вызвать ошибку в их работе или прерывание.
ротация логов мб конфиг и бд где то в другом месте держать?
/mnt/20190403_122014/20190403_122537_816_R.jpg
20190403_122533_785_R.jpg.part
"target_path": "", "downloaded": true, "source_path": "/20190403_122014/20190403_122537_816_R.jpg", "uploaded": false, "dropped": false, "size": 196048
Apr 04 08:14:11 raspberrypi manager.py[314]: 2019-04-04 08:14:11,213 - ERROR - test-1@192.168.20.186: Renaming was interrupted: 550 No such file or directory.
Apr 04 08:14:11 raspberrypi manager.py[314]: 2019-04-04 08:14:11,984 - INFO - D1C6-0146: Started w 0
Apr 04 08:14:11 raspberrypi manager.py[314]: 2019-04-04 08:14:11,987 - ERROR - D1C6-0146: Downloading was interrupted: [Errno 2] No such file or directory: '/mnt/20190403_122014/20190403_122537_816_R.jpg'
[I 2019-04-04 15:07:33] ::ffff:192.168.20.172:55558-[test-1] CWD /Users/smirart/github/filesync/temp 250
[I 2019-04-04 15:07:33] ::ffff:192.168.20.172:55558-[test-1] RNFR /Users/smirart/github/filesync/temp/20190403_160336_487_R.jpg.part 550 'No such file or directory.'
[I 2019-04-04 15:07:34] ::ffff:192.168.20.172:55558-[test-1] CWD /Users/smirart/github/filesync/temp 250
[I 2019-04-04 15:07:34] ::ffff:192.168.20.172:55558-[test-1] RNFR /Users/smirart/github/filesync/temp/20190403_160336_487_R.jpg.part 550 'No such file or directory.'
drone@drone:~/Desktop/filesync$ sudo ./src/ftp_server.py
Traceback (most recent call last):
File "./src/ftp_server.py", line 7, in <module>
from pyftpdlib.authorizers import DummyAuthorizer
ImportError: No module named pyftpdlib.authorizers
Добавить в логи разделение \t
мб разделить логи программы на
если не скаченный файл уже удален нужно посмотреть его на удаленном сервере
Filesync Synchronizer
- путь + hesh + мб mountpoint
- Выявление поддеревьев в деревьях
- Нужно выделить максимально большое поддерево
- мб нужно чтобы прога строила большой граф со всеми связями
- Мб первоначально (для ускорения) строить деревья по hesh
Что такое хеш функция https://www.chaynikam.info/chto-takoe-hash-fayla-i-kak-ego-uznat.html Коллизия в хешах https://habrahabr.ru/post/113127/ Примеры на python http://qaru.site/questions/32672/get-md5-hash-of-big-files-in-python
import hashlib
def checksum_md5(filename):
md5 = hashlib.md5()
with open(filename
,'rb') as f:
for chunk in iter(lambda: f.read(128 * md5.block_size), b''):
md5.update(chunk)
return md5.hexdigest()
print checksum_md5("Downloads/Клубника.rar")
Обход директорий https://www.severcart.org/blog/all/list_direcory_content_with_python/
https://pypi.org/project/webdavclient/ Добавить функционал выбора (удалять после перемещения и тд как в freefilesync)
сделать чтобы DISK работали на macos
- Логи px4 filesync
- Ротация логов filesync
- Csv для бд filesync
- Ротация логов filesync
- Что если при переименовании такой файл уже сцществует?
- Нужно ли качать если файл уже переименован и есть
что если файл filesync сможет забирать еще и почту???
https://tproger.ru/translations/python-gui-pyqt/
https://pythonworld.ru/gui/pyqt5-firstprograms.html https://pythonworld.ru/gui/pyqt5-menustoolbars.html https://pythonworld.ru/gui/pyqt5-layout.html https://pythonworld.ru/gui/pyqt5-eventssignals.html https://pythonworld.ru/gui/pyqt5-dialogs.html https://pythonworld.ru/gui/pyqt5-widgets.html https://pythonworld.ru/gui/pyqt5-widgets2.html https://pythonworld.ru/gui/pyqt5-dragdrop.html https://pythonworld.ru/gui/pyqt5-painting.html https://pythonworld.ru/gui/pyqt5-customwidgets.html https://pythonworld.ru/gui/pyqt5-tetris.html
import my_webdav.urn as ur
path = "/dasfa/пывп/вф"
dir = False
u = ur.Urn(path, dir)
print(u)
print(u.filename())
import my_webdav.urn as ur
path = "/dasfa/пывп/вф"
dir = True
u = ur.Urn(path, dir)
print(u)
print(u.filename())
<?xml version="1.0" encoding="utf-8"?>
<FreeFileSync XmlType="GUI" XmlFormat="14">
<Compare>
<Variant>TimeAndSize</Variant>
<Symlinks>Exclude</Symlinks>
<IgnoreTimeShift/>
</Compare>
<Synchronize>
<Variant>TwoWay</Variant>
<DetectMovedFiles>false</DetectMovedFiles>
<DeletionPolicy>RecycleBin</DeletionPolicy>
<VersioningFolder Style="Replace"/>
</Synchronize>
<Filter>
<Include>
<Item>*</Item>
</Include>
<Exclude>
<Item>/.fseventsd/</Item>
<Item>/.Spotlight-V100/</Item>
<Item>/.Trashes/</Item>
<Item>*/.DS_Store</Item>
<Item>*/._*</Item>
</Exclude>
<TimeSpan Type="None">0</TimeSpan>
<SizeMin Unit="None">0</SizeMin>
<SizeMax Unit="None">0</SizeMax>
</Filter>
<FolderPairs>
<Pair>
<Left>/Users/smirart/github/filesync</Left>
<Right>/Users/smirart/Desktop/untitled folder 2</Right>
</Pair>
</FolderPairs>
<Errors Ignore="false" Retry="0" Delay="5"/>
<LogFolder/>
<PostSyncCommand Condition="Completion"/>
<Gui>
<MiddleGridView>Action</MiddleGridView>
</Gui>
</FreeFileSync>