| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 11c9698 commit c8e586c
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -596,9 +596,10 @@ void ChannelWrap::EnsureServers() { | |||
| 596 | 596 | ||
| 597 | 597 | class QueryWrap : public AsyncWrap { | |
| 598 | 598 | public: | |
| 599 | - QueryWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | ||
| 599 | + QueryWrap(ChannelWrap* channel, Local<Object> req_wrap_obj, const char* name) | ||
| 600 | 600 | : AsyncWrap(channel->env(), req_wrap_obj, AsyncWrap::PROVIDER_QUERYWRAP), | |
| 601 | - channel_(channel) { | ||
| 601 | + channel_(channel), | ||
| 602 | + trace_name_(name) { | ||
| 602 | 603 | // Make sure the channel object stays alive during the query lifetime. | |
| 603 | 604 | req_wrap_obj->Set(env()->context(), | |
| 604 | 605 | env()->channel_string(), | |
@@ -625,6 +626,9 @@ class QueryWrap : public AsyncWrap { | |||
| 625 | 626 | int dnsclass, | |
| 626 | 627 | int type) { | |
| 627 | 628 | channel_->EnsureServers(); | |
| 629 | + TRACE_EVENT_NESTABLE_ASYNC_BEGIN1( | ||
| 630 | + TRACING_CATEGORY_NODE2(dns, native), trace_name_, this, | ||
| 631 | + "name", TRACE_STR_COPY(name)); | ||
| 628 | 632 | ares_query(channel_->cares_channel(), name, dnsclass, type, Callback, | |
| 629 | 633 | static_cast<void*>(this)); | |
| 630 | 634 | } | |
@@ -721,6 +725,9 @@ class QueryWrap : public AsyncWrap { | |||
| 721 | 725 | extra | |
| 722 | 726 | }; | |
| 723 | 727 | const int argc = arraysize(argv) - extra.IsEmpty(); | |
| 728 | + TRACE_EVENT_NESTABLE_ASYNC_END0( | ||
| 729 | + TRACING_CATEGORY_NODE2(dns, native), trace_name_, this); | ||
| 730 | + | ||
| 724 | 731 | MakeCallback(env()->oncomplete_string(), argc, argv); | |
| 725 | 732 | } | |
| 726 | 733 | ||
@@ -730,6 +737,9 @@ class QueryWrap : public AsyncWrap { | |||
| 730 | 737 | Context::Scope context_scope(env()->context()); | |
| 731 | 738 | const char* code = ToErrorCodeString(status); | |
| 732 | 739 | Local<Value> arg = OneByteString(env()->isolate(), code); | |
| 740 | + TRACE_EVENT_NESTABLE_ASYNC_END1( | ||
| 741 | + TRACING_CATEGORY_NODE2(dns, native), trace_name_, this, | ||
| 742 | + "error", status); | ||
| 733 | 743 | MakeCallback(env()->oncomplete_string(), 1, &arg); | |
| 734 | 744 | } | |
| 735 | 745 | ||
@@ -743,6 +753,9 @@ class QueryWrap : public AsyncWrap { | |||
| 743 | 753 | } | |
| 744 | 754 | ||
| 745 | 755 | ChannelWrap* channel_; | |
| 756 | + | ||
| 757 | + private: | ||
| 758 | + const char* trace_name_; | ||
| 746 | 759 | }; | |
| 747 | 760 | ||
| 748 | 761 | ||
@@ -1173,7 +1186,7 @@ int ParseSoaReply(Environment* env, | |||
| 1173 | 1186 | class QueryAnyWrap: public QueryWrap { | |
| 1174 | 1187 | public: | |
| 1175 | 1188 | QueryAnyWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1176 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1189 | + : QueryWrap(channel, req_wrap_obj, "resolveAny") { | ||
| 1177 | 1190 | } | |
| 1178 | 1191 | ||
| 1179 | 1192 | int Send(const char* name) override { | |
@@ -1354,7 +1367,7 @@ class QueryAnyWrap: public QueryWrap { | |||
| 1354 | 1367 | class QueryAWrap: public QueryWrap { | |
| 1355 | 1368 | public: | |
| 1356 | 1369 | QueryAWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1357 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1370 | + : QueryWrap(channel, req_wrap_obj, "resolve4") { | ||
| 1358 | 1371 | } | |
| 1359 | 1372 | ||
| 1360 | 1373 | int Send(const char* name) override { | |
@@ -1402,7 +1415,7 @@ class QueryAWrap: public QueryWrap { | |||
| 1402 | 1415 | class QueryAaaaWrap: public QueryWrap { | |
| 1403 | 1416 | public: | |
| 1404 | 1417 | QueryAaaaWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1405 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1418 | + : QueryWrap(channel, req_wrap_obj, "resolve6") { | ||
| 1406 | 1419 | } | |
| 1407 | 1420 | ||
| 1408 | 1421 | int Send(const char* name) override { | |
@@ -1450,7 +1463,7 @@ class QueryAaaaWrap: public QueryWrap { | |||
| 1450 | 1463 | class QueryCnameWrap: public QueryWrap { | |
| 1451 | 1464 | public: | |
| 1452 | 1465 | QueryCnameWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1453 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1466 | + : QueryWrap(channel, req_wrap_obj, "resolveCname") { | ||
| 1454 | 1467 | } | |
| 1455 | 1468 | ||
| 1456 | 1469 | int Send(const char* name) override { | |
@@ -1485,7 +1498,7 @@ class QueryCnameWrap: public QueryWrap { | |||
| 1485 | 1498 | class QueryMxWrap: public QueryWrap { | |
| 1486 | 1499 | public: | |
| 1487 | 1500 | QueryMxWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1488 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1501 | + : QueryWrap(channel, req_wrap_obj, "resolveMx") { | ||
| 1489 | 1502 | } | |
| 1490 | 1503 | ||
| 1491 | 1504 | int Send(const char* name) override { | |
@@ -1520,7 +1533,7 @@ class QueryMxWrap: public QueryWrap { | |||
| 1520 | 1533 | class QueryNsWrap: public QueryWrap { | |
| 1521 | 1534 | public: | |
| 1522 | 1535 | QueryNsWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1523 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1536 | + : QueryWrap(channel, req_wrap_obj, "resolveNs") { | ||
| 1524 | 1537 | } | |
| 1525 | 1538 | ||
| 1526 | 1539 | int Send(const char* name) override { | |
@@ -1555,7 +1568,7 @@ class QueryNsWrap: public QueryWrap { | |||
| 1555 | 1568 | class QueryTxtWrap: public QueryWrap { | |
| 1556 | 1569 | public: | |
| 1557 | 1570 | QueryTxtWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1558 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1571 | + : QueryWrap(channel, req_wrap_obj, "resolveTxt") { | ||
| 1559 | 1572 | } | |
| 1560 | 1573 | ||
| 1561 | 1574 | int Send(const char* name) override { | |
@@ -1589,7 +1602,7 @@ class QueryTxtWrap: public QueryWrap { | |||
| 1589 | 1602 | class QuerySrvWrap: public QueryWrap { | |
| 1590 | 1603 | public: | |
| 1591 | 1604 | explicit QuerySrvWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1592 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1605 | + : QueryWrap(channel, req_wrap_obj, "resolveSrv") { | ||
| 1593 | 1606 | } | |
| 1594 | 1607 | ||
| 1595 | 1608 | int Send(const char* name) override { | |
@@ -1622,7 +1635,7 @@ class QuerySrvWrap: public QueryWrap { | |||
| 1622 | 1635 | class QueryPtrWrap: public QueryWrap { | |
| 1623 | 1636 | public: | |
| 1624 | 1637 | explicit QueryPtrWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1625 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1638 | + : QueryWrap(channel, req_wrap_obj, "resolvePtr") { | ||
| 1626 | 1639 | } | |
| 1627 | 1640 | ||
| 1628 | 1641 | int Send(const char* name) override { | |
@@ -1657,7 +1670,7 @@ class QueryPtrWrap: public QueryWrap { | |||
| 1657 | 1670 | class QueryNaptrWrap: public QueryWrap { | |
| 1658 | 1671 | public: | |
| 1659 | 1672 | explicit QueryNaptrWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1660 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1673 | + : QueryWrap(channel, req_wrap_obj, "resolveNaptr") { | ||
| 1661 | 1674 | } | |
| 1662 | 1675 | ||
| 1663 | 1676 | int Send(const char* name) override { | |
@@ -1691,7 +1704,7 @@ class QueryNaptrWrap: public QueryWrap { | |||
| 1691 | 1704 | class QuerySoaWrap: public QueryWrap { | |
| 1692 | 1705 | public: | |
| 1693 | 1706 | QuerySoaWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1694 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1707 | + : QueryWrap(channel, req_wrap_obj, "resolveSoa") { | ||
| 1695 | 1708 | } | |
| 1696 | 1709 | ||
| 1697 | 1710 | int Send(const char* name) override { | |
@@ -1756,7 +1769,7 @@ class QuerySoaWrap: public QueryWrap { | |||
| 1756 | 1769 | class GetHostByAddrWrap: public QueryWrap { | |
| 1757 | 1770 | public: | |
| 1758 | 1771 | explicit GetHostByAddrWrap(ChannelWrap* channel, Local<Object> req_wrap_obj) | |
| 1759 | - : QueryWrap(channel, req_wrap_obj) { | ||
| 1772 | + : QueryWrap(channel, req_wrap_obj, "reverse") { | ||
| 1760 | 1773 | } | |
| 1761 | 1774 | ||
| 1762 | 1775 | int Send(const char* name) override { | |
@@ -1773,6 +1786,11 @@ class GetHostByAddrWrap: public QueryWrap { | |||
| 1773 | 1786 | return UV_EINVAL; // So errnoException() reports a proper error. | |
| 1774 | 1787 | } | |
| 1775 | 1788 | ||
| 1789 | + TRACE_EVENT_NESTABLE_ASYNC_BEGIN2( | ||
| 1790 | + TRACING_CATEGORY_NODE2(dns, native), "reverse", this, | ||
| 1791 | + "name", TRACE_STR_COPY(name), | ||
| 1792 | + "family", family == AF_INET ? "ipv4" : "ipv6"); | ||
| 1793 | + | ||
| 1776 | 1794 | ares_gethostbyaddr(channel_->cares_channel(), | |
| 1777 | 1795 | address_buffer, | |
| 1778 | 1796 | length, | |
@@ -1835,8 +1853,10 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { | |||
| 1835 | 1853 | Null(env->isolate()) | |
| 1836 | 1854 | }; | |
| 1837 | 1855 | ||
| 1856 | + uint64_t n = 0; | ||
| 1857 | + const bool verbatim = req_wrap->verbatim(); | ||
| 1858 | + | ||
| 1838 | 1859 | if (status == 0) { | |
| 1839 | - int n = 0; | ||
| 1840 | 1860 | Local<Array> results = Array::New(env->isolate()); | |
| 1841 | 1861 | ||
| 1842 | 1862 | auto add = [&] (bool want_ipv4, bool want_ipv6) { | |
@@ -1864,7 +1884,6 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { | |||
| 1864 | 1884 | } | |
| 1865 | 1885 | }; | |
| 1866 | 1886 | ||
| 1867 | - const bool verbatim = req_wrap->verbatim(); | ||
| 1868 | 1887 | add(true, verbatim); | |
| 1869 | 1888 | if (verbatim == false) | |
| 1870 | 1889 | add(false, true); | |
@@ -1879,6 +1898,10 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) { | |||
| 1879 | 1898 | ||
| 1880 | 1899 | uv_freeaddrinfo(res); | |
| 1881 | 1900 | ||
| 1901 | + TRACE_EVENT_NESTABLE_ASYNC_END2( | ||
| 1902 | + TRACING_CATEGORY_NODE2(dns, native), "lookup", req_wrap, | ||
| 1903 | + "count", n, "verbatim", verbatim); | ||
| 1904 | + | ||
| 1882 | 1905 | // Make the callback into JavaScript | |
| 1883 | 1906 | req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv); | |
| 1884 | 1907 | ||
@@ -1910,6 +1933,11 @@ void AfterGetNameInfo(uv_getnameinfo_t* req, | |||
| 1910 | 1933 | argv[2] = js_service; | |
| 1911 | 1934 | } | |
| 1912 | 1935 | ||
| 1936 | + TRACE_EVENT_NESTABLE_ASYNC_END2( | ||
| 1937 | + TRACING_CATEGORY_NODE2(dns, native), "lookupService", req_wrap, | ||
| 1938 | + "hostname", TRACE_STR_COPY(hostname), | ||
| 1939 | + "service", TRACE_STR_COPY(service)); | ||
| 1940 | + | ||
| 1913 | 1941 | // Make the callback into JavaScript | |
| 1914 | 1942 | req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv); | |
| 1915 | 1943 | ||
@@ -1986,6 +2014,12 @@ void GetAddrInfo(const FunctionCallbackInfo<Value>& args) { | |||
| 1986 | 2014 | hints.ai_socktype = SOCK_STREAM; | |
| 1987 | 2015 | hints.ai_flags = flags; | |
| 1988 | 2016 | ||
| 2017 | + TRACE_EVENT_NESTABLE_ASYNC_BEGIN2( | ||
| 2018 | + TRACING_CATEGORY_NODE2(dns, native), "lookup", req_wrap, | ||
| 2019 | + "hostname", TRACE_STR_COPY(*hostname), | ||
| 2020 | + "family", | ||
| 2021 | + family == AF_INET ? "ipv4" : family == AF_INET6 ? "ipv6" : "unspec"); | ||
| 2022 | + | ||
| 1989 | 2023 | int err = req_wrap->Dispatch(uv_getaddrinfo, | |
| 1990 | 2024 | AfterGetAddrInfo, | |
| 1991 | 2025 | *hostname, | |
@@ -2014,6 +2048,10 @@ void GetNameInfo(const FunctionCallbackInfo<Value>& args) { | |||
| 2014 | 2048 | ||
| 2015 | 2049 | GetNameInfoReqWrap* req_wrap = new GetNameInfoReqWrap(env, req_wrap_obj); | |
| 2016 | 2050 | ||
| 2051 | + TRACE_EVENT_NESTABLE_ASYNC_BEGIN2( | ||
| 2052 | + TRACING_CATEGORY_NODE2(dns, native), "lookupService", req_wrap, | ||
| 2053 | + "ip", TRACE_STR_COPY(*ip), "port", port); | ||
| 2054 | + | ||
| 2017 | 2055 | int err = req_wrap->Dispatch(uv_getnameinfo, | |
| 2018 | 2056 | AfterGetNameInfo, | |
| 2019 | 2057 | reinterpret_cast<struct sockaddr*>(&addr), | |
@@ -2145,6 +2183,9 @@ void Cancel(const FunctionCallbackInfo<Value>& args) { | |||
| 2145 | 2183 | ChannelWrap* channel; | |
| 2146 | 2184 | ASSIGN_OR_RETURN_UNWRAP(&channel, args.Holder()); | |
| 2147 | 2185 | ||
| 2186 | + TRACE_EVENT_INSTANT0(TRACING_CATEGORY_NODE2(dns, native), | ||
| 2187 | + "cancel", TRACE_EVENT_SCOPE_THREAD); | ||
| 2188 | + | ||
| 2148 | 2189 | ares_cancel(channel->cares_channel()); | |
| 2149 | 2190 | } | |
| 2150 | 2191 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,68 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + const common = require('../common'); | ||
| 3 | + const assert = require('assert'); | ||
| 4 | + const cp = require('child_process'); | ||
| 5 | + const path = require('path'); | ||
| 6 | + const tmpdir = require('../common/tmpdir'); | ||
| 7 | + const fs = require('fs'); | ||
| 8 | + const util = require('util'); | ||
| 9 | + | ||
| 10 | + if (!common.isMainThread) | ||
| 11 | + common.skip('process.chdir is not available in Workers'); | ||
| 12 | + | ||
| 13 | + const traceFile = 'node_trace.1.log'; | ||
| 14 | + | ||
| 15 | + tmpdir.refresh(); | ||
| 16 | + process.chdir(tmpdir.path); | ||
| 17 | + | ||
| 18 | + const test_str = 'const dns = require("dns");' + | ||
| 19 | + 'const options = {' + | ||
| 20 | + ' family: 4,' + | ||
| 21 | + ' hints: dns.ADDRCONFIG | dns.V4MAPPED,' + | ||
| 22 | + '};'; | ||
| 23 | + | ||
| 24 | + const tests = { | ||
| 25 | + 'lookup': 'dns.lookup("example.com", options, (err, address, family) => {});', | ||
| 26 | + 'lookupService': 'dns.lookupService("127.0.0.1", 22, ' + | ||
| 27 | + '(err, hostname, service) => {});', | ||
| 28 | + 'reverse': 'dns.reverse("8.8.8.8", (err, hostnames) => {});', | ||
| 29 | + 'resolveAny': 'dns.resolveAny("example.com", (err, res) => {});', | ||
| 30 | + 'resolve4': 'dns.resolve4("example.com", (err, res) => {});', | ||
| 31 | + 'resolve6': 'dns.resolve6("example.com", (err, res) => {});', | ||
| 32 | + 'resolveCname': 'dns.resolveCname("example.com", (err, res) => {});', | ||
| 33 | + 'resolveMx': 'dns.resolveMx("example.com", (err, res) => {});', | ||
| 34 | + 'resolveNs': 'dns.resolveNs("example.com", (err, res) => {});', | ||
| 35 | + 'resolveTxt': 'dns.resolveTxt("example.com", (err, res) => {});', | ||
| 36 | + 'resolveSrv': 'dns.resolveSrv("example.com", (err, res) => {});', | ||
| 37 | + 'resolvePtr': 'dns.resolvePtr("example.com", (err, res) => {});', | ||
| 38 | + 'resolveNaptr': 'dns.resolveNaptr("example.com", (err, res) => {});', | ||
| 39 | + 'resolveSoa': 'dns.resolveSoa("example.com", (err, res) => {});' | ||
| 40 | + }; | ||
| 41 | + | ||
| 42 | + for (const tr in tests) { | ||
| 43 | + const proc = cp.spawnSync(process.execPath, | ||
| 44 | + [ '--trace-event-categories', | ||
| 45 | + 'node.dns.native', | ||
| 46 | + '-e', | ||
| 47 | + test_str + tests[tr] | ||
| 48 | + ], | ||
| 49 | + { encoding: 'utf8' }); | ||
| 50 | + | ||
| 51 | + // Make sure the operation is successful. | ||
| 52 | + assert.strictEqual(proc.status, 0, `${tr}:\n${util.inspect(proc)}`); | ||
| 53 | + | ||
| 54 | + const file = path.join(tmpdir.path, traceFile); | ||
| 55 | + | ||
| 56 | + // Confirm that trace log file is created. | ||
| 57 | + assert(common.fileExists(file)); | ||
| 58 | + const data = fs.readFileSync(file); | ||
| 59 | + const traces = JSON.parse(data.toString()).traceEvents | ||
| 60 | + .filter((trace) => trace.cat !== '__metadata'); | ||
| 61 | + | ||
| 62 | + assert(traces.length > 0); | ||
| 63 | + | ||
| 64 | + // DNS native trace events should be generated. | ||
| 65 | + assert(traces.some((trace) => { | ||
| 66 | + return (trace.name === tr && trace.pid === proc.pid); | ||
| 67 | + })); | ||
| 68 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments