-
-
Notifications
You must be signed in to change notification settings - Fork 57
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(snubsplain): Use request context to capture query processors
This change is a framework for how meta information about the query execution will be captured and surfaced through the tool. It starts with one simple data point, the entity query processors that ran. This can be expanded in subsequent PRs to add more information. Since the explain functionality is very similar to what the SnQL-to-SQL tool already does, the two endpoints were collapsed. The tools are still separate, and use different parts of the output. In the future the tools can be consolidated. The meta module that was added is the main interface for capturing the query steps. The data is stored as a list of steps, to preserve the order of execution during the pipeline. Changes: - Add a meta module to provide an interface for capturing steps during query execution. - Setup the meta capture based on the `dry_run` flag using the existing snql-to-sql tool
- Loading branch information
Showing
6 changed files
with
97 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
from __future__ import annotations | ||
|
||
from dataclasses import dataclass, field | ||
from typing import Any, cast | ||
|
||
from flask import g | ||
|
||
|
||
@dataclass | ||
class ExplainStep: | ||
category: str # The type of step e.g. "processor" | ||
name: str # The specific name for the step e.g. "TimeSeriesProcessor" | ||
data: dict[str, Any] = field( | ||
default_factory=dict | ||
) # Any extra information about the step | ||
|
||
|
||
@dataclass | ||
class ExplainMeta: | ||
steps: list[ExplainStep] = field(default_factory=list) | ||
|
||
def add_step(self, step: ExplainStep) -> None: | ||
self.steps.append(step) | ||
|
||
|
||
def add_step(category: str, name: str, data: dict[str, Any] | None = None) -> None: | ||
try: | ||
if data is None: | ||
data = {} | ||
step = ExplainStep(category, name, data) | ||
|
||
if not hasattr(g, "explain_meta"): | ||
g.explain_meta = ExplainMeta() | ||
|
||
g.explain_meta.add_step(step) | ||
except RuntimeError: | ||
# Code is executing outside of a flask context | ||
return | ||
|
||
|
||
def get_explain_meta() -> ExplainMeta | None: | ||
try: | ||
if hasattr(g, "explain_meta"): | ||
return cast(ExplainMeta, g.explain_meta) | ||
return None | ||
except RuntimeError: | ||
# Code is executing outside of a flask context | ||
return None | ||
|
||
|
||
def explain_cleanup() -> None: | ||
try: | ||
if hasattr(g, "explain_meta"): | ||
g.pop("explain_meta") | ||
except RuntimeError: | ||
# Code is executing outside of a flask context | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters