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

Add logging of stdout to dbt graph run_command. #1390

Merged
merged 10 commits into from
Dec 19, 2024

Conversation

KarolGongola
Copy link
Contributor

@KarolGongola KarolGongola commented Dec 14, 2024

Description

Currently run_command functions put only stderr or stdout into logger. Which is misleading, because there are also important information in stdout even if something exists in stderr.

Related Issue(s)

closes #1356

Breaking Change?

NO

Checklist

  • I have made corresponding changes to the documentation (if required)
  • I have added tests that prove my fix is effective or that my feature works

@dosubot dosubot bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Dec 14, 2024
@dosubot dosubot bot added the area:logging Related to logging, like log levels, log formats, error logging, etc label Dec 14, 2024
Copy link
Collaborator

@tatiana tatiana left a comment

Choose a reason for hiding this comment

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

Hi @KarolGongola, thank you very much for improving the logs

I'm happy with the improvement. Could you please fix the tests so they pass? It will also help us avoid any regressions in your log improvement.

Apparently, the following tests broke due to this change:

FAILED tests/dbt/test_graph.py::test_load_via_dbt_ls_with_non_zero_returncode - AssertionError: Regex pattern did not match.
 Regex: "Unable to run \\['.+dbt', 'deps', .*\\] due to the error:\\nSome stderr message"
 Input: "Unable to run ['/home/runner/.local/share/hatch/env/virtual/astronomer-cosmos/Za_bFbg4/tests.py3.11-2.9/bin/dbt', 'deps', '--project-dir', '/tmp/tmpivws28dg', '--profiles-dir', '/tmp/cosmos/profile/d426ea9bd2fe96408d8d2c4f150ab19011d7d7314fc17f613b902308e66fb2e7', '--profile', 'default', '--target', 'default'] due to the error:\nstderr: Some stderr message\nstdout: "
FAILED tests/dbt/test_graph.py::test_load_via_dbt_ls_with_runtime_error_in_stdout - AssertionError: Regex pattern did not match.
 Regex: "Unable to run \\['.+dbt', 'deps', .*\\] due to the error:\\nSome Runtime Error"
 Input: "Unable to run ['/home/runner/.local/share/hatch/env/virtual/astronomer-cosmos/Za_bFbg4/tests.py3.11-2.9/bin/dbt', 'deps', '--project-dir', '/tmp/tmp_jnwrslr', '--profiles-dir', '/tmp/cosmos/profile/d426ea9bd2fe96408d8d2c4f150ab19011d7d7314fc17f613b902308e66fb2e7', '--profile', 'default', '--target', 'default'] due to the error:\nstderr: \nstdout: Some Runtime Error"
= 2 failed, 66 passed, 5 skipped, 667 deselected, 2 warnings in 342.06s (0:05:42) =

@fjmacagno
Copy link

I wonder a little if it would be better to not split out the stderr and stdout in the first place, since it could be confusing. Still a substantial improvement.

@KarolGongola
Copy link
Contributor Author

KarolGongola commented Dec 17, 2024

Hi @KarolGongola, thank you very much for improving the logs

I'm happy with the improvement. Could you please fix the tests so they pass? It will also help us avoid any regressions in your log improvement.

Apparently, the following tests broke due to this change:

FAILED tests/dbt/test_graph.py::test_load_via_dbt_ls_with_non_zero_returncode - AssertionError: Regex pattern did not match.
 Regex: "Unable to run \\['.+dbt', 'deps', .*\\] due to the error:\\nSome stderr message"
 Input: "Unable to run ['/home/runner/.local/share/hatch/env/virtual/astronomer-cosmos/Za_bFbg4/tests.py3.11-2.9/bin/dbt', 'deps', '--project-dir', '/tmp/tmpivws28dg', '--profiles-dir', '/tmp/cosmos/profile/d426ea9bd2fe96408d8d2c4f150ab19011d7d7314fc17f613b902308e66fb2e7', '--profile', 'default', '--target', 'default'] due to the error:\nstderr: Some stderr message\nstdout: "
FAILED tests/dbt/test_graph.py::test_load_via_dbt_ls_with_runtime_error_in_stdout - AssertionError: Regex pattern did not match.
 Regex: "Unable to run \\['.+dbt', 'deps', .*\\] due to the error:\\nSome Runtime Error"
 Input: "Unable to run ['/home/runner/.local/share/hatch/env/virtual/astronomer-cosmos/Za_bFbg4/tests.py3.11-2.9/bin/dbt', 'deps', '--project-dir', '/tmp/tmp_jnwrslr', '--profiles-dir', '/tmp/cosmos/profile/d426ea9bd2fe96408d8d2c4f150ab19011d7d7314fc17f613b902308e66fb2e7', '--profile', 'default', '--target', 'default'] due to the error:\nstderr: \nstdout: Some Runtime Error"
= 2 failed, 66 passed, 5 skipped, 667 deselected, 2 warnings in 342.06s (0:05:42) =

sure, sorry for inconvenience

@KarolGongola
Copy link
Contributor Author

KarolGongola commented Dec 17, 2024

I wonder a little if it would be better to not split out the stderr and stdout in the first place, since it could be confusing. Still a substantial improvement.

I think that just concatenating them without any info, could be even more misleading, because messages wont be in chronological order.

@KarolGongola
Copy link
Contributor Author

@tatiana Is it fine now?

@fjmacagno
Copy link

I meant keep them in chronological order by using the stderr=STDOUT param. https://docs.python.org/3/library/subprocess.html#subprocess.STDOUT

@KarolGongola
Copy link
Contributor Author

KarolGongola commented Dec 18, 2024

I meant keep them in chronological order by using the stderr=STDOUT param. https://docs.python.org/3/library/subprocess.html#subprocess.STDOUT

Ah, I see. It sounds like a good idea. Let me check how much changes it requires in the code.

@KarolGongola
Copy link
Contributor Author

It is much better. Thanks @fjmacagno

cosmos/dbt/graph.py Outdated Show resolved Hide resolved
@KarolGongola
Copy link
Contributor Author

@tatiana Is this fine for you now? Or do you prefer concatenation without "stdout" and "stderr" keywords?

Copy link

codecov bot commented Dec 18, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 96.28%. Comparing base (0edb07d) to head (0aa0b53).
Report is 4 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1390   +/-   ##
=======================================
  Coverage   96.28%   96.28%           
=======================================
  Files          68       68           
  Lines        4150     4150           
=======================================
  Hits         3996     3996           
  Misses        154      154           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Collaborator

@tatiana tatiana left a comment

Choose a reason for hiding this comment

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

Thanks for the contribution and addressing the feedback, @KarolGongola , we're releasing this as part of 1.8

@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Dec 19, 2024
@tatiana tatiana merged commit 0e826b1 into astronomer:main Dec 19, 2024
65 checks passed
@tatiana tatiana added this to the Cosmos 1.8.0 milestone Dec 19, 2024
@pankajkoti pankajkoti mentioned this pull request Dec 19, 2024
tatiana added a commit that referenced this pull request Dec 20, 2024
**New Features**

* Support customizing Airflow operator arguments per dbt node by @wornjs
in #1339. [More
information](https://astronomer.github.io/astronomer-cosmos/getting_started/custom-airflow-properties.html).
* Support uploading dbt artifacts to remote cloud storages via callback
by @pankajkoti in #1389. [Read
more](https://astronomer.github.io/astronomer-cosmos/configuration/callbacks.html).
* Add support to ``TestBehavior.BUILD`` by @tatiana in #1377.
[Documentation](https://astronomer.github.io/astronomer-cosmos/configuration/testing-behavior.html).
* Add support for the "at" operator when using ``LoadMode.DBT_MANIFEST``
or ``CUSTOM`` by @benjy44 in #1372
* Add dbt clone operator by @pankajastro in #1326, as documented in
[here](https://astronomer.github.io/astronomer-cosmos/getting_started/operators.html).
* Support rendering tasks with non-ASCII characters by @t0momi219 in
#1278 [Read
more](https://astronomer.github.io/astronomer-cosmos/configuration/task-display-name.html)
* Add warning callback on source freshness by @pankajastro in #1400
[Read
more](https://astronomer.github.io/astronomer-cosmos/configuration/source-nodes-rendering.html#on-warning-callback-callback)
* Add Oracle Profile mapping by @slords and @pankajkoti in #1190 and
#1404
* Emit telemetry to Scarf during DAG run by @tatiana in #1397
* Save tasks map as ``DbtToAirflowConverter`` property by
@internetcoffeephone and @hheemskerk in #1362

**Bug Fixes**

* Fix the mock value of port in ``TrinoBaseProfileMapping`` to be an
integer by @dwolfeu #1322
* Fix access to the ``dbt docs`` menu item outside of Astro cloud by
@tatiana in #1312
* Add missing ``DbtSourceGcpCloudRunJobOperator`` in module
``cosmos.operators.gcp_cloud_run_job`` by @anai-s in #1290
* Support building ``DbtDag`` without setting paths in ``ProjectConfig``
by @tatiana in #1307
* Fix parsing dbt ls outputs that contain JSONs that are not dbt nodes
by @tatiana in #1296
* Fix Snowflake Profile mapping when using AWS default region by
@tatiana in #1406
* Fix dag rendering for taskflow + DbtTaskGroup combo by @pankajastro in
#1360

**Enhancements**

* Improve dbt command execution logs to troubleshoot ``None`` values by
@tatiana in #1392
* Add logging of stdout to dbt graph run_command by @KarolGongola in
#1390
* Save tasks map as DbtToAirflowConverter property by
@internetcoffeephone and @hheemskerk in #1362
* Support rendering build operator task-id with non-ASCII characters by
@pankajastro in #1415

**Docs**

* Remove extra ` char from docs by @pankajastro in #1345
* Add limitation about copying target dir files to remote by @pankajkoti
in #1305
* Generalise example from README by @ReadytoRocc in #1311
* Add security policy by @tatiana, @chaosmaw and @lzdanski in # 1385
* Mention in documentation that the callback functionality is supported
in ``ExecutionMode.VIRTUALENV`` by @pankajkoti in #1401

**Others**

* Restore Jaffle Shop so that ``basic_cosmos_dag`` works as documented
by @tatiana in #1374
* Remove Pytest durations from tests scripts by @tatiana in #1383
* Remove typing-extensions as dependency by @pankajastro in #1381
* Pin dbt-databricks version to < 1.9 by @pankajastro in #1376
* Refactor ``dbt-sqlite`` tests to use ``dbt-postgres`` by @pankajastro
in #1366
* Remove 'dbt-core<1.8.9' pin by @tatiana in #1371
* Remove dependency ``eval_type_backport`` by @tatiana in #1370
* Enable kubernetes tests for dbt>=1.8 by @pankajastro #1364
* CI Workaround: Pin dbt-core, Disable SQLite Tests, and Correctly
Ignore Clone Test to Pass CI by @pankajastro in #1337
* Enable Azure task in the remote store manifest example DAG by
@pankajkoti in #1333
* Enable GCP remote manifest task by @pankajastro in #1332
* Add exempt label option in GH action stale job by @pankajastro in
#1328
* Add integration test for source node rendering by @pankajastro in
#1327
* Fix vulnerability issue on docs dependency by @tatiana in #1313
* Add postgres pod status check for k8s tests in CI by @pankajkoti in
#1320
* [CI] Reduce the amount taking to run tests in the CI from 5h to 11min
by @tatiana in #1297
* Enable secret detection precommit check by @pankajastro in #1302
* Fix security vulnerability, by not pinning Airflow 2.10.0 by @tatiana
in #1298
* Fix Netlify build timeouts by @tatiana in #1294
* Add stalebot to label/close stale PRs and issues by @tatiana in #1288
* Unpin dbt-databricks version by @pankajastro in #1409
* Fix source resource type tests by @pankajastro in #1405
* Increase performance tests models by @tatiana in #1403
* Drop running 1000 models in the CI by @pankajkoti in #1411
* Fix releasing package to PyPI by @tatiana in #1396
* Pre-commit hook updates in #1394, #1373, #1358, #1340, #1331, #1314,
#1301

Co-authored-by: Pankaj Koti <pankajkoti699@gmail.com>
Co-authored-by: Pankaj Singh <pankaj.singh@astronomer.io>

Closes: #1193

---------

Co-authored-by: Pankaj Koti <pankajkoti699@gmail.com>
Co-authored-by: Pankaj Singh <98807258+pankajastro@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:logging Related to logging, like log levels, log formats, error logging, etc lgtm This PR has been approved by a maintainer size:XS This PR changes 0-9 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Print full log on dbt error
3 participants