getsentry / sentry-native

Sentry SDK for C, C++ and native applications.
MIT License
393 stars 165 forks source link

Extend Envelope API to get item count, specific items #1038

Open mitchellh opened 2 weeks ago

mitchellh commented 2 weeks ago

In my use case, I'd like to filter envelopes in my transport depending on what is included in them (specifically, I only care about crashes). The envelope API as is is too limited to do this but I can see the envelope structure internally already easily has access to all the information I need. What I'd like to propose:

SENTRY_API size_t sentry_envelope_get_items_count(
    const sentry_envelope_t *envelope);

SENTRY_API sentry_value_t sentry_envelope_get_item_event(
    const sentry_envelope_t *envelope,
    size_t index,
);

SENTRY_API sentry_value_t sentry_envelope_get_item_headers(
    const sentry_envelope_t *envelope,
    size_t index,
);

I'd also be happy with making a new opaque sentry_envelope_item_t and building an API around that...

mitchellh commented 2 weeks ago

I just noticed the internal API has something very close to what I'd love to have exposed publicly:

// these for now are only needed for tests
#ifdef SENTRY_UNITTEST
size_t sentry__envelope_get_item_count(const sentry_envelope_t *envelope);
const sentry_envelope_item_t *sentry__envelope_get_item(
    const sentry_envelope_t *envelope, size_t idx);
sentry_value_t sentry__envelope_item_get_header(
    const sentry_envelope_item_t *item, const char *key);
const char *sentry__envelope_item_get_payload(
    const sentry_envelope_item_t *item, size_t *payload_len_out);
#endif
kahest commented 2 weeks ago

Hey @mitchellh thanks for the suggestion. We think this makes sense and we'll likely open this API up for the next release.