elastic / elastic/apm-agent-python

Refactor serialization mechanism to be extendable

Đang mở
#182 2 bình luận 1 reaction 0 người được giao Xem trên GitHub
agent-python
Ngôn ngữ chính
Python
Star
431
Fork
239
Merge trung bình
5 ngày 10 giờ
Pull request đã merge (30 ngày)
7

Mô tả

At the moment, our serialization code is just a really long `if-elif-elif-...` block: https://github.com/elastic/apm-agent-python/blob/ee45d21ff43be495089a005863b7f6af0707fe34/elasticapm/utils/encoding.py#L85-L138.

This has several drawbacks:
* it's not extendable (we e.g. might want to serialize Django `QuerySet` objects in a sane way that doesn't evaluate the queryset unnecessarily, but only if Django is installed)
* it's brittle
* it's hard to read
* ideally, serialization would also include shortening of values, which is hard to do in its current state

One option could be to have a registry, to which transformers can register themselves, together with a list of supported types for that transformer.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu bằng cách đọc elasticapm/utils/encoding.py quanh các dòng 85-138, nơi việc tuần tự hóa hiện được triển khai dưới dạng một chuỗi điều kiện dài. So sánh cách tiếp cận registry được đề xuất với nhu cầu xử lý tùy chọn Django QuerySet và rút ngắn giá trị. Công việc được xem là hoàn tất khi cơ chế tuần tự hóa có thể mở rộng, ít dễ hỏng hơn và tránh đánh giá QuerySet một cách không cần thiết khi Django được cài đặt.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
django, python
Lĩnh vực
backend
Loại issue
Tái cấu trúc
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
30/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.