• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

localstack / localstack / 20565403496

29 Dec 2025 05:11AM UTC coverage: 84.103% (-2.8%) from 86.921%
20565403496

Pull #13567

github

web-flow
Merge 4816837a5 into 2417384aa
Pull Request #13567: Update ASF APIs

67166 of 79862 relevant lines covered (84.1%)

0.84 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

81.58
/localstack-core/localstack/runtime/analytics.py
1
import logging
1✔
2
import os
1✔
3

4
from localstack import config
1✔
5
from localstack.runtime import hooks
1✔
6
from localstack.utils.analytics import log
1✔
7

8
LOG = logging.getLogger(__name__)
1✔
9

10
# Config options for which both usage and values are reported in analytics.
11
# Important: This list must only contain options whose values do not contain PII or sensitive data.
12
TRACKED_ENV_VAR = [
1✔
13
    "ACTIVATE_PRO",
14
    "ALLOW_NONSTANDARD_REGIONS",
15
    "BEDROCK_PREWARM",
16
    "CFN_IGNORE_UNSUPPORTED_TYPE_CREATE",
17
    "CFN_IGNORE_UNSUPPORTED_TYPE_UPDATE",
18
    "CFN_IGNORE_UNSUPPORTED_RESOURCE_TYPES",
19
    "CLOUDFRONT_LAMBDA_EDGE",
20
    "CONTAINER_RUNTIME",
21
    "DEBUG",
22
    "DEFAULT_REGION",  # Not functional; deprecated in 0.12.7, removed in 3.0.0
23
    "DEFAULT_BEDROCK_MODEL",
24
    "DISABLE_CORS_CHECK",
25
    "DISABLE_CORS_HEADERS",
26
    "DMS_SERVERLESS_DEPROVISIONING_DELAY",
27
    "DMS_SERVERLESS_STATUS_CHANGE_WAITING_TIME",
28
    "DNS_ADDRESS",
29
    "DYNAMODB_ERROR_PROBABILITY",
30
    "DYNAMODB_IN_MEMORY",
31
    "DYNAMODB_REMOVE_EXPIRED_ITEMS",
32
    "EAGER_SERVICE_LOADING",
33
    "EC2_DOCKER_INIT",
34
    "EC2_VM_MANAGER",
35
    "ECS_TASK_EXECUTOR",
36
    "EDGE_PORT",
37
    "ENABLE_REPLICATOR",
38
    "ENFORCE_IAM",
39
    "ES_CUSTOM_BACKEND",  # deprecated in 0.14.0, removed in 3.0.0
40
    "ES_MULTI_CLUSTER",  # deprecated in 0.14.0, removed in 3.0.0
41
    "ES_ENDPOINT_STRATEGY",  # deprecated in 0.14.0, removed in 3.0.0
42
    "EVENT_RULE_ENGINE",
43
    "IAM_SOFT_MODE",
44
    "KINESIS_PROVIDER",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
45
    "KINESIS_ERROR_PROBABILITY",
46
    "KMS_PROVIDER",  # defunct since 1.4.0
47
    "LAMBDA_DEBUG_MODE",
48
    "LAMBDA_DOWNLOAD_AWS_LAYERS",
49
    "LAMBDA_EXECUTOR",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
50
    "LAMBDA_STAY_OPEN_MODE",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
51
    "LAMBDA_REMOTE_DOCKER",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
52
    "LAMBDA_CODE_EXTRACT_TIME",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
53
    "LAMBDA_CONTAINER_REGISTRY",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
54
    "LAMBDA_FALLBACK_URL",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
55
    "LAMBDA_FORWARD_URL",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
56
    "LAMBDA_XRAY_INIT",  # Not functional; deprecated in 2.0.0, removed in 3.0.0
57
    "LAMBDA_PREBUILD_IMAGES",
58
    "LAMBDA_RUNTIME_EXECUTOR",
59
    "LAMBDA_RUNTIME_ENVIRONMENT_TIMEOUT",
60
    "LEGACY_EDGE_PROXY",  # Not functional; deprecated in 1.0.0, removed in 2.0.0
61
    "LS_LOG",
62
    "LOCALSTACK_K8S_DEPLOYMENT_METHOD",
63
    "MOCK_UNIMPLEMENTED",  # Not functional; deprecated in 1.3.0, removed in 3.0.0
64
    "OPENSEARCH_ENDPOINT_STRATEGY",
65
    "PERSISTENCE",
66
    "PERSISTENCE_SINGLE_FILE",
67
    "PERSIST_ALL",  # defunct since 2.3.2
68
    "PORT_WEB_UI",
69
    "RDS_MYSQL_DOCKER",
70
    "REQUIRE_PRO",
71
    "SERVICES",
72
    "STRICT_SERVICE_LOADING",
73
    "SKIP_INFRA_DOWNLOADS",
74
    "SQS_ENDPOINT_STRATEGY",
75
    "USE_SINGLE_REGION",  # Not functional; deprecated in 0.12.7, removed in 3.0.0
76
    "USE_SSL",
77
]
78

79
# Config options for which only the usage is reported in analytics.
80
# Use this for options which may hold sensitive data or PII.
81
PRESENCE_ENV_VAR = [
1✔
82
    "DATA_DIR",
83
    "EDGE_FORWARD_URL",  # Not functional; deprecated in 1.4.0, removed in 3.0.0
84
    "EC2_HYPERVISOR_URI",
85
    "EC2_REFERENCE_DOMAIN",
86
    "EC2_LIBVIRT_NETWORK",
87
    "EC2_LIBVIRT_POOL",
88
    "GATEWAY_LISTEN",
89
    "HOSTNAME",
90
    "HOSTNAME_EXTERNAL",
91
    "HOSTNAME_FROM_LAMBDA",
92
    "HOST_TMP_FOLDER",  # Not functional; deprecated in 1.0.0, removed in 2.0.0
93
    "INIT_SCRIPTS_PATH",  # Not functional; deprecated in 1.1.0, removed in 2.0.0
94
    "KUBERNETES_SERVICE_HOST",
95
    "LAMBDA_DEBUG_MODE_CONFIG_PATH",
96
    "LEGACY_DIRECTORIES",  # Not functional; deprecated in 1.1.0, removed in 2.0.0
97
    "LEGACY_INIT_DIR",  # Not functional; deprecated in 1.1.0, removed in 2.0.0
98
    "LOCALSTACK_HOST",
99
    "LOCALSTACK_HOSTNAME",
100
    "OUTBOUND_HTTP_PROXY",
101
    "OUTBOUND_HTTPS_PROXY",
102
    "S3_DIR",
103
    "SFN_MOCK_CONFIG",
104
    "TMPDIR",
105
]
106

107

108
@hooks.on_infra_start()
1✔
109
def _publish_config_as_analytics_event():
1✔
110
    env_vars = list(TRACKED_ENV_VAR)
1✔
111

112
    for key, value in os.environ.items():
1✔
113
        if key.startswith("PROVIDER_OVERRIDE_"):
1✔
114
            env_vars.append(key)
×
115
        elif key.startswith("SYNCHRONOUS_") and key.endswith("_EVENTS"):
1✔
116
            # these config variables have been removed with 3.0.0
117
            env_vars.append(key)
×
118

119
    env_vars = {key: os.getenv(key) for key in env_vars}
1✔
120
    present_env_vars = {env_var: 1 for env_var in PRESENCE_ENV_VAR if os.getenv(env_var)}
1✔
121

122
    log.event("config", env_vars=env_vars, set_vars=present_env_vars)
1✔
123

124

125
class LocalstackContainerInfo:
1✔
126
    def get_image_variant(self) -> str:
1✔
127
        for f in os.listdir("/usr/lib/localstack"):
1✔
128
            if f.startswith(".") and f.endswith("-version"):
1✔
129
                return f[1:-8]
1✔
130
        return "unknown"
×
131

132
    def has_docker_socket(self) -> bool:
1✔
133
        return os.path.exists("/run/docker.sock")
1✔
134

135
    def to_dict(self):
1✔
136
        return {
1✔
137
            "variant": self.get_image_variant(),
138
            "has_docker_socket": self.has_docker_socket(),
139
        }
140

141

142
@hooks.on_infra_start()
1✔
143
def _publish_container_info():
1✔
144
    if not config.is_in_docker:
1✔
145
        return
×
146

147
    try:
1✔
148
        log.event("container_info", payload=LocalstackContainerInfo().to_dict())
1✔
149
    except Exception as e:
×
150
        if config.DEBUG_ANALYTICS:
×
151
            LOG.debug("error gathering container information: %s", e)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc