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

vitals macOS 14 یا اس سے بعد کے ورژن چلانے والے Apple Silicon Macs کے لیے ایک سسٹم مانیٹر ہے۔ ایک واحد Rust بائنری ان-پروسیس CPU، GPU، میموری، پاور اور تھرمل اسٹیٹ کے نمونے لیتی ہے: یہ powermetrics کے لیے شیل آؤٹ نہیں کرتا، اسے sudo کی ضرورت نہیں ہوتی، اور یہ کسی قسم کا کوئی سب پروسیس شروع نہیں کرتا۔ آؤٹ پٹ اسٹرکچرڈ JSON ہوتا ہے جسے کوئی اسکرپٹ، ایجنٹ یا انسان براہ راست پڑھ سکتا ہے۔ یہی بائنری، بغیر کسی آرگیومنٹ کے چلانے پر، ایک مینو بار ٹرے آئٹم کے طور پر کام کرتی ہے جس میں ایک اختیاری لوکل ڈیش بورڈ بھی شامل ہے۔ کمانڈ لائن وربس (Command-line verbs) snapshot ایک مکمل SoC نمونہ پرنٹ کرتا ہے: ہوسٹ چپ اور کورز کی تعداد، سسٹم کی مجموعی CPU یوٹیلائزیشن، کور کی قسم (ایفیشنسی یا پرفارمنس)، فریکوئنسی اور یوٹیلائزیشن کے ساتھ فی کور اندراجات، GPU یوٹیلائزیشن اور فریکوئنسی، میموری اور سویپ (swap) کے مجموعی اعداد و شمار اور استعمال، کرنل میموری پریشر، CPU، GPU، ANE، RAM اور سسٹم کے لیے پاور کے اعداد و شمار، CPU اور GPU کا درجہ حرارت، زیادہ سے زیادہ حد کے ساتھ فین کی رفتار، لوڈ ایوریجز، اپ ٹائم اور تھرمل اسٹیٹ۔ ایک انٹرول آپشن اس سیمپلنگ ونڈو کو تبدیل کرتا ہے جس کے دوران CPU، GPU اور پاور ریزیڈنسی کو انٹیگریٹ کیا جاتا ہے۔ top پروسیسز کو CPU اور میموری کے لحاظ سے رینک کرتا ہے، آزادانہ طور پر اور قابلِ ترتیب رو (row) تعداد کے ساتھ، تاکہ ایک ہی پروسیس دونوں فہرستوں میں ظاہر ہو سکے۔ CPU فیصد سسٹم کی مجموعی سطح کے بجائے فی پروسیس ہوتا ہے، اور ملٹی کور کام کے دوران 100 سے تجاوز کر سکتا ہے، جیسا کہ ps میں ہوتا ہے۔ pressure خام اعداد و شمار کے بجائے ایک فیصلہ (verdict) واپس کرتا ہے: ایک اسٹیٹ، ایک جھنڈا (flag) کہ آیا قابلِ استعمال ہسٹری موجود ہے، کوڈز اور شدت کے ساتھ وجوہات کی فہرست، مشکوک پروسیسز کی فہرست جس میں ہر ایک کے نشان زدہ ہونے کی وجہ، اور ایک لائن کا خلاصہ۔ ڈیزائن کے مطابق، یہ خراب اسٹیٹ کی رپورٹ کرتے وقت زیرو (0) پر ایگزٹ کرتا ہے، کیونکہ رپورٹنگ کا مطلب ناکامی نہیں ہے۔ ایک ایگزٹ کوڈ جھنڈا فیصلے کی شدت کو اسٹیٹس میں تبدیل کر دیتا ہے (0 نارمل، 3 وارننگ، 4 کریٹیکل)، جبکہ رن ٹائم کی ناکامی 1 پر اور غلط انوکیشن 2 پر ایگزٹ کرتی ہے۔ watch واحد ورب ہے جو خود بخود ایگزٹ نہیں کرتا۔ یہ ہر لائن کے بعد فلش کرتے ہوئے فی لائن ایک کومپیکٹ JSON آبجیکٹ جاری کرتا ہے، اور تب تک چلتا ہے جب تک اسے روک نہ دیا جائے یا مطلوبہ نمونوں کی تعداد جاری نہ ہو جائے۔ انٹرول کیڈنس اور سیمپلنگ ونڈو دونوں کو سیٹ کرتا ہے۔ چونکہ آؤٹ پٹ فی لائن فلش ہوتا ہے، اس لیے ایک کنزیومر جو ایک لائن پڑھ کر پائپ بند کرتا ہے، اسے کلین ایگزٹ ملتا ہے۔ یہ ہمیشہ نیو لائن ڈی لیمیٹڈ JSON ہوتا ہے اور JSON جھنڈے کو مسترد کرتا ہے۔ snapshot، top اور pressure کے لیے JSON ڈیفالٹ ہے؛ ہر ایک ٹرمینلز کے لیے انسانی طور پر پڑھنے کے قابل ٹیکسٹ فارم بھی قبول کرتا ہے، اور JSON جھنڈے کو no-op کے طور پر قبول کیا جاتا ہے۔ ہر جواب میں ایک اسکیما ورژن ہوتا ہے۔ یونٹس الگ فیلڈز کے بجائے کی (key) کے ناموں میں ہوتے ہیں (میموری MB میں، پاور واٹس میں، درجہ حرارت سیلسیس میں)، اور غیر موجود اختیاری فیلڈز کو null کے بجائے حذف کر دیا جاتا ہے۔ مینو بار ایپ اور ڈیش بورڈ بغیر آرگیومنٹس کے چلانے پر، vitals ایک مینو بار ٹرے ہے جس میں لائیو ٹیکسٹ اور ایک کسٹم ڈراپ ڈاؤن ہے جو CPU (ایک اسپارک لائن پلس فی کور ایک بار، ایفیشنسی اور پرفارمنس کورز مختلف رنگوں میں)، GPU، کرنل پریشر سگنل کے ذریعے پرکھی گئی میموری، اور پاور کا احاطہ کرتا ہے۔ ہیڈ لائن ویلیوز تھریش ہولڈز پر رنگ بدلتی ہیں، ڈراپ ڈاؤن بند ہونے کے دوران کچھ بھی ری ڈرا نہیں ہوتا، اور ڈسپلے کے سونے (sleep) کے دوران سیمپلنگ کی رفتار کم ہو جاتی ہے۔ ایپ خود کو ایک ایکسیسری (accessory) کے طور پر ظاہر کرتی ہے، اس لیے اس کا کوئی Dock آئیکن اور ایپ سوئچر انٹری نہیں ہوتی جب تک کہ ونڈو کی درخواست نہ کی جائے۔ ڈراپ ڈاؤن سے یا چلنے والی ایپ کو دوبارہ کھول کر ایک ڈیش بورڈ کھولا جا سکتا ہے، اور یہ ایک نیٹو ونڈو میں کھلتا ہے جس کی پشت پر ایک ویب ویو ہوتا ہے، اور یہ اپنے طور پر ایک پروسیس کے طور پر چلتا ہے۔ جب یہ کھلا ہوتا ہے تو اس کا ایک Dock ٹائل اور ایپ مینو ہوتا ہے؛ جب یہ بند ہوتا ہے، تو وہ پروسیس ایگزٹ ہو جاتا ہے، جس سے بند ڈیش بورڈ کی لاگت صفر رہتی ہے۔ اگر ٹرے بند ہو جائے یا کریش ہو جائے، تو ونڈو فائل ڈیسکرپٹر واچ کے ذریعے اسے محسوس کرتی ہے اور فوری طور پر ایگزٹ ہو جاتی ہے۔ HTTP سرور ٹرے پروسیس کے اندر چلتا ہے اور ضرورت پڑنے پر شروع ہوتا ہے، لہذا ایک ٹرے جس سے کبھی ڈیش بورڈ نہیں مانگا گیا، اس کا کوئی لسنر اور کوئی دوسرا سیمپلر نہیں ہوتا۔ ڈیش بورڈ پیج کو اوپر سے نیچے پڑھنے کے لیے بنایا گیا ہے: وہی فیصلہ جو pressure ورب پیدا کرتا ہے، CPU، GPU، میموری اور پاور کے لیے چار ٹائلز جن میں ہیڈ لائن فگر، اسٹیٹس ڈاٹ، کانٹیکسٹ لائن اور ٹرینڈ ہوتا ہے، 2، 5 یا 15 منٹ کے لیے ایک رینج کنٹرول جو اس کے نیچے کی ہر چیز کا دائرہ کار طے کرتا ہے، وقت کے ساتھ CPU اور GPU چارٹس جس میں کراس ہیئر اور ٹول ٹپ ہوتا ہے، پوزیشن کے لحاظ سے لیبل شدہ فی کور ایک بار جس میں ہوور کرنے پر کلاک اسپیڈ نظر آتی ہے، میموری اور سویپ میٹرز جن کی بھرائی کرنل پریشر سگنل کے مطابق ہوتی ہے، اور ان لائن بارز کے ساتھ ٹاپ پروسیسز۔ ہر چارٹ میں اسی ڈیٹا کے لیے چارٹ-یا-ٹیبل ٹوگل ہوتا ہے، پیج چھپنے پر پولنگ رک جاتی ہے، سرور کے چلے جانے پر آخری درست رینڈر اسکرین پر مدہم رہ جاتا ہے، اور لائٹ یا ڈارک تھیم سسٹم کی پیروی کرتا ہے۔ انسٹالیشن اور پیکیجنگ انسٹالیشن کے دو آزاد راستے vitals کو PATH پر ختم کرتے ہیں۔ ایک بلڈ اور اس کے بعد انسٹال ریلیز بائنری کو ایک پری فکس bin ڈائریکٹری میں سم لنک (symlink) کرتا ہے (sudo سے بچنے کے لیے پری فکس کو اوور رائیڈ کریں، اور ایک uninstall ٹارگٹ سم لنک کو ہٹا دیتا ہے)۔ ایپ انسٹال پاتھ بلڈ کرتا ہے، بنڈل کرتا ہے، ایپ کو Applications فولڈر میں کاپی کرتا ہے، ایک فی صارف لانچ ایجنٹ انسٹال کرتا ہے تاکہ ٹرے ہر لاگ ان پر شروع ہو، اور اسی سم لنک کو بنڈل کی کاپی کی طرف موڑ دیتا ہے؛ ایک میچنگ uninstall ٹارگٹ ان سب کو واپس کر دیتا ہے۔ بنڈل نوٹرائیزڈ ہونے کے بجائے ایڈ-ہاک سائنڈ ہے، جو لانچ ایجنٹ کی ایگزیکیوشن کے لیے کافی ہے؛ Finder کے ذریعے ایپ کھولنے کے لیے ایک بار رائٹ کلک Open یا سسٹم سیٹنگز میں منظوری کی ضرورت ہو سکتی ہے۔ ڈیولپمنٹ بلڈ، ٹیسٹ، clippy-with-warnings-as-errors اور فارمیٹنگ کے لیے make ٹارگٹس موجود ہیں۔ ڈیش بورڈ ایک Vite اور React ایپ ہے جس کا پروڈکشن بلڈ آؤٹ پٹ کمپائل ٹائم پر بائنری میں ایمبیڈ کر دیا جاتا ہے، اس لیے پیج کے بعد بائنری کو دوبارہ بلڈ کرنا ضروری ہے۔ ہاٹ رিলোڈ کے ساتھ ایک ڈیولپ سرور API درخواستوں کو لوکل پورٹ پر پراکسی کرتا ہے، اس لیے یہ کسی بھی چلنے والے انسٹنس کے ساتھ کام کرتا ہے، بشمول ٹرے کے اندر موجود انسٹنس کے۔ ٹریب یوٹ (Contributing) بگ رپورٹس، پیمائشوں اور پل ریکویسٹ (pull requests) کے ذریعے ہے، جبکہ کمزوریوں (vulnerabilities) کے لیے ایک الگ چینل ہے۔ پروجیکٹ MIT لائسنس کے تحت ہے۔