devservices 1.0.16__tar.gz → 1.0.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devservices-1.0.16 → devservices-1.0.17}/PKG-INFO +1 -1
- {devservices-1.0.16 → devservices-1.0.17}/README.md +1 -1
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/down.py +2 -2
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/list_dependencies.py +1 -1
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/logs.py +2 -2
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/up.py +2 -2
- {devservices-1.0.16 → devservices-1.0.17}/devservices/main.py +32 -3
- {devservices-1.0.16 → devservices-1.0.17}/devservices.egg-info/PKG-INFO +1 -1
- {devservices-1.0.16 → devservices-1.0.17}/pyproject.toml +1 -1
- {devservices-1.0.16 → devservices-1.0.17}/LICENSE.md +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/__init__.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/__init__.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/list_services.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/purge.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/status.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/commands/update.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/configs/service_config.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/constants.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/exceptions.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/__init__.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/check_for_update.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/console.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/dependencies.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/devenv.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/docker.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/docker_compose.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/file_lock.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/git.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/install_binary.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/services.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices/utils/state.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices.egg-info/SOURCES.txt +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices.egg-info/dependency_links.txt +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices.egg-info/entry_points.txt +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices.egg-info/requires.txt +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/devservices.egg-info/top_level.txt +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/setup.cfg +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/testing/__init__.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/testing/utils.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/__init__.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_down.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_list_dependencies.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_list_services.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_logs.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_purge.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_status.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_up.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/commands/test_update.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/configs/test_service_config.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/conftest.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_check_for_update.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_dependencies.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_docker.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_docker_compose.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_git.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_install_binary.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_services.py +0 -0
- {devservices-1.0.16 → devservices-1.0.17}/tests/utils/test_state.py +0 -0
|
@@ -60,7 +60,7 @@ def down(args: Namespace) -> None:
|
|
|
60
60
|
try:
|
|
61
61
|
service = find_matching_service(service_name)
|
|
62
62
|
except ConfigNotFoundError as e:
|
|
63
|
-
capture_exception(e)
|
|
63
|
+
capture_exception(e, level="info")
|
|
64
64
|
console.failure(
|
|
65
65
|
f"{str(e)}. Please specify a service (i.e. `devservices down sentry`) or run the command from a directory with a devservices configuration."
|
|
66
66
|
)
|
|
@@ -148,7 +148,7 @@ def down(args: Namespace) -> None:
|
|
|
148
148
|
try:
|
|
149
149
|
_down(service, remote_dependencies, list(mode_dependencies), status)
|
|
150
150
|
except DockerComposeError as dce:
|
|
151
|
-
capture_exception(dce)
|
|
151
|
+
capture_exception(dce, level="info")
|
|
152
152
|
status.failure(f"Failed to stop {service.name}: {dce.stderr}")
|
|
153
153
|
exit(1)
|
|
154
154
|
else:
|
|
@@ -34,7 +34,7 @@ def list_dependencies(args: Namespace) -> None:
|
|
|
34
34
|
try:
|
|
35
35
|
service = find_matching_service(service_name)
|
|
36
36
|
except ConfigNotFoundError as e:
|
|
37
|
-
capture_exception(e)
|
|
37
|
+
capture_exception(e, level="info")
|
|
38
38
|
console.failure(
|
|
39
39
|
f"{str(e)}. Please specify a service (i.e. `devservices list-dependencies sentry`) or run the command from a directory with a devservices configuration."
|
|
40
40
|
)
|
|
@@ -49,7 +49,7 @@ def logs(args: Namespace) -> None:
|
|
|
49
49
|
try:
|
|
50
50
|
service = find_matching_service(service_name)
|
|
51
51
|
except ConfigNotFoundError as e:
|
|
52
|
-
capture_exception(e)
|
|
52
|
+
capture_exception(e, level="info")
|
|
53
53
|
console.failure(
|
|
54
54
|
f"{str(e)}. Please specify a service (i.e. `devservices logs sentry`) or run the command from a directory with a devservices configuration."
|
|
55
55
|
)
|
|
@@ -86,7 +86,7 @@ def logs(args: Namespace) -> None:
|
|
|
86
86
|
try:
|
|
87
87
|
logs_output = _logs(service, remote_dependencies, mode_dependencies)
|
|
88
88
|
except DockerComposeError as dce:
|
|
89
|
-
capture_exception(dce)
|
|
89
|
+
capture_exception(dce, level="info")
|
|
90
90
|
console.failure(f"Failed to get logs for {service.name}: {dce.stderr}")
|
|
91
91
|
exit(1)
|
|
92
92
|
for log in logs_output:
|
|
@@ -63,7 +63,7 @@ def up(args: Namespace) -> None:
|
|
|
63
63
|
try:
|
|
64
64
|
service = find_matching_service(service_name)
|
|
65
65
|
except ConfigNotFoundError as e:
|
|
66
|
-
capture_exception(e)
|
|
66
|
+
capture_exception(e, level="info")
|
|
67
67
|
console.failure(
|
|
68
68
|
f"{str(e)}. Please specify a service (i.e. `devservices up sentry`) or run the command from a directory with a devservices configuration."
|
|
69
69
|
)
|
|
@@ -110,7 +110,7 @@ def up(args: Namespace) -> None:
|
|
|
110
110
|
mode_dependencies = modes[mode]
|
|
111
111
|
_up(service, [mode], remote_dependencies, mode_dependencies, status)
|
|
112
112
|
except DockerComposeError as dce:
|
|
113
|
-
capture_exception(dce)
|
|
113
|
+
capture_exception(dce, level="info")
|
|
114
114
|
status.failure(f"Failed to start {service.name}: {dce.stderr}")
|
|
115
115
|
exit(1)
|
|
116
116
|
# TODO: We should factor in healthchecks here before marking service as running
|
|
@@ -15,6 +15,8 @@ from sentry_sdk import set_tag
|
|
|
15
15
|
from sentry_sdk import set_user
|
|
16
16
|
from sentry_sdk import start_transaction
|
|
17
17
|
from sentry_sdk.integrations.argv import ArgvIntegration
|
|
18
|
+
from sentry_sdk.types import Event
|
|
19
|
+
from sentry_sdk.types import Hint
|
|
18
20
|
|
|
19
21
|
from devservices.commands import down
|
|
20
22
|
from devservices.commands import list_dependencies
|
|
@@ -42,6 +44,31 @@ disable_sentry = os.environ.get("DEVSERVICES_DISABLE_SENTRY", default="0") == "1
|
|
|
42
44
|
logging.basicConfig(level=logging.INFO)
|
|
43
45
|
current_version = metadata.version("devservices")
|
|
44
46
|
|
|
47
|
+
error_trace_ids = set()
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def before_send_error(event: Event, hint: Hint) -> Event:
|
|
51
|
+
"""Gets the trace_id from the errors we care about.
|
|
52
|
+
|
|
53
|
+
This function is used as a before_send callback for Sentry to track error trace IDs.
|
|
54
|
+
It adds the trace_id to error_trace_ids set for non-info level events.
|
|
55
|
+
"""
|
|
56
|
+
if event["level"] != "info":
|
|
57
|
+
error_trace_ids.add(event["contexts"]["trace"]["trace_id"])
|
|
58
|
+
return event
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def before_send_transaction(event: Event, hint: Hint) -> Event:
|
|
62
|
+
"""Manually sets the status of a transaction.
|
|
63
|
+
|
|
64
|
+
This function is used as a before_send_transaction callback for Sentry to mark transaction status
|
|
65
|
+
as unknown if they don't correspond to errors we care about.
|
|
66
|
+
"""
|
|
67
|
+
if event["contexts"]["trace"]["trace_id"] not in error_trace_ids:
|
|
68
|
+
event["contexts"]["trace"]["status"] = "unknown"
|
|
69
|
+
return event
|
|
70
|
+
|
|
71
|
+
|
|
45
72
|
if not disable_sentry:
|
|
46
73
|
init(
|
|
47
74
|
dsn="https://56470da7302c16e83141f62f88e46449@o1.ingest.us.sentry.io/4507946704961536",
|
|
@@ -50,6 +77,8 @@ if not disable_sentry:
|
|
|
50
77
|
enable_tracing=True,
|
|
51
78
|
integrations=[ArgvIntegration()],
|
|
52
79
|
environment=sentry_environment,
|
|
80
|
+
before_send=before_send_error,
|
|
81
|
+
before_send_transaction=before_send_transaction,
|
|
53
82
|
release=current_version,
|
|
54
83
|
)
|
|
55
84
|
username = getpass.getuser()
|
|
@@ -59,7 +88,7 @@ if not disable_sentry:
|
|
|
59
88
|
git_version = get_git_version()
|
|
60
89
|
set_tag("git_version", git_version)
|
|
61
90
|
except GitError as e:
|
|
62
|
-
capture_exception(e)
|
|
91
|
+
capture_exception(e, level="info")
|
|
63
92
|
logging.debug("Failed to get git version: %s", e)
|
|
64
93
|
set_tag("git_version", "unknown")
|
|
65
94
|
|
|
@@ -75,11 +104,11 @@ def main() -> None:
|
|
|
75
104
|
try:
|
|
76
105
|
check_docker_compose_version()
|
|
77
106
|
except DockerDaemonNotRunningError as e:
|
|
78
|
-
capture_exception(e)
|
|
107
|
+
capture_exception(e, level="info")
|
|
79
108
|
console.failure(str(e))
|
|
80
109
|
exit(1)
|
|
81
110
|
except DockerComposeInstallationError as e:
|
|
82
|
-
capture_exception(e)
|
|
111
|
+
capture_exception(e, level="info")
|
|
83
112
|
console.failure("Failed to ensure docker compose is installed and up-to-date")
|
|
84
113
|
exit(1)
|
|
85
114
|
parser = argparse.ArgumentParser(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|