Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: resolve jsonurls while merging reports #499

Merged
merged 1 commit into from
Sep 11, 2023

Conversation

KuznetsovRoman
Copy link
Member

Что сделано

Если скачанный json с базами данных содержит ссылки на другие json-ы, на этапе слияния отчетов скачиваем их тоже, чтобы получить их содержимое. После чего ссылки на базы данных кладем в список ссылок на базы данных, а с ссылками на json делаем рекурсивно так же. Если json скачать не удалось, фоллбэкаем на текущую схему (кладем его в список json-ов)

@KuznetsovRoman KuznetsovRoman force-pushed the HERMIONE-1138.resolve_jsonuls branch 2 times, most recently from aa26369 to 6477d4d Compare September 11, 2023 11:46
@KuznetsovRoman KuznetsovRoman changed the title perf(HERMIONE-1138): resolve jsonurls perf: resolve jsonurls while merging reports Sep 11, 2023
return resolvedUrls;
}

async function tryResolveUrl(url) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Рекурсивно проходит по всем вложенным .json базам. Если возникает ошибка при получении данных, возвращаем саму json-базу. Помимо "ничего не сломать", фоллбэк нужен для драфт отчетов

Comment on lines +34 to +38
results.forEach(({jsonUrls, dbUrls}) => {
resolvedUrls.push(...jsonUrls.concat(dbUrls));
});

return resolvedUrls;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Все urls вставляются в один массив, потому что это позволяет не ломать API слияния отчетов

Copy link
Member

@sipayRT sipayRT left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

в остальном ок


responses.forEach(response => {
dbUrls.push(...response.dbUrls);
jsonUrls.push(...response.jsonUrls);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

для чего нам здесь накапливать json-урлы? просто на всякий случай, чтобы понять откуда базы приехали?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, тут логика такая:

в responses хранятся dbUrls и jsonUrls, и этот responses образуется как результат выполнения этой же функции

Эта же функция берет url и если это jsonUrl, пытается ее развернуть. Результаты .db складывает, результаты .json пытается развернуть. Если не получилось по какой-то причине, возвращаем этот json-урл. Собственно, там не изначальные json-урлы, а только те, по которым не получилось скачать сами json-ы. В результате, если сеть работает, а запросы шлются нормально - эти jsonUrls будут пустыми. Если сеть не работает, или запрос выкинул ошибку - jsonUrls будет равен исходному

} catch (e) {
jsonUrls.push(url);
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

у нас разве где-то есть проверка на то, что мы можем передать только путы формата json/db? сейчас у тебя нет обработки на такой случай и мы вернем пустые массивы. Это вроде и норм, но ругнуться все равно на это нужно

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В этом плане поведение идентично текущему:
Вот тут прокидываем сырые srcPaths (тут могут быть и .json, и .db, и что угодно), а затем эта функция вот тут втихую фильтрует все, что не .json и не .db

const destination = 'dest-report/path';

axiosStub.get.withArgs('src-report/path-1.json').resolves({data: {jsonUrls: ['src-report/path-2.json'], dbUrls: ['path-3.db']}});
axiosStub.get.withArgs('src-report/path-2.json').resolves({data: {jsonUrls: ['src-report/path-4.json'], dbUrls: ['path-5.db']}});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если мы в тесте проверяем именно резолв json-файлов, но и нумерацию нужно сделать последовательную (path-1.json, path-2.json, path-3.json). А то сейчас путаешься, пытаясь уследить за последовательностью цифр, которые смешиваются json+db

и ты здесь не проверяешь кейс, когда, у тебя в jsonUrls больше одного элемента. чет типа такого:

axiosStub.get.withArgs('path-1.json').resolves({data: {jsonUrls: ['path-2.json', 'path-3.json'], dbUrls: ['path-1.db']}});
axiosStub.get.withArgs('path-2.json').resolves({data: {jsonUrls: [], dbUrls: ['path-2.db']}});
axiosStub.get.withArgs('path-3.json').resolves({data: {jsonUrls: [], dbUrls: ['path-3.db']}});

@KuznetsovRoman KuznetsovRoman force-pushed the HERMIONE-1138.resolve_jsonuls branch from 6477d4d to 6db2183 Compare September 11, 2023 13:48
@KuznetsovRoman KuznetsovRoman force-pushed the HERMIONE-1138.resolve_jsonuls branch from 6db2183 to 7d9150f Compare September 11, 2023 13:51
@KuznetsovRoman KuznetsovRoman merged commit aca1039 into master Sep 11, 2023
5 checks passed
@KuznetsovRoman KuznetsovRoman deleted the HERMIONE-1138.resolve_jsonuls branch September 11, 2023 13:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants