log-foundry 0.5.1.dev3__tar.gz → 0.5.1.dev4__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.
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/PKG-INFO +1 -1
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/pyproject.toml +1 -1
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/sqs.py +16 -13
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/LICENSE +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/README.md +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/__init__.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/api.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/config.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/console.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/context.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/decorator.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/ids.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/model.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/py.typed +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/__init__.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/_chunk.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/_socket.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/_time.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/base.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/callback.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/clickhouse.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/datadog.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/elasticsearch.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/eventhubs.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/file.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/filtering.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/firehose.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/honeycomb.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/http.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/kafka.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/kinesis.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/logging_sink.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/logstash.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/loki.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/mongodb.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/multi.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/nats.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/newrelic.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/postgres.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/pubsub.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/rabbitmq.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/redis.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/sentry.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/sns.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/splunk.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/sqlite.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/stdout.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/syslog.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/transform.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/sinks/util.py +0 -0
- {log_foundry-0.5.1.dev3 → log_foundry-0.5.1.dev4}/src/log_foundry/worker.py +0 -0
|
@@ -148,13 +148,16 @@ class SQSSink:
|
|
|
148
148
|
def _chunks(self, batch: list[dict[str, object]]) -> list[list[_Prepared]]:
|
|
149
149
|
"""Split ``batch`` into sends of ≤ ``MAX_BATCH`` entries and ≤ ``MAX_BYTES`` each.
|
|
150
150
|
|
|
151
|
-
Each event is serialized once with ``json.dumps
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
151
|
+
Each event is serialized once with ``json.dumps``, and on a FIFO queue its ids are
|
|
152
|
+
resolved once here too (SPEC-016 FR-005) — they travel in the same request, so both the
|
|
153
|
+
running budget and the single-entry check below cost them alongside the body.
|
|
154
|
+
|
|
155
|
+
An entry whose costed size exceeds ``MAX_BYTES`` can never fit a message, so it is
|
|
156
|
+
dropped with a counted warning (FR-004) instead of stalling the batch. The check is made
|
|
157
|
+
on everything that travels, not the body alone: a body just under the limit plus up to
|
|
158
|
+
256 bytes of FIFO ids would otherwise pass, then ship as a lone over-budget request that
|
|
159
|
+
SQS rejects as a sender fault — which FR-006 (rightly) never retries, losing the event
|
|
160
|
+
as an opaque failure instead of a labelled oversize drop.
|
|
158
161
|
"""
|
|
159
162
|
chunks: list[list[_Prepared]] = []
|
|
160
163
|
current: list[_Prepared] = []
|
|
@@ -162,6 +165,12 @@ class SQSSink:
|
|
|
162
165
|
for event in batch:
|
|
163
166
|
body = json.dumps(event)
|
|
164
167
|
size = len(body.encode("utf-8"))
|
|
168
|
+
group_id: str | None = None
|
|
169
|
+
dedup_id: str | None = None
|
|
170
|
+
if self.fifo:
|
|
171
|
+
group_id = self._group_id(event)
|
|
172
|
+
dedup_id = self._dedup_id(event)
|
|
173
|
+
size += len(group_id.encode("utf-8")) + len(dedup_id.encode("utf-8"))
|
|
165
174
|
if size > self.MAX_BYTES:
|
|
166
175
|
self.dropped_oversized += 1
|
|
167
176
|
sys.stderr.write(
|
|
@@ -169,12 +178,6 @@ class SQSSink:
|
|
|
169
178
|
f"{self.MAX_BYTES}-byte SQS message limit\n"
|
|
170
179
|
)
|
|
171
180
|
continue
|
|
172
|
-
group_id: str | None = None
|
|
173
|
-
dedup_id: str | None = None
|
|
174
|
-
if self.fifo:
|
|
175
|
-
group_id = self._group_id(event)
|
|
176
|
-
dedup_id = self._dedup_id(event)
|
|
177
|
-
size += len(group_id.encode("utf-8")) + len(dedup_id.encode("utf-8"))
|
|
178
181
|
if current and (
|
|
179
182
|
len(current) >= self.MAX_BATCH or current_bytes + size > self.MAX_BYTES
|
|
180
183
|
):
|
|
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
|