summaryrefslogtreecommitdiffstats
path: root/yql/essentials/tools/udf_resolver/udf_resolver.cpp
diff options
context:
space:
mode:
authorvvvv <[email protected]>2025-03-19 13:47:50 +0300
committervvvv <[email protected]>2025-03-19 14:07:15 +0300
commitbd190ddaaab2a259b50caebe3cb8d6666c90eacc (patch)
tree83d7db05a732be28dee1fb2760bbcaeef907f539 /yql/essentials/tools/udf_resolver/udf_resolver.cpp
parent61b92aeb846ebc6180fb4c18c85ff10c58093610 (diff)
YQL-19724 logger for udf resolving
commit_hash:c019511f90871e0a4d783856db0fa2272e21a336
Diffstat (limited to 'yql/essentials/tools/udf_resolver/udf_resolver.cpp')
-rw-r--r--yql/essentials/tools/udf_resolver/udf_resolver.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/yql/essentials/tools/udf_resolver/udf_resolver.cpp b/yql/essentials/tools/udf_resolver/udf_resolver.cpp
index ce5b648be2b..27ab6f87d48 100644
--- a/yql/essentials/tools/udf_resolver/udf_resolver.cpp
+++ b/yql/essentials/tools/udf_resolver/udf_resolver.cpp
@@ -12,6 +12,8 @@
#include <yql/essentials/minikql/mkql_type_builder.h>
#include <yql/essentials/minikql/mkql_program_builder.h>
#include <yql/essentials/minikql/mkql_utils.h>
+#include <yql/essentials/public/udf/udf_log.h>
+#include <yql/essentials/utils/time_provider.h>
#include <library/cpp/getopt/last_getopt.h>
@@ -147,9 +149,17 @@ void ResolveUDFs() {
}
}
+ NYql::TFunctionResult* udfRes = nullptr;
+
+ auto logProvider = NUdf::MakeLogProvider(
+ [&](const NUdf::TStringRef& component, NUdf::ELogLevel level, const NUdf::TStringRef& message) {
+ udfRes->AddMessages(TStringBuilder() << NYql::GetTimeProvider()->Now() << " " << component << " [" << level << "] " << message);
+ },
+ static_cast<NUdf::ELogLevel>(inMsg.GetRuntimeLogLevel()));
+
for (size_t i = 0; i < inMsg.UdfsSize(); ++i) {
auto& udf = inMsg.GetUdfs(i);
- auto udfRes = outMsg.AddUdfs();
+ udfRes = outMsg.AddUdfs();
try {
TProgramBuilder pgmBuilder(env, *newRegistry);
TType* mkqlUserType = nullptr;
@@ -165,7 +175,7 @@ void ResolveUDFs() {
TFunctionTypeInfo funcInfo;
auto status = newRegistry->FindFunctionTypeInfo(env, typeInfoHelper, nullptr,
- udf.GetName(), mkqlUserType, udf.GetTypeConfig(), NUdf::IUdfModule::TFlags::TypesOnly, {}, nullptr, nullptr, &funcInfo);
+ udf.GetName(), mkqlUserType, udf.GetTypeConfig(), NUdf::IUdfModule::TFlags::TypesOnly, {}, nullptr, logProvider.Get(), &funcInfo);
if (!status.IsOk()) {
udfRes->SetError(TStringBuilder() << "Failed to find UDF function: " << udf.GetName()
<< ", reason: " << status.GetError());
@@ -265,6 +275,7 @@ int main(int argc, char **argv) {
TString user;
TString group;
bool printAsProto = true;
+ NUdf::ELogLevel logLevel = NUdf::ELogLevel::Info;
NLastGetopt::TOpts opts = NLastGetopt::TOpts::Default();
opts.AddLongOption('L', "list", "List UDF modules in specified directory")
@@ -298,6 +309,16 @@ int main(int argc, char **argv) {
.Optional()
.NoArgument();
+ opts.AddLongOption("log-level", "Runtime log level, available values: " + NUdf::LogLevelAvailables())
+ .Handler1T<TString>([&](const TString& level) {
+ auto res = NUdf::TryLevelFromString(level);
+ if (!res) {
+ throw yexception() << "Invalid log level: " << level;
+ }
+
+ logLevel = *res;
+ });
+
opts.SetFreeArgsNum(0);
NLastGetopt::TOptsParseResult res(&opts, argc, argv);
@@ -492,9 +513,9 @@ int main(int argc, char **argv) {
NFs::EnsureExists(path);
TFileStat fstat(path);
if (fstat.IsDir()) {
- NUdfResolver::DiscoverInDir(path, Cout, printAsProto);
+ NUdfResolver::DiscoverInDir(path, Cout, printAsProto, logLevel);
} else {
- NUdfResolver::DiscoverInFile(path, Cout, printAsProto);
+ NUdfResolver::DiscoverInFile(path, Cout, printAsProto, logLevel);
}
return 0;
}