Имя: Пароль:
1C
 
Помогите расковырять "свой" http-сервис (Linux, Rust, загрузка документов)
,
0 zelenprog
 
13.12.23
15:31
Здравствуйте!

В организации был запущен http-сервис. Сервер на Линуксе, доступ к серверу есть.

Этот http-сервис принимает электронные документы от внешней системы и складывает их где-то у себя на сервере.
К этому http-сервису подключается база 1С8 с помощью регламентного задания, посылает REST-запрос и получает от этого http-сервиса документы.

Этот механизм обмена делали спецы, которые уже не работают.

С некоторых пор этот http-сервис возвращает код состояния 502 и не "отдает" документы.
Программа, реализующая запрос, предположительно написана на Rust-е.

Помогите пожалуйста разобраться как это все работает.
Я с веб-технологиями мало знаком.
Исходники все есть. Только надо понять какой из этих исходников "отрабатывает" этот запрос.
Где это можно найти? Где искать? Что смотреть?
71 zelenprog
 
14.12.23
10:45
Вот ссылка на всю папку с исходниками yama:
https://cloud.mail.ru/public/qVUY/eJznKe9cB

Из папок ...\target\debug\ и ...\target\release\ я удалил подпапки "build\" и "deps\", так как они очень большие по размеру.

А это ссылка на файл yama_service.rs:
https://cloud.mail.ru/public/PtEF/V5u5khRNR

Вот его содержимое:
Подробности
use log::info;

use static_strings::*;
use yama::server::start_server;

#[tokio::main]
async fn main() {
    init();
    info!("{}", START_MSG);
    start_server().await;
}

fn init() {
    env_logger::init();
}


mod static_strings {
    pub const START_MSG: &str = "Запуск сервиса";
}
72 Garykom
 
гуру
14.12.23
11:01
(71) какая хрень!

данные из файликов с ftp засовывает в базу postgresql
и по базе уже делает rest api
73 Garykom
 
гуру
14.12.23
11:04
(72)+ имхо прямо из 1С с ftp работай с файлами
74 Garikk
 
14.12.23
11:05
(66) он перспективен, но на нем нельзя писать проекты где нет уверенности в поддержке дальнейшей
я тут вручную не зная раст homeassistant просто собирал-обновлял на малинке, это пи..ц какойто
ассистант скажете на питоне? ага, а еще там какаято чертовшина на расте которая не компилится...а ты даже с мануалом хрен поймёшь чё там за грузовая ржавчина ему нужна и где
75 Garikk
 
14.12.23
11:06
(0) а что в логах сервака кстати? /var/log/syslog например?
76 Garykom
 
гуру
14.12.23
11:07
(74) питон не умеет в низкий уровень
и вот они раст и заюзали
лучше раст чем плюсы
77 Garykom
 
гуру
14.12.23
11:08
(74) кстати нафига ты ha собирал? почему просто в докере готовый не запускать?
78 novichok79
 
14.12.23
11:08
(74) звучит так как будто знатные попытки спариться с мужчиной ))))
79 novichok79
 
14.12.23
11:10
(76) мне показалось что обновленный С++ без легаси с какими-то фишками из Go.
Google какой-то Carbon недавно выкатил, но язык без либ - это как приставка без игр.
80 Garykom
 
гуру
14.12.23
11:12
(71) прикольно что порт 3369 захардкожен
а database_url (строка подключения к postgre) берут из переменной окружения
81 Garykom
 
гуру
14.12.23
11:17
(80)+ и кстати должна быть еще какая то внешняя хрень
которая с ftp файлики закидывает в базу PostgreSQL в таблички типа ftp_mirror
82 Garikk
 
14.12.23
11:16
(77) у меня в голове docker и rpi с трудом огромным сочетаются
я вообще Home Assistant Operating System (HAOS)  поставил в итоге когда задолбался руками собирать
83 Garykom
 
гуру
14.12.23
11:17
(82) haos как вариант но не для всех железок сборки есть
а в докере можно на любой
84 novichok79
 
14.12.23
11:17
(81) а че типа из 1Сины нельзя фтп файлики качать? очень странная архитектура. выглядит так, как будто чуваки решили изучить rust на реальном проекте.
85 Garykom
 
гуру
14.12.23
11:18
(84) yama.7z\yama\docs\ загляни ))
86 Garikk
 
14.12.23
11:21
(78) ну яжпрограммист, я разобрался ;)
вообще мне всегда интересно такое всякое самостоятельно собрать чтобы понимать чё там и как работает, но мейнтейнеры ha те еще приколисты и любители пихать самые новые версии либ в зависимости не описывая как их ставить
(83) ну у меня rpi 3, для него вполне есть
(84) +100, так и есть, у нас так Golang, Ruby и C# в чисто питонячии проекты затаскивали..сейчас шарповый проект в одно лицо так тяну, ктото отличился из моих предшественников, видимо адептов "питон это плохо"
87 Garykom
 
гуру
14.12.23
11:20
(84) да согласен странный выбор стека для решения
логично для этого отдельную самописку на 1С наваять было

или даже встроить в свою основную конфу
88 IVT_2009
 
14.12.23
11:22
(74) Тоже поимел эту любофф. С аналогичным исходом. Ушел на докер и пока все наладилось. Думал, что я не догоняю - оказалось, что так задумано.
89 d4rkmesa
 
14.12.23
11:27
(48) Очень смешно. ) Это примерно как выучить C++.
90 Лефмихалыч
 
14.12.23
11:34
(89) на самом деле вовсе нет. Во-первых, раст гораздо более современный и простой язык, чем плюсы. Во-вторых, у автора есть исходники и в действительности ему нужно научиться только собирать и запускать уже готовое. И даже собранные бинари у автора есть, а не хватает какого-то там окружения
91 zelenprog
 
14.12.23
11:35
(75) >> а что в логах сервака кстати? /var/log/syslog например?

Нету такого файла "syslog".
Но зато в этой папке есть файл ".\ngnix\error.log", в нем вот что:

2023/12/14 11:13:49 [error] 1616#0: *2270 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.1.131, server: yama.corp.pskovmol.ru, request: "GET /api/v1/orders/list/today HTTP/1.1", upstream: "http://127.0.0.1:3369/api/v1/orders/list/today", host: "yama.corp.pskovmol.ru"
92 Garykom
 
гуру
14.12.23
11:35
(90) "не хватает какого-то там окружения" - это примерно как для пользователя 1С, умеющего в СКД
"не хватает какого то там сервера 1С"
93 Garykom
 
гуру
14.12.23
11:37
(91) это ошибка nginx'а, который как обратный прокси тут
94 Garykom
 
гуру
14.12.23
11:39
(91) и да спалился АО «Псковский молочный комбинат»
95 novichok79
 
14.12.23
11:39
кстати контора мечты - АО «Псковский молочный комбинат»
96 novichok79
 
14.12.23
11:39
(94) одновременно
97 novichok79
 
14.12.23
11:41
(89) я сужу по себе - вот после Java и Golang как бы довольно быстро въехал в то, чтобы читать код в Rust.
естественно, если прог не знает ничего, кроме 1С, как бы плохи дела ))
98 novichok79
 
14.12.23
11:42
(91) а nginx там зачем, если оно просто качает файлики?
99 Garykom
 
гуру
14.12.23
11:44
(98) nginx там вероятно чтобы с localhost наружу отдавать на другой порт и с ssl
100 zelenprog
 
14.12.23
11:44
(85) >> yama.7z\yama\docs\ загляни ))

А что там интресного? Там какая-то описана платформа EXITE Evolution.

(94),(95) Ага. Сильно не пиарьте нигде.
Я вроде пытался удалить ссылки на контору. Где я промахнулся?
101 Лефмихалыч
 
14.12.23
11:45
(100) ты выложил исходники целиком, включая всю историю коммитов
102 novichok79
 
14.12.23
11:45
(99) ну да, я тоже подумал на балансировку или SSL, но блеать, почему так нах...
как будто бы сделано через anus.
скачал себе папОчку, сейчас гляну исходники.
103 Garykom
 
гуру
14.12.23
11:46
(100) >А что там интресного? Там какая-то описана платформа EXITE Evolution.

Это описание формата файлов xml которыми через ftp обмениваются
104 novichok79
 
14.12.23
11:47
const PORT: u16 = 3369;

я не плачу, это просто дождь...
105 zelenprog
 
14.12.23
11:48
(97) Я около 7 лет писал на Borland С++, затем небольшие программы на C#, много на Foxpro, хранимые процедуры на SQL.
Но это были десктопные программы.
С веб-технологиями не сталкивался. Поэтому мне трудно понять логику этого кода на Rust-е.
106 Garykom
 
гуру
14.12.23
11:48
(104) ага я тоже
наколенная поделка, нормально
107 zelenprog
 
14.12.23
11:51
(72) >> данные из файликов с ftp засовывает в базу postgresql
(73) >> + имхо прямо из 1С с ftp работай с файлами
(84) >> а че типа из 1Сины нельзя фтп файлики качать?

Ткните плиз, где этот код, который читает данные с ftp?
Какой там указан адрес ftp?
108 novichok79
 
14.12.23
11:51
хз, будь я 1сником, я бы переделал на 1С + затащил бы как подсистему в расширении.
обычное такое переводят на другие ЯП, если только 1Сина не тянет по скорости.
но тут судя по всему, обычное скачивание файлов, прокидывание их в постгри и выставление наружу сервиса.
109 Лефмихалыч
 
14.12.23
11:53
(108) у автора 7.7
110 novichok79
 
14.12.23
11:54
прикольно, там даж гит дифф есть незакоммиченный
111 Garykom
 
гуру
14.12.23
11:55
(107) нет там этого кода что и удивительно
и нет адреса ftp

есть только табличка ftp_mirror что намекает вместе с мануалом "платформа EXITE Evolution"
112 Garykom
 
гуру
14.12.23
11:56
(111)+ или я невнимательно изучил код
или уже писал должно быть еще что то внешнее, что синхронизирует ftp и базу pgsql в таблички ftp_mirror
113 zelenprog
 
14.12.23
11:56
Сервис запустился!
После многократных запусков файлов "start_service.sh", "stop_service.sh".
Так я и не понял, что ему не нравилось.
Может быть зависит от пользователя, под которым запускается?
114 zelenprog
 
14.12.23
11:58
(109)
В данном случае эти документы закачиваются в 1С8 "Комплексная автоматизация".
У нас есть базы и на 7.7 и на 8.3.
115 Лефмихалыч
 
14.12.23
11:59
а следующая проблема будет "оно-то запускается, но быстро падает потому, что постгря не запущена"
116 zelenprog
 
14.12.23
11:59
(108) Я тоже хочу переделать на 1С, хотел бы сделать расширение.
Но для этого надо разобраться откуда все это тянется.
117 Garykom
 
гуру
14.12.23
12:01
(113) скорее всего переменные среды
когда вручную запускаешь от юзера и при старте системы
118 zelenprog
 
14.12.23
12:01
(115) postgres работает, я к нему из командной строки подключился еще вчера.
Сервис пока работает нормально, в 1С8 документы подтянулись.
119 Garykom
 
гуру
14.12.23
12:02
(116) ищи откуда берутся файлики, с какого ftp
мануал у тебя есть, найди контакты какой адрес ftp и логин с паролем
120 novichok79
 
14.12.23
12:04
да, тоже не нашел что заполняет ftp_mirror.
но то что незакомиченный дифф 4 года назад, как бы намекает шо всю команду послали найух.
121 Garykom
 
гуру
14.12.23
12:11
(120) и правильно сделали что послали
решение овер

как понял с ftp работает RestExClient и MOVEitFreely FTP
которые описаны в файле EXITE_DocsDescription_XML.pdf

оно тупо на локальный диск файлы кидает как в папке yama\test\

мануал есть, осталось только на 1С наваять код работы с этими файликами
122 Garikk
 
14.12.23
12:18
(120) или команда послала работодателя
123 Garykom
 
гуру
14.12.23
12:20
(122) возможно они друг друга стоят
124 novichok79
 
14.12.23
12:34
если что можно попробовать обратиться к нему

PS D:\Downloads\yama> git log
commit 5c8a922d4575489fc6779768fc870d29fd9a818c (HEAD -> master)
Author: Tishechkov Kirill <[email protected]>
Date:   Thu Dec 10 11:14:24 2020 +0300

    Обрабатывается цена с НДС если она указана в заказе.
125 Garykom
 
гуру
14.12.23
12:41
(124) Юрьевичу? Сисадмину? Которого почетной грамотой наградили?
126 novichok79
 
14.12.23
12:43
ахаха. ну может чувак знает чего-то, хотя вряд ли он ответит ))
127 zelenprog
 
14.12.23
12:49
Нашел в кроне вот такую команду:
*/5 * * * *  cd /home/sysadmin/Development/legacy/ftp_2_db/ && ./start_service.sh > /dev/null 2>&1

Понятно, что запускается еще один сервис, который скорее всего и качает файлы с ФТП в базу postgre.

Только не понял, что обозначают последние "2>&1"?
128 Garykom
 
гуру
14.12.23
12:52
129 Garykom
 
гуру
14.12.23
12:53
хм угадал насчет второго сервиса
вот там уже должен быть адрес фтп и логин/пароль
130 novichok79
 
14.12.23
12:53
поток ошибок (stderr) будет направлен туда же, куда и стандартный вывод (stdout), то есть в /dev/null.
131 novichok79
 
14.12.23
12:53
проще говоря Tishechkov Kirill сделал так, что если даже были ошибки при запуске фтп-хи вы об этом никогда не узнаете.
удобно ёпта!
132 novichok79
 
14.12.23
12:55
содержимое в студию, зря чтоли мы тут рабочее время тратим ))) бесплатно кстати.
133 zelenprog
 
14.12.23
13:00
(130) А как надо исправить строку, чтобы направить вывод в файл? И желательно разделить "нормальные" сообщения и ошибки.

(132) Содержимое чего?
134 stix2010
 
14.12.23
13:01
(0)..был у нас толмач с немчины, ему переводить, а он лыка не вяжет. Ну в кипятке его и сварили...
135 novichok79
 
14.12.23
13:10
start.sh, но это походу и есть yama_service.
ты заменил xxx, но скинул весь git diff, поэтому сначала было непонятно.
есть еще что-то, что наполняет папку с xml файлами и таблицу ftp_mirror, я не вижу в коде где в нее вставляется файл.
там уже сравнивается содержимое таблицы и файлов в папке.
но как они туда попадают хуй его знает.
и вообще 2 сервиса на 1 базу, ну это пиздец антипаттерн какой.
136 novichok79
 
14.12.23
13:11
(133) убрать перенаправление в dev/null.

*/5 * * * *  cd /home/sysadmin/Development/legacy/ftp_2_db/ && ./start_service.sh

папка ftp_2_db наверное и содержит что-то еще. что ты нам не скидываешь.
137 Garykom
 
гуру
14.12.23
13:12
(135) >есть еще что-то, что наполняет папку с xml файлами и таблицу ftp_mirror
/home/sysadmin/Development/legacy/ftp_2_db/
138 Garykom
 
гуру
14.12.23
13:13
(136) >папка ftp_2_db наверное и содержит что-то еще. что ты нам не скидываешь.

хочешь узнать логин/пароль?
прикольно если они там тоже захардкожены
139 novichok79
 
14.12.23
13:15
оффтоп: бля, ну я покекал.
типа заанонил, но скинул гит дифф, которым в пару кликов можно отменить эти xxx.
140 novichok79
 
14.12.23
13:16
(138) по крайней мере к БД пароли уже засвечены. терять нечего.
141 zelenprog
 
14.12.23
13:25
(139) ну я не знал что такое "гит дифф", теперь понял
142 zelenprog
 
14.12.23
13:26
(136) Перенаправление в кроне исправил на файл "xxx.log".
Надо крон перезапускать?

Ща выложу исходники ftp2db.
143 Garykom
 
гуру
14.12.23
13:27
(142) исправил то надеюсь через "crontab -e" ?
144 novichok79
 
14.12.23
13:32
(142) ты же типа каждый раз перезаписываешь xxx.log? а не дополняешь? просто если дополняешь, то его надо будет удалять, чтобы он не заполнил весь диск.
145 zelenprog
 
14.12.23
13:45
(143) Не, вручную отредактировал. А шо? Нельзя?

Под рутом отредактировал файл sysadmin.

Вроде работает, файл пишет.
146 zelenprog
 
14.12.23
13:42
(144) Да, перезаписываю.
Вот что он выдает:

-------------------
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
WARN rustc_metadata::locator no metadata found: failed to decompress metadata: /home/sysadmin/Development/legacy/ftp_2_db/target/release/deps/libproc_macro_hack-b1067107119c7e20.so
WARN rustc_metadata::locator no metadata found: failed to decompress metadata: /home/sysadmin/Development/legacy/ftp_2_db/target/release/deps/libproc_macro_hack-34eb81dff47866c8.so
...
WARN rustc_metadata::locator no metadata found: failed to decompress metadata: /home/sysadmin/Development/legacy/ftp_2_db/target/release/deps/libasync_trait-72d81f5e9d37abf7.so
WARN rustc_metadata::locator no metadata found: failed to decompress metadata: /home/sysadmin/Development/legacy/ftp_2_db/target/release/deps/libasync_trait-7976db04f3e9a81d.so
    Finished release [optimized] target(s) in 0.11s
     Running `target/release/start_service`
[2023-12-14T10:25:02Z INFO  start_service] Запуск синхронизации файлов
[2023-12-14T10:25:29Z INFO  start_service] Синхронизировано 0 файлов
[2023-12-14T10:25:29Z INFO  start_service] Завершение синхронизации файлов
---------------

Щас просто файлов еще новых нету, поэтому "синхронизировано 0 файлов".
147 zelenprog
 
14.12.23
13:43
В какой папке лежит гит дифф? Я ее удалю, чтобы не палить контору и бедного разраба.
148 novichok79
 
14.12.23
13:46
ты нас троллишь походу.
что лежит в /home/sysadmin/Development/legacy/ftp_2_db?
149 novichok79
 
14.12.23
13:46
(147) .git
152 zelenprog
 
14.12.23
13:51
А что за файл nohup.out?
Он же тоже как-то используется для вывода сообщений?
Чем вывод в nohup.out отличается от перенаправления вывода в кроне?
154 zelenprog
 
14.12.23
14:12
Ссылка на исходники ftp2db:
https://cloud.mail.ru/public/nnDZ/Ut4KntQCG

Контору и разраба не палите!
156 Волшебник
 
14.12.23
18:53
Все прощены ради решения проблемы компании, которая бьётся за Россию-Русь.
157 Garykom
 
гуру
14.12.23
19:27
(154) какой ужас

    let ftp_server = env::var("FTP_SERVER").expect("Не установлена переменная окружения FTP_SERVER - адрес ftp сервера");
    let ftp_user = env::var("FTP_USER").expect("Не установлена переменная окружения FTP_USER - имя пользователя ftp");
    let ftp_password = env::var("FTP_PASSWORD").expect("Не установлена переменная окружения FTP_PASSWORD - пароль пользователя ftp");
158 Garykom
 
гуру
14.12.23
19:34
зачем сохранять настройки в файлах? (сарказм)
когда можно прямо в переменные окружения засунуть да
только если другой еще сервер ftp будет что делать?

и общее впечатления о коде куча лишнего, надергано по кускам с разных стековерфлоу и гитхаба, короче этакий студент-стайл
159 Волшебник
 
14.12.23
19:32
(158) настройки в файлах приняты в Linux как стандарт
160 Garykom
 
гуру
14.12.23
19:33
(159) именно
но данное решение не использует настройки в файлах
и даже настройки из ключей запуска
161 Garykom
 
гуру
14.12.23
19:37
printenv короче
162 Волшебник
 
14.12.23
19:40
(160) Короче, "ржавое" решение?
163 Garykom
 
гуру
14.12.23
19:48
(162) Угу желтое еще, от зеленого программиста
164 d4rkmesa
 
14.12.23
20:15
Забавно, чувак, видимо, сделал с костылями интеграцию с EDI-системой Exite Evolution. Помню, лет 10 назад с ней сталкивался, интеграция была своего рода ftp-клиентом, которая при старте перебирала сотни xml-ок в папке и постоянно докачивала новые. В типовом виде это работало отвратительно. Лучшее, что можно с этим сделать - перейти на какой-нибудь "Контур".
165 Garykom
 
гуру
14.12.23
20:52
(164) какие то ограничения на удаление скачанных xml-ек?
166 d4rkmesa
 
14.12.23
21:06
(165) Чистить архив можно было, но даже сотня xml-к уже минуты перебирались, чтобы заполнить список электронных документов.
167 zelenprog
 
15.12.23
09:39
(164) >>  чувак, видимо, сделал с костылями интеграцию с EDI-системой Exite Evolution

Интеграция с Exite была когда-то давно.
Потом перешли на Leradata. Сейчас исходники качают данные с Leradata.
168 zelenprog
 
15.12.23
09:42
Еще такой вопрос.
Похоже, что postgres доступен только "внутри" на серваке. Со своего
169 zelenprog
 
15.12.23
09:47
... рабочего компа я не смог к нему подключиться.
В интернете прочитал, что надо у posgres-а какие-то специальные настройки сделать, чтобы он был доступен извне, в файлах postgresql.conf, pg_hba.conf.
170 DGorgoN
 
15.12.23
09:50
(169) Вы ведь аппендицит не будете лечить по интернету своими силами я надеюсь. Самом собой там можно много настроек сделать только зачем постгри голой попой наружу выставлять? Но если уж хочется - то еще и роутер есть или как там у вас интернет устроен.