প্রকল্প সম্পর্কে

vitals হলো macOS 14 বা তার পরবর্তী সংস্করণে চলা Apple Silicon Macs-এর জন্য একটি সিস্টেম মনিটর। একটি একক Rust বাইনারি ইন-প্রসেস পদ্ধতিতে CPU, GPU, মেমরি, পাওয়ার এবং থার্মাল স্টেট স্যাম্পল করে: এটি powermetrics-এর জন্য শেল আউট করে না, sudo-র প্রয়োজন হয় না এবং কোনো ধরনের সাবপ্রসেস শুরু করে না। এর আউটপুট হলো স্ট্রাকচার্ড JSON যা কোনো স্ক্রিপ্ট, এজেন্ট বা ব্যক্তি সরাসরি পড়তে পারে। কোনো আর্গুমেন্ট ছাড়াই এই একই বাইনারিটি রান করলে এটি একটি মেনু বার ট্রে আইটেম হিসেবে কাজ করে, যার সাথে একটি ঐচ্ছিক লোকাল ড্যাশবোর্ড রয়েছে। কমান্ড-লাইন ভার্বস (Command-line verbs) snapshot একটি পূর্ণাঙ্গ SoC স্যাম্পল প্রিন্ট করে: হোস্ট চিপ এবং কোর কাউন্ট, সিস্টেম-ওয়াইড CPU ইউটিলাইজেশন, কোর টাইপ (efficiency বা performance), ফ্রিকোয়েন্সি এবং ইউটিলাইজেশনসহ প্রতি কোরের এন্ট্রি, GPU ইউটিলাইজেশন এবং ফ্রিকোয়েন্সি, মেমরি এবং সোয়াপ টোটাল ও ইউসেজ, কার্নেল মেমরি প্রেশার, CPU, GPU, ANE, RAM এবং সিস্টেমের পাওয়ার ফিগার, CPU এবং GPU তাপমাত্রা, সর্বোচ্চ সীমা সহ ফ্যান স্পিড, লোড অ্যাভারেজ, আপটাইম এবং থার্মাল স্টেট। একটি ইন্টারভ্যাল অপশন সেই স্যাম্পলিং উইন্ডো পরিবর্তন করে যার মাধ্যমে CPU, GPU এবং পাওয়ার রেসিডেন্সি ইন্টিগ্রেট করা হয়। top প্রসেসগুলোকে CPU এবং মেমরির ভিত্তিতে স্বাধীনভাবে র‍্যাঙ্ক করে এবং এতে কনফিগারযোগ্য রো কাউন্ট থাকে, ফলে একই প্রসেস উভয় তালিকায় উপস্থিত থাকতে পারে। CPU পার্সেন্টেজ সিস্টেম-ওয়াইড হওয়ার পরিবর্তে প্রতি প্রসেসের জন্য আলাদা হয় এবং ps-এর মতো মাল্টি-কোর কাজের ক্ষেত্রে এটি ১০০-এর বেশি হতে পারে। pressure কাঁচা সংখ্যার পরিবর্তে একটি রায় (verdict) প্রদান করে: একটি স্টেট, ব্যবহারযোগ্য হিস্ট্রি আছে কি না তার একটি ফ্ল্যাগ, কোড এবং সেভেরিটি সহ কারণের তালিকা, প্রতিটি ফ্ল্যাগ করার কারণসহ সন্দেহভাজন প্রসেসের তালিকা এবং একটি এক লাইনের সারাংশ। ডিজাইনের কারণে এটি খারাপ স্টেট রিপোর্ট করার সময় জিরো এক্সিট করে, কারণ রিপোর্ট করা মানেই ব্যর্থ হওয়া নয়। একটি এক্সিট-কোড ফ্ল্যাগ রায়ের সেভেরিটিকে স্ট্যাটাসে রূপান্তর করে (০ নমিনাল, ৩ ওয়ার্নিং, ৪ ক্রিটিক্যাল), অন্যদিকে রানটাইম ফেইলিওর ১ এবং ভুল ইনভোকেশন ২ এক্সিট করে। watch একমাত্র ভার্ব যা নিজে থেকে এক্সিট করে না। এটি প্রতি লাইনে একটি কম্প্যাক্ট JSON অবজেক্ট নির্গত করে, যা প্রতি লাইনের পর ফ্লাশ করা হয় এবং ইন্টারাপ্ট করা পর্যন্ত বা অনুরোধ করা স্যাম্পল সংখ্যা নির্গত হওয়া পর্যন্ত চলে। ইন্টারভ্যালটি ক্যাডেন্স এবং স্যাম্পলিং উইন্ডো উভয়ই সেট করে। যেহেতু আউটপুট প্রতি লাইনে ফ্লাশ করা হয়, তাই যে কনজিউমার এক লাইন পড়ে পাইপটি বন্ধ করে দেয় সে একটি ক্লিন এক্সিট পায়। এটি সর্বদা নিউলাইন-ডিলিমিটেড JSON এবং JSON ফ্ল্যাগ প্রত্যাখ্যান করে। snapshot, top এবং pressure-এর জন্য JSON ডিফল্ট; তবে প্রতিটি টার্মিনালের জন্য হিউম্যান-রিডেবল টেক্সট ফর্মও গ্রহণ করে এবং JSON ফ্ল্যাগটি একটি no-op হিসেবে গৃহীত হয়। প্রতিটি রেসপন্সে একটি স্কিমা ভার্সন থাকে। ইউনিটগুলো আলাদা ফিল্ডের পরিবর্তে কি-নামের মধ্যেই থাকে (মেমরি MB-তে, পাওয়ার ওয়াটে, তাপমাত্রা সেলসিয়াসে) এবং অনুপস্থিত ঐচ্ছিক ফিল্ডগুলো null হিসেবে নির্গত না হয়ে বাদ দেওয়া হয়। মেনু বার অ্যাপ এবং ড্যাশবোর্ড আর্গুমেন্ট ছাড়া রান করলে, vitals একটি মেনু বার ট্রে হিসেবে কাজ করে যাতে লাইভ টেক্সট এবং একটি কাস্টম ড্রপডাউন থাকে। এতে CPU (একটি স্পার্কলাইন এবং প্রতি কোরের জন্য একটি বার, efficiency এবং performance কোর ভিন্ন ভিন্ন রঙে চিহ্নিত), GPU, কার্নেল প্রেশার সিগন্যাল দ্বারা বিচারিত মেমরি এবং পাওয়ার প্রদর্শিত হয়। হেডলাইন ভ্যালুগুলো নির্দিষ্ট থ্রেশহোল্ডে রঙ পরিবর্তন করে, ড্রপডাউন বন্ধ থাকা অবস্থায় কিছু রিড্র (redraw) হয় না এবং ডিসপ্লে স্লিপ মোডে থাকলে স্যাম্পলিং ক্যাডেন্স কমে যায়। অ্যাপটি নিজেকে একটি অ্যাক্সেসরি হিসেবে ঘোষণা করে, তাই উইন্ডো অনুরোধ না করা পর্যন্ত এর কোনো Dock আইকন বা অ্যাপ-সুইচার এন্ট্রি থাকে না। ড্রপডাউন থেকে অথবা চলমান অ্যাপটি পুনরায় খোলার মাধ্যমে একটি ড্যাশবোর্ড খোলা যায়, যা একটি নেটিভ উইন্ডোতে ওয়েব ভিউ-এর মাধ্যমে নিজস্ব প্রসেস হিসেবে খোলে। এটি খোলা থাকা অবস্থায় এর একটি Dock টাইল এবং অ্যাপ মেনু থাকে; যখন এটি বন্ধ হয়, সেই প্রসেসটি এক্সিট করে, যা বন্ধ ড্যাশবোর্ডকে শূন্য খরচে রাখে। যদি ট্রেটি কুইট বা ক্র্যাশ করে, তবে উইন্ডোটি ফাইল-ডেসক্রিপ্টর ওয়াচের মাধ্যমে তা বুঝতে পারে এবং দ্রুত এক্সিট করে। HTTP সার্ভারটি ট্রে প্রসেসের ভেতরে চলে এবং চাহিদামত শুরু হয়, তাই যে ট্রে-তে কখনো ড্যাশবোর্ডের অনুরোধ করা হয়নি তার কোনো লিসেনার বা দ্বিতীয় স্যাম্পলার থাকে না। ড্যাশবোর্ড পেজটি উপর-নিচ পড়ার জন্য তৈরি করা হয়েছে: pressure ভার্ব যা তৈরি করে সেই একই রায়, CPU, GPU, মেমরি এবং পাওয়ারের জন্য চারটি টাইল যাতে হেডলাইন ফিগার, স্ট্যাটাস ডট, কনটেক্সট লাইন এবং ট্রেন্ড থাকে, ২, ৫ বা ১৫ মিনিটের একটি রেঞ্জ কন্ট্রোল যা এর নিচের সবকিছুকে স্কোপ করে, সময়ের সাথে CPU এবং GPU চার্ট যাতে ক্রসহেয়ার এবং টুলটিপ থাকে, পজিশন দ্বারা লেবেলযুক্ত প্রতি কোরের জন্য একটি বার যাতে হোভার করলে ক্লক স্পিড দেখা যায়, মেমরি এবং সোয়াপ মিটার যার ফিল কার্নেল প্রেশার সিগন্যাল অনুসরণ করে, এবং ইনলাইন বারসহ শীর্ষ প্রসেসগুলো। প্রতিটি চার্টে একই ডেটার জন্য চার্ট-অথবা-টেবিল টগল থাকে, পেজটি হাইড হয়ে গেলে পোলিং বন্ধ হয়ে যায়, সার্ভার চলে গেলে শেষ ভালো রেন্ডারটি স্ক্রিনে ডিমড হয়ে থাকে এবং লাইট বা ডার্ক থিম সিস্টেমকে অনুসরণ করে। ইনস্টলেশন এবং প্যাকেজিং দুটি স্বাধীন ইনস্টল পাথ vitals-কে PATH-এ যুক্ত করে। একটি বিল্ড এবং তারপর ইনস্টল রিলিজ বাইনারিকে একটি প্রিফিক্স বিন ডিরেক্টরিতে সিমলিঙ্ক করে (sudo এড়াতে প্রিফিক্স ওভাররাইড করা যায় এবং একটি আনইনস্টল টার্গেট সিমলিঙ্কটি সরিয়ে ফেলে)। অ্যাপ ইনস্টল পাথটি বিল্ড করে, বান্ডেল করে, অ্যাপটিকে Applications ফোল্ডারে কপি করে, প্রতি ইউজারের জন্য একটি লঞ্চ এজেন্ট ইনস্টল করে যাতে প্রতি লগইনে ট্রেটি শুরু হয় এবং একই সিমলিঙ্কটিকে বান্ডেলের কপির দিকে নির্দেশ করে; একটি ম্যাচিং আনইনস্টল টার্গেট এই সবকিছুর বিপরীত কাজ করে। বান্ডেলটি নোটারিজড হওয়ার পরিবর্তে অ্যাড-হক সাইন করা, যা লঞ্চ-এজেন্ট এক্সিকিউশনের জন্য যথেষ্ট; ফাইন্ডারের মাধ্যমে অ্যাপটি খোলার জন্য একবার রাইট-ক্লিক Open বা সিস্টেম সেটিংস-এ অনুমোদনের প্রয়োজন হতে পারে। ডেভেলপমেন্ট বিল্ড, টেস্ট, clippy-with-warnings-as-errors এবং ফরম্যাটিং-এর জন্য make টার্গেট রয়েছে। ড্যাশবোর্ডটি একটি Vite এবং React অ্যাপ যার প্রোডাকশন বিল্ড আউটপুট কম্পাইল টাইমে বাইনারির ভেতরে এমবেড করা হয়, তাই পেজের পরিবর্তনের পর বাইনারিটি পুনরায় বিল্ড করতে হয়। হট রিলোড সহ একটি ডেভ সার্ভার API রিকোয়েস্টগুলোকে লোকাল পোর্টে প্রক্সি করে, ফলে এটি ট্রে-র ভেতরে থাকা সংস্করণসহ যেকোনো চলমান ইনস্ট্যান্সের সাথে কাজ করে। কন্ট্রিবিউশন করা যায় বাগ রিপোর্ট, মেজারমেন্ট এবং পুল রিকোয়েস্টের মাধ্যমে, এবং ভালনারেবিলিটির জন্য একটি আলাদা চ্যানেল রয়েছে। প্রজেক্টটি MIT লাইসেন্সপ্রাপ্ত।