Browse Source

feat(js): Add more spans to js processing (#33540)

Add more sentry spans to javascript processing to get more insights into
slow transactions.
Joris Bayer 2 years ago
parent
commit
f4c1165234
1 changed files with 44 additions and 21 deletions
  1. 44 21
      src/sentry/lang/javascript/processor.py

+ 44 - 21
src/sentry/lang/javascript/processor.py

@@ -246,7 +246,10 @@ def fetch_and_cache_artifact(filename, fetch_fn, cache_key, cache_key_meta, head
             if z_body_size and z_body_size > CACHE_MAX_VALUE_SIZE:
                 return None, fp.read()
             else:
-                return compress_fn(fp)
+                with sentry_sdk.start_span(
+                    op="JavaScriptStacktraceProcessor.fetch_and_cache_artifact.compress"
+                ):
+                    return compress_fn(fp)
 
     try:
         with metrics.timer("sourcemaps.release_file_read"):
@@ -362,14 +365,17 @@ def fetch_release_file(filename, release, dist=None):
                 release.id,
             )
 
-            result = fetch_and_cache_artifact(
-                filename,
-                lambda: ReleaseFile.cache.getfile(releasefile),
-                cache_key,
-                cache_key_meta,
-                releasefile.file.headers,
-                compress_file,
-            )
+            with sentry_sdk.start_span(
+                op="JavaScriptStacktraceProcessor.fetch_release_file.fetch_and_cache"
+            ):
+                result = fetch_and_cache_artifact(
+                    filename,
+                    lambda: ReleaseFile.cache.getfile(releasefile),
+                    cache_key,
+                    cache_key_meta,
+                    releasefile.file.headers,
+                    compress_file,
+                )
 
     # in the cache as an unsuccessful attempt
     elif result == -1:
@@ -532,7 +538,10 @@ def fetch_release_artifact(url, release, dist):
         return result_from_cache(url, result)
 
     start = time.monotonic()
-    archive_file = fetch_release_archive_for_url(release, dist, url)
+    with sentry_sdk.start_span(
+        op="JavaScriptStacktraceProcessor.fetch_release_artifact.fetch_release_archive_for_url"
+    ):
+        archive_file = fetch_release_archive_for_url(release, dist, url)
     if archive_file is not None:
         try:
             archive = ReleaseArchive(archive_file)
@@ -581,7 +590,10 @@ def fetch_release_artifact(url, release, dist):
 
     # Fall back to maintain compatibility with old releases and versions of
     # sentry-cli which upload files individually
-    result = fetch_release_file(url, release, dist)
+    with sentry_sdk.start_span(
+        op="JavaScriptStacktraceProcessor.fetch_release_artifact.fetch_release_file"
+    ):
+        result = fetch_release_file(url, release, dist)
 
     return result
 
@@ -602,7 +614,10 @@ def fetch_file(url, project=None, release=None, dist=None, allow_scraping=True):
 
     # if we've got a release to look on, try that first (incl associated cache)
     if release:
-        result = fetch_release_artifact(url, release, dist)
+        with sentry_sdk.start_span(
+            op="JavaScriptStacktraceProcessor.fetch_file.fetch_release_artifact"
+        ):
+            result = fetch_release_artifact(url, release, dist)
     else:
         result = None
 
@@ -641,8 +656,12 @@ def fetch_file(url, project=None, release=None, dist=None, allow_scraping=True):
                 headers[token_header] = token
 
         with metrics.timer("sourcemaps.fetch"):
-            result = http.fetch_file(url, headers=headers, verify_ssl=verify_ssl)
-            z_body = zlib.compress(result.body)
+            with sentry_sdk.start_span(op="JavaScriptStacktraceProcessor.fetch_file.http"):
+                result = http.fetch_file(url, headers=headers, verify_ssl=verify_ssl)
+            with sentry_sdk.start_span(
+                op="JavaScriptStacktraceProcessor.fetch_file.compress_for_cache"
+            ):
+                z_body = zlib.compress(result.body)
             cache.set(
                 cache_key,
                 (url, result.headers, z_body, result.status, result.encoding),
@@ -731,13 +750,17 @@ def fetch_sourcemap(url, project=None, release=None, dist=None, allow_scraping=T
             raise UnparseableSourcemap({"url": "<base64>", "reason": str(e)})
     else:
         # look in the database and, if not found, optionally try to scrape the web
-        result = fetch_file(
-            url,
-            project=project,
-            release=release,
-            dist=dist,
-            allow_scraping=allow_scraping,
-        )
+        with sentry_sdk.start_span(
+            op="JavaScriptStacktraceProcessor.fetch_sourcemap.fetch_file"
+        ) as span:
+            span.set_data("url", url)
+            result = fetch_file(
+                url,
+                project=project,
+                release=release,
+                dist=dist,
+                allow_scraping=allow_scraping,
+            )
         body = result.body
     try:
         return SourceMapView.from_json_bytes(body)