منصوبے کے بارے میں

Argos ایک ڈیکلیریٹو OpenTelemetry انسٹرومنٹیشن لائبریری ہے جس کا مقصد Go مائیکرو سروسز ہیں، اور اسے زیرو-ایلوکیشن (zero-allocation) ڈسپلن کے گرد بنایا گیا ہے۔ README اسے Go ایکو سسٹم میں دو دیگر طریقوں کے متبادل کے طور پر پیش کرتا ہے: Java کے -javaagent بائٹ کوڈ انسٹرومنٹیشن جیسا کوئی متبادل موجود نہیں ہے، اور "زیرو-کوڈ" آپشن (eBPF) کے لیے اعلیٰ اختیارات (elevated privileges)، حالیہ Linux کرنل کی ضرورت ہوتی ہے اور یہ صرف محدود لائبریریوں کا احاطہ کرتا ہے۔ اس کے بجائے Argos ایک لو-کوڈ راستہ اختیار کرتا ہے: اسٹارٹ اپ پر ایک انیشلائزیشن کال، جس کے بعد استعمال ہونے والی ہر کلائنٹ لائبریری کے لیے ایک واضح، ڈراپ-ان ریپر (wrapper) استعمال کیا جاتا ہے، جس میں کوئی monkey-patching اور ہاٹ پاتھ پر کوئی reflection نہیں ہوتا۔ سیٹ اپ اور لائف سائیکل ایک واحد argos.Run کال Init، SIGINT/SIGTERM سے متحرک ہونے والے شٹ ڈاؤن اور Shutdown کو ایک ساتھ جوڑتی ہے، جس میں WithServiceName جیسے فنکشنل آپشنز شامل ہوتے ہیں۔ README میں ذکر ہے کہ جب زیادہ کنٹرول کی ضرورت ہو تو لوئر لیول Init/Shutdown جوڑا دستیاب ہے۔ کنفیگریشن یا تو فنکشنل آپشنز کے ذریعے فراہم کی جا سکتی ہے یا YAML فائل سے لوڈ کی جا سکتی ہے۔ رُوٹ ماڈیول Trace/TraceFunc ہیلپرز، Resource، Propagation، گلوبل ایمبینٹ لاگنگ کے ساتھ Logger، اور ایک argostest پیکیج فراہم کرتا ہے۔ ڈیفالٹ طور پر ٹریسز اور میٹرکس OTLP کے ذریعے localhost:4317 پر ایکسپورٹ ہوتے ہیں اور 'fail open' رہتے ہیں، تاکہ کلیکٹر نہ چلنے کی صورت میں بھی درخواستیں کام کرتی رہیں۔ انٹیگریشنز ہر وینڈر SDK ریپر اپنے Go ماڈیول میں رہتا ہے جس کا اپنا go.mod ہوتا ہے، لہذا ایک کو امپورٹ کرنے سے دوسرے کی ٹرانزیٹو ڈیپینڈنسیز شامل نہیں ہوتیں۔ دستاویزی کوریج میں HTTP سرورز (net/http, chi, gin, echo, fiber, gorilla/mux)، HTTP کلائنٹ کے طور پر کوئی بھی http.RoundTripper، کوئی بھی database/sql ڈرائیور، GORM، go-redis v9، MongoDB ڈرائیور v2، Cassandra کے لیے gocql، Kafka کے لیے Sarama، RabbitMQ کے لیے amqp091-go، Azure Service Bus، GCP Pub/Sub v2، gRPC، pkg/sftp اور net/smtp شامل ہیں۔ کہا گیا ہے کہ ہر ماڈیول حقیقی ٹیسٹ، ایک بیس لائن بمقابلہ انسٹرومنٹڈ بینچ مارک کے ساتھ آتا ہے، اور golangci-lint، gosec اور govulncheck پاس کرتا ہے۔ ان لائبریریوں کے لیے جو ابھی تک کور نہیں کی گئیں، ایک کنٹری بیوشن ٹیمپلیٹ اور ڈیسیزن ٹری فراہم کی گئی ہے۔ رُوٹ ماڈیول میں جان بوجھ کر زیرو وینڈر SDK ڈیپینڈنسیز رکھی گئی ہیں۔ نمونے اور ٹولنگ آٹھ رن ایبل مائیکرو سروسز کی دستاویزات موجود ہیں، جن میں سے ہر ایک کا اپنا docker-compose.yml اور README ہے۔ چھ سروسز ایک راؤٹر کو ڈیٹا یا میسجنگ اسٹیک کے ساتھ جوڑتی ہیں (مثال کے طور پر gin + GORM/PostgreSQL + Kafka، یا fiber + Cassandra + SFTP)؛ inventory-api اور inventory-worker ایک تعاون کرنے والا جوڑا بناتے ہیں جس کی درخواست ایک واحد ٹریس پیدا کرتی ہے جو دونوں پراسیسز تک پھیلا ہوتا ہے۔ ایک cmd/doctor CLI کسی Go پروجیکٹ کے امپورٹس کو اسکین کرتا ہے اور کسی بھی میچنگ Argos انٹیگریشن کی تجویز دیتا ہے جو ابھی تک منسلک نہیں ہے؛ -strict تجاویز کو CI فیلر میں بدل دیتا ہے، اور -init ایک اسٹارٹر argos.config.yaml اور main.go سنپٹ تیار کرتا ہے۔ ریپوزٹری ایک Go ورک اسپیس ملٹی-ماڈیول لے آؤٹ ہے جس میں کور ماڈیول، انٹیگریشنز، cmd/doctor، نمونے، مثالیں، ایک mkdocs-material ڈاکومنٹیشن سائٹ اور Grafana LGTM اور OTel Collector اسٹیک کے ساتھ ایک Docker سیٹ اپ شامل ہے۔ Make ٹارگٹس بلڈ، ٹیسٹ، بینچ، لنٹ، فارمیٹنگ، سیکیورٹی اسکیننگ اور ٹیلی میٹری یا بیک اینڈ اسٹیکس کو چلانے اور بند کرنے کا احاطہ کرتے ہیں۔ استحکام اور بیان کردہ حدود تمام ماڈیولز ابھی v0.x ہیں، اس لیے کسی بھی ماڈیول کی پبلک API معمولی ورژنز کے درمیان تبدیل ہو سکتی ہے، اگرچہ موجودہ ریلیزز قابلِ حل رہتی ہیں۔ ضروریات اور شواہد کو واضح تحفظات کے ساتھ بیان کیا گیا ہے: Go 1.26 یا اس کے بعد کا ورژن ضروری ہے، پہلے کے ورژنز سپورٹڈ نہیں ہیں۔ آپٹ-ان کیپچر اور ماسکنگ فیچرز صرف جزوی طور پر سخت ہیں - capture.MaskSQL کی تصدیق مسلسل فز ٹیسٹنگ (fuzz testing) کے ذریعے کی گئی ہے جس نے ایک حقیقی بگ کو ڈھونڈا اور ٹھیک کیا، جبکہ HTTP کلائنٹ، HTTP سرور اور gRPC انٹیگریشنز پر ہیڈر اور باڈی کیپچر یونٹ ٹیسٹ سے کور ہیں لیکن ان پر اسی طرح کی فزنگ نہیں ہوئی ہے۔ inventory-api/inventory-worker جوڑے پر ایک گھنٹے کے سوک ٹیسٹ (soak test) نے، جس میں HTTP، gRPC، SQL، Redis، Kafka، MongoDB اور Cassandra کو مخلوط ٹریفک (~245k درخواستیں) کے تحت آزمایا گیا، کسی goroutine یا میموری گروتھ کا مظاہرہ نہیں کیا، لیکن اسے صرف ان انٹیگریشنز کے ثبوت کے طور پر پیش کیا گیا ہے جن کی مشق کی گئی، نہ کہ ایک مکمل ضمانت کے طور پر - RabbitMQ، GCP Pub/Sub، Azure Service Bus، SFTP اور SMTP کے لیے کوئی مخصوص سوک ٹیسٹ نہیں ہے، اور ایک گھنٹے سے زیادہ کے رنز کور نہیں کیے گئے۔ بینچ مارکس مسلسل لوڈ کی تصدیق کے بجائے شارٹ-برسٹ ہیں ۔ پروجیکٹ MIT لائسنس کے تحت ہے۔