इस प्रोजेक्ट के बारे में
vitals macOS 14 या उसके बाद के वर्ज़न पर चलने वाले Apple Silicon Macs के लिए एक सिस्टम मॉनिटर है। एक सिंगल Rust बाइनरी इन-प्रोसेस CPU, GPU, मेमोरी, पावर और थर्मल स्टेट को सैंपल करती है: यह powermetrics का उपयोग नहीं करती, इसे sudo की आवश्यकता नहीं होती, और यह किसी भी प्रकार का सबप्रोसेस शुरू नहीं करती है। आउटपुट स्ट्रक्चर्ड JSON होता है जिसे कोई स्क्रिप्ट, एजेंट या व्यक्ति सीधे पढ़ सकता है। बिना किसी आर्गुमेंट के चलाया गया यही बाइनरी एक मेनू बार ट्रे आइटम भी है, जिसमें एक वैकल्पिक लोकल डैशबोर्ड उपलब्ध है।
कमांड-लाइन वर्ब्स
snapshot एक पूर्ण SoC सैंपल प्रिंट करता है: होस्ट चिप और कोर काउंट, सिस्टम-वाइड CPU उपयोग, कोर प्रकार (एफिशिएंसी या परफॉरमेंस), फ्रीक्वेंसी और उपयोग के साथ प्रति-कोर प्रविष्टियाँ, GPU उपयोग और फ्रीक्वेंसी, मेमोरी और स्वैप कुल और उपयोग, कर्नेल मेमोरी प्रेशर, CPU, GPU, ANE, RAM और सिस्टम के लिए पावर आंकड़े, CPU और GPU तापमान, अधिकतम सीमा के साथ फैन स्पीड, लोड एवरेज, अपटाइम और थर्मल स्टेट। एक इंटरवल विकल्प उस सैंपलिंग विंडो को बदलता है जिसके ऊपर CPU, GPU और पावर रेजिडेंसी को इंटीग्रेट किया जाता है।
top CPU और मेमोरी के आधार पर प्रोसेस को रैंक करता है, स्वतंत्र रूप से और कॉन्फ़िगर करने योग्य रो काउंट के साथ, ताकि एक ही प्रोसेस दोनों सूचियों में दिखाई दे सके। CPU प्रतिशत सिस्टम-वाइड होने के बजाय प्रति प्रोसेस होता है, और multi-core कार्य पर ps की तरह 100 से अधिक हो सकता है।
pressure कच्चे नंबरों के बजाय एक फैसला (verdict) देता है: एक स्टेट, एक फ्लैग कि उपयोग करने योग्य हिस्ट्री मौजूद है या नहीं, कोड और गंभीरता के साथ कारणों की एक सूची, उन संदिग्ध प्रोसेस की सूची जिन्हें फ्लैग किया गया है, और एक एक-लाइन सारांश। डिज़ाइन के अनुसार, खराब स्टेट की रिपोर्ट करते समय यह जीरो एग्जिट करता है, क्योंकि रिपोर्टिंग विफल होना नहीं है। एक एग्जिट-कोड फ्लैग फैसले की गंभीरता को स्टेटस में बदल देता है (0 सामान्य, 3 चेतावनी, 4 क्रिटिकल), जबकि रनटाइम विफलता 1 पर एग्जिट करती है और गलत इनवोकेशन 2 पर एग्जिट करता है।
watch एकमात्र वर्ब है जो अपने आप एग्जिट नहीं होता है। यह प्रति लाइन एक कॉम्पैक्ट JSON ऑब्जेक्ट उत्सर्जित करता है, जिसे हर लाइन के बाद फ्लश किया जाता है, और यह तब तक चलता है जब तक इसे बाधित न किया जाए या जब तक अनुरोधित सैंपल्स की संख्या पूरी न हो जाए। इंटरवल कैडेंस और सैंपलिंग विंडो दोनों को सेट करता है। क्योंकि आउटपुट प्रति लाइन फ्लश होता है, एक कंज्यूमर जो एक लाइन पढ़ता है और पाइप बंद करता है, उसे क्लीन एग्जिट मिलता है। यह हमेशा न्यूलाइन-डिलिमिटेड JSON होता है और JSON फ्लैग को अस्वीकार करता है।
snapshot, top और pressure के लिए JSON डिफॉल्ट है; प्रत्येक टर्मिनल के लिए मानव-पठनीय टेक्स्ट फॉर्म भी स्वीकार करता है, और JSON फ्लैग को no-op के रूप में स्वीकार किया जाता है। हर रिस्पॉन्स में एक स्कीमा वर्ज़न होता है। यूनिट्स अलग फ़ील्ड्स के बजाय की-नेम (मेमोरी MB में, पावर वॉट में, तापमान सेल्सियस में) में होती हैं, और अनुपस्थित वैकल्पिक फ़ील्ड्स को null के रूप में उत्सर्जित करने के बजाय हटा दिया जाता है।
मेनू बार ऐप और डैशबोर्ड
बिना आर्गुमेंट्स के चलाने पर, vitals एक मेनू बार ट्रे है जिसमें लाइव टेक्स्ट और एक कस्टम ड्रॉपडाउन है जिसमें CPU (एक स्पार्कलाइन और प्रति कोर एक बार, एफिशिएंसी और परफॉरमेंस कोर अलग-अलग रंगों में), GPU, कर्नेल प्रेशर सिग्नल द्वारा आंकी गई मेमोरी, और पावर शामिल हैं। हेडलाइन वैल्यूज़ थ्रेशोल्ड पर रंग बदलती हैं, ड्रॉपडाउन बंद होने पर कुछ भी रिड्रॉ नहीं होता, और डिस्प्ले स्लीप होने पर सैंपलिंग कैडेंस कम हो जाता है।
ऐप खुद को एक एक्सेसरी के रूप में घोषित करता है, इसलिए जब तक विंडो का अनुरोध नहीं किया जाता, इसका कोई Dock आइकन और ऐप-स्विचर प्रविष्टि नहीं होती है। ड्रॉपडाउन से या चल रहे ऐप को फिर से खोलकर एक डैशबोर्ड खोला जा सकता है, और यह एक नेटिव विंडो में खुलता है जो वेब व्यू द्वारा समर्थित है, और यह अपनी खुद की प्रोसेस के रूप में चलता है। जब यह खुला होता है, तो इसका एक Dock टाइल और ऐप मेनू होता है; जब यह बंद होता है, तो वह प्रोसेस एग्जिट हो जाती है, जिससे बंद डैशबोर्ड की लागत शून्य रहती है। यदि ट्रे क्विट या क्रैश हो जाती है, तो विंडो एक फ़ाइल-डिस्क्रिप्टर वॉच के माध्यम से इसे नोटिस करती है और तुरंत एग्जिट हो जाती है। HTTP सर्वर ट्रे प्रोसेस के अंदर चलता है और डिमांड पर शुरू होता है, इसलिए जिस ट्रे से कभी डैशबोर्ड नहीं मांगा गया, उसका कोई लिसनर और कोई दूसरा सैंपलर नहीं होता है।
डैशबोर्ड पेज को ऊपर-से-नीचे पढ़ने के लिए बनाया गया है: वही फैसला जो pressure वर्ब देता है, CPU, GPU, मेमोरी और पावर के लिए चार टाइल्स जिनमें हेडलाइन फिगर, स्टेटस डॉट, कॉन्टेक्स्ट लाइन और ट्रेंड होता है, 2, 5 या 15 मिनट के लिए एक रेंज कंट्रोल जो इसके नीचे की हर चीज़ को स्कोप करता है, समय के साथ CPU और GPU चार्ट जिसमें क्रॉसहेयर और टूलटिप होता है, पोजीशन द्वारा लेबल किया गया प्रति कोर एक बार जिसमें होवर करने पर क्लॉक स्पीड दिखती है, मेमोरी और स्वैप मीटर जिनका फिल कर्नेल प्रेशर सिग्नल का पालन करता है, और इनलाइन बार्स के साथ टॉप प्रोसेस। हर चार्ट में उसी डेटा के लिए चार्ट-या-टेबल टॉगल होता है, पेज छिपने पर पोलिंग रुक जाती है, सर्वर चले जाने पर आखिरी अच्छा रेंडर स्क्रीन पर डिम्ड रहता है, और लाइट या डार्क थीम सिस्टम का पालन करती है।
इंस्टॉलेशन और पैकेजिंग
दो स्वतंत्र इंस्टॉल पाथ vitals को PATH पर समाप्त करते हैं। एक बिल्ड और उसके बाद इंस्टॉल, रिलीज बाइनरी को एक प्रीफिक्स बिन डायरेक्टरी में सिम्लिंक करता है (sudo से बचने के लिए प्रीफिक्स को ओवरराइड करें, और एक अनइंस्टॉल टारगेट सिम्लिंक को हटा देता है)। ऐप इंस्टॉल पाथ बिल्ड करता है, बंडल करता है, ऐप को Applications फोल्डर में कॉपी करता है, प्रति-यूज़र लॉन्च एजेंट इंस्टॉल करता है ताकि ट्रे हर लॉगिन पर शुरू हो, और उसी सिम्लिंक को बंडल की कॉपी पर रिपॉइंट करता है; एक मैचिंग अनइंस्टॉल टारगेट इन सबको रिवर्स कर देता है। बंडल नोटराइज्ड होने के बजाय एड-हॉक साइन्ड है, जो लॉन्च-एजेंट निष्पादन के लिए पर्याप्त है; फाइंडर के माध्यम से ऐप खोलने के लिए एक बार राइट-क्लिक Open या सिस्टम सेटिंग्स में अप्रूवल की आवश्यकता हो सकती है।
डेवलपमेंट
बिल्ड, टेस्ट, clippy-with-warnings-as-errors और फॉर्मेटिंग के लिए make टारगेट हैं। डैशबोर्ड एक Vite और React ऐप है जिसका प्रोडक्शन बिल्ड आउटपुट कंपाइल टाइम पर बाइनरी में एम्बेड किया जाता है, इसलिए पेज के बाद बाइनरी को फिर से बिल्ड करना होगा। हॉट रीलोड के साथ एक डेव सर्वर API अनुरोधों को लोकल पोर्ट पर प्रॉक्सी करता है, इसलिए यह ट्रे के अंदर वाले सहित किसी भी चल रहे इंस्टेंस के साथ काम करता है।
कंट्रीब्यूशन बग रिपोर्ट्स, मेजरमेंट्स और पुल रिक्वेस्ट के माध्यम से है, जिसमें वल्नरेबिलिटीज़ के लिए एक अलग चैनल है। प्रोजेक्ट MIT लाइसेंस के तहत है।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.