सामग्री पर जाएँ

रन और परिणाम ​

रन शुरू करना ​

एडिटर के टूलबार में प्रयोग चलाएँ दबाएँ। कुछ भी भेजे जाने से पहले:

  1. प्रयोग वैसे ही जाँचा जाता है जैसे एडिटर जाँचता है — उसका ग्राफ़, फ़ील्ड, नाम और मान (क्या जाँचा जाता है) — और उसका इस्तेमाल किया हर सीक्रेट सहेजा होना चाहिए (सीक्रेट)।
  2. वह सहेजा जाता है।
  3. रन अपनी पूरी अवधि के लिए जो चाहिए वह खोलता है: उसके एमुलेटर, उसके बाधा रिले, वे सॉकेट जिन पर उसकी प्रतीक्षाएँ सुनती हैं और उसके MQTT सब्सक्रिप्शन।

अगर इनमें से कुछ भी विफल हो, तो कुछ नहीं चलता: समस्या दिखाई जाती है, और जिस नोड के बारे में है वह चुना जाता है। वरना कैनवास के नीचे टाइमलाइन खुलती है और चरण उनके होते-होते उसमें दिखते हैं। जब तक रन चलता है, प्रयोग चलाएँ रोकें बन जाता है और प्रयोग संपादित नहीं किया जा सकता।

रन सक्रिय प्रोफ़ाइल के मान, और प्रयोग में पिन किया गया सीड या कोई नया, इस्तेमाल करता है। दूसरे मानों के साथ एक बार चलाने के लिए, इसके साथ चलाएँ… इस्तेमाल करें।

दूसरे मानों के साथ चलाना ​

प्रयोग चलाएँ के बगल में ▾ इसके साथ चलाएँ… खोलता है: एक रन के लिए दूसरे मान, प्रयोग को बदले बिना।

फ़ील्डक्याख़ाली
प्रोफ़ाइलइस रन की प्रोफ़ाइल; तब दिखता है जब प्रयोग में प्रोफ़ाइल होंसक्रिय वाली
हर पैरामीटरकेवल इस रन के लिए एक मानचुनी गई प्रोफ़ाइल का मान, धुँधला दिखाया हुआ
सीडइस रन का सीड, 0–9 007 199 254 740 991; इसके बगल का बटन अंतिम रन का सीड भर देता हैपिन किया गया सीड, या कोई नया

फ़ॉर्म में प्रयोग चलाएँ रन शुरू करता है; रीसेट करें फ़ॉर्म ख़ाली कर देता है। आपने जो टाइप किया वह सेशन के लिए फ़ॉर्म में रहता है, इसलिए अगली बार वही बदलाव एक क्लिक है। जो प्रोफ़ाइल चलेगी नहीं उसे ⚠ से चिह्नित किया जाता है। मानों की प्राथमिकता डेटा में है।

जब प्रयोग में प्रोफ़ाइल हों, या किसी रन के लिए मान टाइप किए गए हों, तो टाइमलाइन बताती है कि रन ने कौन-सी प्रोफ़ाइल इस्तेमाल की — या डिफ़ॉल्ट — और, जब मान टाइप किए गए हों, बदले गए मान।

टाइमलाइन ​

रन टाइमलाइन कैनवास के नीचे होती है; ▸ और ▾ उसे समेटते हैं, उसका किनारा उसका आकार बदलता है। इसमें हर चरण घटना के लिए एक पंक्ति होती है, सबसे पुरानी पहले: समय, नोड, उसकी स्थिति और क्या हुआ — HTTP 200 · 41 ms, token = abc123, /pong 42 ← 127.0.0.1:9000 · 12 ms। कोई विफलता कारण बताती है, उसका तकनीकी विवरण टूलटिप में। किसी पंक्ति पर क्लिक उसके नोड को कैनवास पर चुनता है।

स्थितिचरण
चल रहा हैशुरू हो चुका है
सफलअच्छे से समाप्त हुआ, और अपना आउटपुट चुना
विफलविफल हुआ; पहली विफलता रन की है
पुनः प्रयासएक कोशिश विफल हुई और फिर कोशिश करेगा (दोबारा प्रयास)
दोहरा रहा हैबार-बार भेज रहा है, अधिकतम सेकंड में एक पंक्ति (दोहराव)
लोड के तहतलोड के तहत है, सेकंड में एक पंक्ति (लोड)

कैनवास पर, हर नोड अपनी नवीनतम स्थिति वाला एक बैज रखता है।

टाइमलाइन के शीर्षक में होता है:

  • नतीजा: चल रहा है, सफल, कारण के साथ विफल, या रोका गया;
  • रिपोर्ट सहेजी गई जब रिपोर्ट लिख दी जाए — ब्राउज़र में एक लिंक जो उसे डाउनलोड करता है, डेस्कटॉप ऐप में उसका पथ टूलटिप में;
  • तुलना करें, इस रन को किसी पुराने रन के बगल में रखने के लिए (रनों की तुलना);
  • प्रोफ़ाइल और बदले गए मान, जैसा ऊपर;
  • रन का सीड पिन करें के साथ, या, जब प्रयोग में कोई पिन हो, वह सीड अनपिन करें के साथ (सीड)।

फ़्रेम। जब तक इंस्पेक्टर कैप्चर कर रहा हो, जो प्रतीक्षा — या अपने जवाब की प्रतीक्षा करता कोई भेजना — किसी संदेश से मेल खाती है, वह उस संदेश के फ़्रेम का नंबर रख लेती है। पंक्तियों के नीचे का एक बटन नोड और फ़्रेम का नाम बताता है; वह निचले पैनल में इंस्पेक्टर को उस फ़्रेम के चुने हुए खोलता है। देखें इंस्पेक्टर।

टाइमलाइन इस सेशन में प्रयोग के अंतिम रन को दिखाती है; जब कोई दूसरा प्रयोग खोला जाता है तो वह ख़ाली हो जाती है।

रोकें ​

रोकें दबाएँ, या हर जॉब के लिए एक साथ हेडर में सभी रोकें। रन तुरंत समाप्त होता है (रोकने पर क्या होता है), टाइमलाइन रोका गया दिखाती है, और कोई रिपोर्ट सहेजी नहीं जाती। कमांड लाइन या सर्वर पर API से शुरू किया गया रन किसी भी और जॉब की तरह होता है: उस सर्वर पर सभी रोकें उसे भी रोक देता है, और उसका कॉलर जान जाता है कि वह रोका गया।

नतीजा ​

नतीजाअर्थरिपोर्ट
सफलहर शाखा समाप्त हुई, कोई चरण विफल नहीं हुआ, और End तक पहुँचा गयासहेजी गई
विफलकोई चरण विफल हुआ — कोई जाँच, टाइमआउट वायर के बिना कोई प्रतीक्षा, कोई नेटवर्क त्रुटि, कोई थ्रेशोल्ड — या रन का समय समाप्त हो गया (run.timeout), कोई Join व्यर्थ प्रतीक्षा करता रहा (run.join_waiting), या कोई शाखा End तक नहीं पहुँची (run.no_end)सहेजी गई, पहली विफलता के साथ
रोका गयाकिसी ने उसे रोकाकोई नहीं
शुरू नहीं हुआप्रयोग अवैध है, कोई सीक्रेट ग़ायब है, या कोई पोर्ट खोला नहीं जा सकाकोई नहीं

विफल रन अपनी पहली विफलता का नोड और फ़ील्ड बताता है; त्रुटि संदर्भ हर कोड सूचीबद्ध करता है। कमांड लाइन अपने exit कोड के साथ वही कहती है: 0 सफल, 1 विफल, 2 प्रयोग या कॉल अवैध था (ग़ायब सीक्रेट भी गिना जाता है), 3 प्रयोग के बाहर की कोई चीज़ उसे चलने से रोक रही थी, जैसे कोई पोर्ट जो खोला नहीं जा सका। देखें signallab run।

रन रिपोर्ट ​

अपने आप समाप्त होने वाला हर रन — सफल हो या विफल — डेटा फ़ोल्डर के runs फ़ोल्डर में एक JSON रिपोर्ट लिखता है: डेस्कटॉप पर Documents/SignalLab/runs, सर्वर पर सर्वर का अपना डेटा फ़ोल्डर (फ़ाइलें)। फ़ाइल run-<start time in ms>-<job number>.json होती है; कोई रिपोर्ट किसी दूसरी पर कभी नहीं लिखी जाती। अगर वह लिखी न जा सके, तो एडिटर कारण बताता है।

कुंजीक्या
versionरिपोर्ट का प्रारूप, अब 5
experimentप्रयोग का नाम
document_versionप्रयोग का संस्करण, अब 9
seedरन ने जो सीड इस्तेमाल किया
profileजिस प्रोफ़ाइल के साथ वह चला, या डिफ़ॉल्ट के लिए null
overridesइसके साथ चलाएँ… में टाइप किए गए मान
paramsरन ने इस्तेमाल किया हर पैरामीटर मान
started_ms, ended_msUnix मिलीसेकंड
outcomepassed या failed
errorपहली विफलता, या null
stepsहर चरण घटना, क्रम में (नीचे)
emulatorsहर Emulator नोड की गिनतियाँ — तब मौजूद जब कोई हो (एमुलेटर)
impairmentsहर Impairment नोड की गिनतियाँ और फ़ेज़ — तब मौजूद जब कोई हो (फ़ेज़)

हर चरण घटना में होता है:

कुंजीक्या
job_id, node_idरन और नोड
tsUnix मिलीसेकंड
staterunning, passed, failed, retry, repeating, load
detailक्या हुआ, अंग्रेज़ी में
message_key, message_paramsवही जो इंटरफ़ेस का टेक्स्ट और उसके मान हैं, ताकि चरण किसी भी भाषा में दिखाया जा सके
varsचरण ने जो चर लिखे, यदि कोई
errorवह क्यों विफल हुआ: code, params, node, field, detail
frameकैप्चर चालू होने पर, जिस इंस्पेक्टर फ़्रेम से कोई प्रतीक्षा मेल खाई
loadकिसी लोड ने क्या मापा (माप), उसकी अंतिम घटना पर

सीक्रेट के मान किसी रिपोर्ट में कभी नहीं दिखते: उन्हें •••• के रूप में मास्क किया जाता है (मास्किंग)।

रिपोर्ट का प्रारूप सुविधाओं के साथ बढ़ा: संस्करण 3 ने एमुलेटरों की गिनतियाँ जोड़ीं, संस्करण 4 ने इम्पेयरमेंटों के फ़ेज़, संस्करण 5 ने लोड के माप।

रिपोर्टें ही रन इतिहास हैं: तुलना करें उन्हें पढ़ता है, और experiment_runs भी। कमांड लाइन का --report किसी रन की रिपोर्ट वहाँ कॉपी करता है जहाँ आप चाहें।

सीड ​

हर रन का एक सीड होता है, 0 से 9 007 199 254 740 991 तक एक पूर्ण संख्या। वह, क्रम में, यह होता है:

  1. इस रन को इसके साथ चलाएँ… में, कमांड लाइन पर (--seed) या API को दिया गया सीड;
  2. प्रयोग में पिन किया गया सीड;
  3. एक नया रैंडम सीड।

टाइमलाइन में रन की पहली पंक्ति उसे देती है, और रिपोर्ट उसे रखती है।

सीड वह सब तय करता है जो रन रैंडम करता है: टेम्पलेटों में जनरेटर, दोहराव का जिटर, किसी रैंडम लोड के आगमन, किसी बाधा रिले में हर पैकेट का भविष्य और एमुलेटर के रैंडम चुनाव। हर एक अपनी अलग धारा से निकालता है, इसलिए समानांतर शाखाएँ एक-दूसरे के मान कभी नहीं खिसकातीं।

किसी रन को दोहराने के लिए:

  1. टाइमलाइन में उसके सीड के बगल में पिन करें दबाएँ। सीड प्रयोग में सहेजा जाता है, और हर रन उसे तब तक इस्तेमाल करता है जब तक आप अनपिन करें न दबाएँ। पैरामीटर में, सीड पिन किया सीड दिखाता और संपादित करता है; ख़ाली हो तो वह हर रन में नया है।
  2. उसी प्रोफ़ाइल और मानों के साथ चलाएँ; रिपोर्ट उन्हें सूचीबद्ध करती है।

सीड जिसे दोहरा नहीं सकता: समय ({{now}}), {{run.id}}, और यह कि डिवाइस तथा नेटवर्क कब जवाब देते हैं।

एक नोड आज़माना ​

प्रयोग चलाए बिना एक नोड आज़माने के लिए, उसे चुनें और अभी भेजें दबाएँ — या उसके गुणों में Ctrl+Enter — किसी HTTP रिक्वेस्ट, TCP संदेश, OSC संदेश, UDP डेटाग्राम, MQTT पब्लिश, WebSocket कनेक्ट या WebSocket भेजें नोड पर। किसी प्रतीक्षा पर यह अभी सुनें होता है: वह अब से तब तक सुनती है जब तक कोई संदेश मेल न खाए या उसका टाइमआउट समाप्त न हो जाए।

इंजन नोड को उसी कोड से निष्पादित करता है जो रन इस्तेमाल करता है, एक बार:

  • सक्रिय प्रोफ़ाइल के मानों, इस सेशन में ज्ञात चर मानों (अंतिम रन और पिछले प्रयासों से) और सहेजे गए सीक्रेट के साथ;
  • पिन किए गए सीड, या नए के साथ; {{run.id}} 0 है और {{counter}} 1 है;
  • दोबारा प्रयास, दोहराव या लोड के बिना — एक भेजना;
  • कुकीज़ के बिना: एक रिक्वेस्ट, उससे पहले वापस भेजने को कुछ सेट नहीं;
  • रन के रिले और एमुलेटरों के बिना। HTTP रिक्वेस्ट की प्रतीक्षा अपने ख़ुद के लिसनर पर सुनता है, और कोई WebSocket सेंड या वेट वह कनेक्शन खोलता है जिसका वर्णन उसका WebSocket कनेक्ट करता है, उसी एक प्रयास के लिए।

अगर नोड द्वारा इस्तेमाल किया कोई नाम अभी मान न रखता हो, तो कुछ नहीं भेजा जाता और परिणाम बताता है कि कौन-से नाम ग़ायब हैं — पहले प्रयोग चलाएँ, या जो नोड उन्हें सेट करते हैं उन पर अभी भेजें इस्तेमाल करें।

परिणाम ✓ या ✕ और क्या हुआ दिखाता है। HTTP रिक्वेस्ट के लिए वह स्टेटस, समय, आकार और रिस्पॉन्स भी दिखाता है; किसी JSON रिस्पॉन्स में हर मान पर उसे निकालने के लिए क्लिक किया जा सकता है, और इसका मॉक बनाएँ रिस्पॉन्स को किसी एमुलेटर के रूट में बदल देता है। प्रतीक्षा ने जो मान प्राप्त किए, या जो किसी रिक्वेस्ट के ठीक बाद के मान निकालें नोड उसके रिस्पॉन्स से लेंगे, वे प्रीव्यू और अगले अभी भेजें को ज्ञात हो जाते हैं। जब तक कोई रन चलता है, अभी भेजें उपलब्ध नहीं होता।

किसी टेम्पलेट वाले नोड का प्रीव्यू — वह क्या भेजेगा — इंजन ही हल करता है, बिना कुछ भेजे।

प्रयोग फ़ाइलें ​

काम करता प्रयोग ​

एडिटर एक प्रयोग रखता है, जो हर बदलाव के 0.7 s बाद डेटा फ़ोल्डर की experiment.json में ख़ुद सहेजा जाता है; टूलबार सहेजा जा रहा है…, सहेजा गया या सहेजना विफल कहता है। अधूरा ग्राफ़ भी सहेजा जाता है। जो फ़ाइल पढ़ी न जा सके उसे उसके पथ के साथ रिपोर्ट किया जाता है, कभी बदला नहीं जाता। प्रयोग फ़ाइल अधिकतम 4 MiB की होती है।

सर्वर पर फ़ाइल सर्वर के डेटा फ़ोल्डर में होती है, इसलिए वहाँ एडिटर खोलने वाला हर ब्राउज़र उसी प्रयोग पर काम करता है।

खोलना, टेम्पलेट और निर्यात ​

टूलबार में ☰ बटन प्रयोग खोलता है:

  • टेम्पलेट: खाली प्रयोग, HTTP जाँच, HTTP से OSC, समानांतर प्रवाह, OSC ping → जवाब, तैयार होने तक पोल करें, अस्थिर API पर पुनः प्रयास, फ़ॉल्ट फ़ेज़, डिपेंडेंसी आउटेज, WebSocket इको। उनके लक्ष्य 127.0.0.1 पर हैं।
  • JSON खोलें… अधिकतम 4 MiB की फ़ाइल पढ़ता है — प्रयोग प्रारूप के इस संस्करण या किसी पुराने की, जिसे खुलते ही अद्यतन कर दिया जाता है — और उसका नाम तथा उसमें कितने नोड और कनेक्शन हैं दिखाने से पहले उसे जाँचता है। फ़ाइल को एडिटर के लिखे रूप में, इंडेंट किए हुए, भी 4 MiB में फ़िट होना चाहिए, इसलिए सीमा के क़रीब की सघन फ़ाइल अस्वीकार की जा सकती है। ख़राब फ़ाइल समस्या की पंक्ति और कॉलम के साथ अस्वीकार की जाती है, किसी नए Signal Lab की फ़ाइल doc.version_unsupported के साथ, और वर्तमान प्रयोग बना रहता है।
  • प्रयोग खोलें वर्तमान प्रयोग को चुने गए से बदल देता है। इस सेशन में Ctrl+Z पिछला वापस ले आता है। प्रयोग खोलने से वह चलता नहीं।
  • वर्तमान JSON निर्यात करें डेटा फ़ोल्डर के exports फ़ोल्डर में एक प्रति लिखता है, experiment-<time in ms>-<random>.json के रूप में, कभी किसी दूसरी प्रति पर नहीं; ब्राउज़र में, डाउनलोड करें उसे लाता है।

कमांड लाइन और API वही फ़ाइलें लेते हैं, और टेम्पलेट नाम से: empty, http-check, status-branch, parallel-flows, osc-ping-reply, poll-until-ready, flaky-api, fault-phases, dependency-outage, websocket-echo।

दस्तावेज़ संस्करण ​

प्रयोग फ़ाइल का एक version होता है; यह Signal Lab संस्करण 9 लिखता है और हर पुराना खोलता है, जो पुरानी फ़ाइल में नहीं हो सकता था उसे भरते हुए। 9 से नए संस्करण की फ़ाइल doc.version_unsupported के साथ अस्वीकार की जाती है, बजाय इसके कि उसमें जो है उसके बिना खोली जाए।

संस्करणजोड़ा गया
2पैरामीटर और सीड
3प्रोफ़ाइल
4दोबारा प्रयास, और किसी OSC या UDP भेजे जाने द्वारा प्रतीक्षित जवाब
5दोहराव, और लूप
6एमुलेटर और HTTP रिक्वेस्ट की प्रतीक्षा
7नेटवर्क बाधा, बाधा बदलें और एमुलेटर बंद/चालू
8WebSocket नोड, HTTP प्रमाणीकरण और कुकी जार
9किसी HTTP रिक्वेस्ट पर लोड, और TCP पर बाधा

संस्करण 8 से पहले की फ़ाइल रिक्वेस्ट के बीच कुकी रखें बंद के साथ खुलती है, इसलिए वह वैसे चलती है जैसे पहले चलती थी; नई फ़ाइल अपनी सेटिंग रखती है। फिर से सहेजी जाने पर कोई भी फ़ाइल संस्करण 9 बन जाती है।

कमांड लाइन या सर्वर से ​

एक रन हर जगह वही होता है: कमांड लाइन और सर्वर का API वही रन शुरू करते हैं जो एडिटर करता है, उन्हीं चरणों, नतीजे और रिपोर्ट के साथ।

bash
signallab run checkout.json --profile Stage -p api=http://192.0.2.10:8080 --seed 42 --report report.json
  • signallab run प्रयोग फ़ाइलें या टेम्पलेट इसी प्रक्रिया में या किसी सर्वर पर चलाता है, चरणों को टाइमलाइन की तरह छापता है और नतीजे के कोड के साथ बाहर निकलता है।
  • POST /api/run किसी सर्वर पर एक रन चलाता है और नतीजे के साथ जवाब देता है, या उसके चरण उनके होते-होते स्ट्रीम करता है। जो क्लाइंट चला जाता है वह रन को नहीं रोकता; वह अपने अंत तक चलता है और अपनी रिपोर्ट रखता है।
  • CI में: GitHub Actions और दूसरे।