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

नोड संदर्भ ​

प्रयोग में रखे जा सकने वाले हर तरह के नोड, ऐड मेनू के समूहों में: क्रियाएँ, प्रतीक्षाएँ, एमुलेशन, फ़ॉल्ट, डेटा, जाँचें और फ़्लो। उन्हें जोड़ने और वायर करने का तरीका एडिटर में है; signallab nodes वही सूची JSON के रूप में छापता है, स्क्रिप्ट और सहायकों के लिए (कमांड लाइन)।

इस पेज को पढ़ना ​

हर नोड के फ़ील्ड की एक तालिका होती है:

  • फ़ील्ड प्रॉपर्टीज़ पैन का नाम है; फ़ाइल में प्रयोग के JSON की key है।
  • डिफ़ॉल्ट वह है जो एडिटर में नोड जोड़ते समय मिलता है। जहाँ फ़ाइल किसी key को छोड़ सकती है, तब उसका जो मान लिया जाता है, वह if absent के रूप में दिया है; बाकी keys फ़ाइल में ज़रूरी हैं।
  • टेम्पलेट: हाँ — फ़ील्ड {{templates}} लेता है: पैरामीटर, पहले सेट किए गए वेरिएबल, सीक्रेट और जनरेटर, जो चरण चलते समय हल होते हैं (डेटा और टेम्पलेट)। केवल पैरामीटर — यह पहले चरण से पहले खोला जाता है, जब केवल पैरामीटर ज्ञात होते हैं। नहीं — मान जैसा लिखा है वैसा ही लिया जाता है।

समय मिलीसेकंड में हैं। रन शुरू होने से पहले सीमाएँ जाँची जाती हैं; सीमा से बाहर का फ़ील्ड प्रयोग को चलने से रोकता है और नोड पर दिखाया जाता है।

फ़ाइल में एक नोड ​

प्रयोग फ़ाइल में नोड एक ऑब्जेक्ट है जिसमें id (प्रयोग में अद्वितीय), उसका type, कैनवास पर उसकी जगह (x, y, शून्य या अधिक), उसके फ़ील्ड, और वे सेटिंग्स होती हैं जो वह उपयोग करता है (retry, repeat, load, बंद होने पर छोड़ दी जाती हैं)। एक वायर एक नोड के आउटपुट (port, न हो तो next) से दूसरे नोड तक एक एज है:

json
{
  "nodes": [
    { "id": "start", "type": "start", "x": 40, "y": 80 },
    { "id": "ping", "type": "udp", "x": 270, "y": 80, "target": "127.0.0.1:9000", "text": "PING",
      "retry": { "attempts": 3, "delay_ms": 500, "backoff": "fixed" } },
    { "id": "end", "type": "end", "x": 500, "y": 80 }
  ],
  "edges": [
    { "from": "start", "to": "ping", "port": "next" },
    { "from": "ping", "to": "end", "port": "next" }
  ]
}

नीचे के उदाहरण एक-एक नोड दिखाते हैं, जैसा फ़ाइल उसे रखती है।

कई नोड की साझा सेटिंग्स ​

ये नोड की प्रॉपर्टीज़ के निचले हिस्से में चालू की जाती हैं। कौन-सा नोड कौन-सी लेता है, वह हर नोड के नीचे दिया है।

सेटिंगकौन लेता हैयह क्या करता है
दोबारा प्रयासजो नोड भेजते या सुनते हैं: HTTP रिक्वेस्ट, TCP संदेश, OSC संदेश, UDP डेटाग्राम, MQTT पब्लिश, WebSocket कनेक्ट, WebSocket भेजें, और हर प्रतीक्षाचरण विफल होने पर फिर कोशिश करता है
दोहरावजो नोड भेजते हैं: HTTP रिक्वेस्ट, TCP संदेश, OSC संदेश, UDP डेटाग्राम, MQTT पब्लिश, WebSocket भेजेंबार-बार भेजता है, कितनी बार या कितनी देर तक
लोडHTTP रिक्वेस्टलोड प्रोफ़ाइल पर रिक्वेस्ट भेजता है, थ्रेशोल्ड से मापा और जाँचा जाता है
जवाब की प्रतीक्षाOSC संदेश, UDP डेटाग्रामउसी चरण में भेजता है और जवाब की प्रतीक्षा करता है

दोबारा प्रयास ​

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

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँ
प्रयासretry.attemptsकुल प्रयास, पहला मिलाकर3; एडिटर में 2–10 (फ़ाइल 1 भी कह सकती है)
विराम, msretry.delay_msदूसरे प्रयास से पहले का विराम500; 0–60 000
विरामretry.backoffएक जैसे (fixed): हर बार वही विराम; दोगुने होते (exponential): हर विफलता के बाद दुगुना लंबाfixed (न हो तो भी)

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

दोहराव ​

भेजना दोहराएँ: नोड बार-बार भेजता है — हार्टबीट, पोल, एक स्थिर धारा — ग्राफ़ में लूप के बिना। हर भेजाव अपने टेम्पलेट नए सिरे से पढ़ता है ({{counter}} उसका क्रमांक है, {{now}} उसका समय), और चालू होने पर दोबारा प्रयास हर भेजाव पर लागू होता है। जब हर भेजाव सफल होता है तब चरण सफल होता है; जो भेजाव पूरी तरह विफल होता है, चरण विफल कर देता है। टाइमलाइन सेकंड में अधिकतम एक बार प्रगति बताती है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँ
दोहरावrepeat.untilतय संख्या में (count) या तय समय तक (duration)count (न हो तो भी)
बारrepeat.countकुल भेजाव, पहला मिलाकर10 (न हो तो भी); 2–10 000
अवधि, msrepeat.duration_msपहले भेजाव से कितनी देर भेजते रहना है10 000 (न हो तो भी); 1–300 000
अंतराल, msrepeat.interval_msदो भेजावों के बीच का विराम1 000; 10–60 000; फ़ाइल में ज़रूरी
जिटर, msrepeat.jitter_msहर विराम इतना तक लंबा, रन के सीड से निकाला0 (न हो तो भी); 0–60 000

दोहराव एक रन के 300 सेकंड में फ़िट होने चाहिए, और किसी समय तक को 10 000 से कम भेजाव चाहिए (उसका समय अंतराल से भाग)।

लोड ​

लोड के तहत भेजें, केवल HTTP रिक्वेस्ट पर: रिक्वेस्ट एक प्रोफ़ाइल पर भेजी जाती है — एक स्थिर दर, एक रैंप, चरण, एक स्पाइक या रैंडम आगमन — एक साथ अधिकतम 512 चल रही (डिफ़ॉल्ट 32), और मापी जाती है: विलंब, त्रुटियाँ, हासिल दर। थ्रेशोल्ड तय करते हैं कि चरण सफल होता है या नहीं। लोड दोहराव और दोबारा प्रयास की जगह लेता है (विफल रिक्वेस्ट गिनी जाती है, दोबारा नहीं आज़माई जाती), और अपने बाद की जाँचों के लिए कोई रिस्पॉन्स नहीं छोड़ता। इसके फ़ील्ड और नतीजे लोड टेस्टिंग में हैं।

जवाब की प्रतीक्षा ​

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

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
जवाब का पोर्ट (IP:port)reply.bindभेजने और सुनने का IP:port; पोर्ट 0 कोई भी ख़ाली पोर्ट ले लेता है0.0.0.0:0नहीं
जवाब का पता पैटर्न (OSC)reply.addressजवाब का पता पैटर्न, जैसे OSC की प्रतीक्षा में/*हाँ
आर्ग्युमेंट नियम (OSC)reply.argsआर्ग्युमेंट नियम, जैसे OSC की प्रतीक्षा मेंकोई नहीं; अधिकतम 16मान: हाँ
जवाब का पेलोड (UDP)reply.modeany, contains, regex या hex — देखें पेलोड मिलानany (न हो तो भी)नहीं
पैटर्न (UDP)reply.patternजवाब में क्या होना या मेल खाना चाहिएख़ाली; any के अलावा ज़रूरीहाँ
टाइमआउट, msreply.timeout_msकितनी देर प्रतीक्षा करनी है2 000 (न हो तो भी); 1–120 000नहीं
जवाब का वैरिएबलreply.variableजवाब जिस वेरिएबल में सहेजा जाता हैreply (न हो तो भी)नहीं

जवाब का पोर्ट पहले चरण से पहले खोला जाता है, जैसे प्रतीक्षा का।

क्रियाएँ ​

जो नोड भेजते हैं। किसी क्रिया के बाद की प्रतीक्षा उस क्रिया के शुरू होने के क्षण से संदेश गिनती है।

HTTP रिक्वेस्ट ​

एक HTTP रिक्वेस्ट भेजता है और रिस्पॉन्स अपने बाद की जाँचों, ब्रांचों और मान निकालें नोड के लिए रखता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
मेथडrequest.methodGET, HEAD, POST, PUT, PATCH, DELETE या OPTIONS (फ़ाइल कोई भी मेथड कह सकती है)GETनहीं
URLrequest.urlएक http:// या https:// URLhttp://127.0.0.1:8080/हाँ
टाइमआउट (ms)request.timeout_msपूरे आदान-प्रदान के लिए4 000 (न हो तो 10 000); 1–120 000नहीं
रिक्वेस्ट हेडरrequest.headers[[name, value], …]; ख़ाली नाम वाली पंक्ति छोड़ दी जाती हैकोई नहींहाँ, नाम और मान
बॉडीrequest.bodyटेक्स्ट, या न हो तो nullnullहाँ
प्रमाणीकरणrequest.authकोई नहीं, Basic, Bearer टोकन या Digest, उपयोगकर्ता नाम और पासवर्ड के साथ, या टोकनकोई नहींहाँ
  • कोई भी जवाब चरण पास करा देता है, 404 और 500 भी: स्टेटस HTTP स्टेटस से जाँचें या स्टेटस पर शाखा से उस पर ब्रांच करें। जिस रिक्वेस्ट का कोई जवाब नहीं आता — अस्वीकार, टाइमआउट, ऐसा नाम जो हल नहीं होता, ऐसा सर्टिफ़िकेट जिस पर भरोसा नहीं — वह चरण विफल कर देती है।
  • रीडायरेक्ट का पीछा किया जाता है, अधिकतम दस। https:// सर्टिफ़िकेट सत्यापित होते हैं।
  • रिस्पॉन्स बॉडी जाँचों के लिए 256 KiB तक रखी जाती है; उससे बड़ी बॉडी वहीं काट दी जाती है (जब जो खोजा जा रहा हो वह कटाव के पार हो सकता है, तो जाँचें यह बताती हैं)।
  • Digest सर्वर की 401 चुनौती का जवाब देता है और रिक्वेस्ट फिर भेजता है। क्रेडेंशियल केवल रिक्वेस्ट में जाते हैं: चरण, रिपोर्ट और इंस्पेक्टर कभी Authorization हेडर नहीं दिखाते। पासवर्ड {{secret.NAME}} के रूप में लिखें।
  • जब तक प्रयोग कुकीज़ रखता है (डिफ़ॉल्ट रूप से चालू, पैरामीटर के नीचे), सर्वर जो सेट करते हैं वह रन की बाद की रिक्वेस्टों के साथ उन्हें वापस भेजा जाता है।

आउटपुट: आउटपुट। सेटिंग्स: दोबारा प्रयास, दोहराव, लोड।

json
{ "id": "cue", "type": "http", "x": 270, "y": 80,
  "request": { "method": "POST", "url": "{{api}}/cue", "headers": [["Content-Type", "application/json"]],
               "body": "{\"cue\": 1}", "timeout_ms": 5000,
               "auth": { "scheme": "bearer", "token": "{{secret.API_TOKEN}}" } } }

यह भी देखें HTTP।

TCP संदेश ​

TCP पर किसी होस्ट से कनेक्ट होता है, पेलोड लिखता है, जवाब के पहले बाइट के लिए अधिकतम 250 ms प्रतीक्षा करता है (अधिकतम 1 024 बाइट, एक बार पढ़ता है) और कनेक्शन बंद कर देता है। जवाब का आकार बताया जाता है, जाँचा नहीं जाता।

इंस्पेक्टर में चरण experiment स्रोत वाले दो tcp फ़्रेम हैं: लिखा गया पेलोड और, जब आया हो, पढ़ा गया जवाब। काम में लिए गए सीक्रेट दोनों में मास्क रहते हैं, जैसे किसी भी फ़्रेम में।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
होस्टhostहोस्ट नाम या IP पता127.0.0.1हाँ
पोर्टport9000; 1–65 535नहीं
टाइमआउट (ms)timeout_msकनेक्ट होने, लिखने और जवाब के लिए मिलाकर4 000 (न हो तो भी); 1–120 000नहीं
पेलोडpayloadकनेक्ट होने पर लिखा गया टेक्स्ट, UTF-8 के रूप मेंhelloहाँ

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

json
{ "id": "go", "type": "tcp", "x": 270, "y": 80, "host": "127.0.0.1", "port": 5000, "payload": "GO\r\n", "timeout_ms": 2000 }

OSC संदेश ​

UDP पर एक OSC 1.0 संदेश भेजता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
लक्ष्य host:porttargetIP:port या host:port; होस्ट नाम चरण के भेजते समय हल होता है, IPv4 पता तब लिया जाता है जब उसके पास हो127.0.0.1:9000हाँ
OSC पताaddress/ से शुरू होता है/testहाँ
आर्ग्युमेंटargs[{ "type", "value" }, …] — int, float, str, long, double, bool, blob (बाइट), nil (कोई मान नहीं)कोई नहींटेक्स्ट (str) मान: हाँ
जवाब की प्रतीक्षा करेंreplyवैकल्पिक: भेजें और जवाब की प्रतीक्षा करें — देखें जवाब की प्रतीक्षाबंद

आउटपुट: आउटपुट; जवाब अपेक्षित होने पर उसका पीछा तभी किया जाता है जब जवाब आया हो। सेटिंग्स: दोबारा प्रयास, दोहराव, एक जवाब। ⚡ प्रॉपर्टीज़ में बाधा से होकर भेजें इसके आगे एक नेटवर्क बाधा रखता है।

json
{ "id": "fader", "type": "osc", "x": 270, "y": 80, "target": "{{device}}", "address": "/fader/1",
  "args": [{ "type": "float", "value": 0.75 }] }

यह भी देखें OSC।

UDP डेटाग्राम ​

एक टेक्स्ट पेलोड एक या अधिक टारगेट को एक UDP डेटाग्राम के रूप में भेजता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
लक्ष्य host:porttargetIP:port या host:port; अल्पविराम, सेमीकोलन या नई पंक्तियों से अलग किए कई टारगेट को डेटाग्राम मिलता है। होस्ट नाम चरण के भेजते समय हल होता है, IPv4 पता तब लिया जाता है जब उसके पास हो127.0.0.1:9000हाँ
पेलोडtextपेलोड, UTF-8 के रूप मेंhello; अधिकतम 65 507 बाइटहाँ
जवाब की प्रतीक्षा करेंreplyवैकल्पिक: भेजें और जवाब की प्रतीक्षा करें — देखें जवाब की प्रतीक्षाबंद

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

json
{ "id": "ping", "type": "udp", "x": 270, "y": 80, "target": "{{device}}", "text": "PING {{run.id}}",
  "reply": { "bind": "0.0.0.0:0", "mode": "contains", "pattern": "PONG", "timeout_ms": 1000, "variable": "pong" } }

MQTT पब्लिश ​

एक MQTT ब्रोकर से कनेक्ट होता है, एक संदेश पब्लिश करता है और डिस्कनेक्ट हो जाता है। कनेक्शन सादे TCP पर MQTT 3.1.1 है, क्लीन सेशन के साथ और बिना उपयोगकर्ता नाम या पासवर्ड। कनेक्ट होना, पब्लिश करना और ब्रोकर की पुष्टि — सब 15 सेकंड के भीतर होने चाहिए।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
ब्रोकर होस्टhostब्रोकर का होस्ट नाम या पता127.0.0.1हाँ
पोर्टport1883; 1–65 535नहीं
टॉपिकtopicकोई वाइल्डकार्ड नहीं (+, #)lab/testहाँ
पेलोडpayloadसंदेश, टेक्स्ट के रूप मेंhelloहाँ
QoSqos0, 1 या 20नहीं
संदेश retain करेंretaintrue: ब्रोकर इसे टॉपिक के मान के रूप में रखता हैfalseनहीं

फ़ाइल में सभी छह key ज़रूरी हैं। जब ब्रोकर तक न पहुँचा जा सके या वह कनेक्शन या संदेश अस्वीकार कर दे, तो चरण विफल होता है। आउटपुट: आउटपुट। सेटिंग्स: दोबारा प्रयास, दोहराव।

json
{ "id": "light", "type": "mqtt", "x": 270, "y": 80, "host": "{{broker}}", "port": 1883,
  "topic": "lab/light/1/set", "payload": "on", "qos": 1, "retain": false }

यह भी देखें MQTT।

WebSocket कनेक्ट ​

बाकी रन के लिए, या किसी WebSocket बंद करें तक एक WebSocket खोलता है। उसके बाद जो आता है, वह उस पर के WebSocket की प्रतीक्षा चरणों के लिए रखा जाता है। URL और हेडर चरण के चलते समय हल होते हैं, इसलिए पहले निकाला गया टोकन उनमें हो सकता है। फिर चलाने पर — किसी लूप में — यह पहले अपना पिछला कनेक्शन बंद करता है और नया खोलता है। रन किसी भी तरह समाप्त होने पर उसके कनेक्शन एक क्लोज़ फ़्रेम के साथ बंद कर दिए जाते हैं।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
URLurlएक ws:// या wss:// URLws://127.0.0.1:9001/हाँ
रिक्वेस्ट हेडरheadersअपग्रेड रिक्वेस्ट के साथ भेजे गए [[name, value], …]कोई नहींहाँ, नाम और मान
सबप्रोटोकॉलprotocolsवरीयता के क्रम में देने के लिए सबप्रोटोकॉल; सर्वर एक चुनता हैकोई नहींनहीं
टाइमआउट (ms)timeout_msकनेक्ट होने और अपग्रेड के लिए5 000 (न हो तो 10 000); 1–120 000नहीं

wss:// उन्हीं सर्टिफ़िकेट पर भरोसा करता है जिन पर https://। कनेक्शन या अपग्रेड विफल होने पर चरण विफल होता है; कारण में सर्वर का स्टेटस होता है। आउटपुट: आउटपुट। सेटिंग्स: दोबारा प्रयास (दोहराव नहीं)।

json
{ "id": "socket", "type": "ws_connect", "x": 270, "y": 80, "url": "ws://127.0.0.1:9001/chat",
  "headers": [["Authorization", "Bearer {{token}}"]], "protocols": ["chat.v1"], "timeout_ms": 5000 }

यह भी देखें WebSocket।

WebSocket भेजें ​

जिस कनेक्शन को WebSocket कनेक्ट ने खोला, उस पर एक संदेश भेजता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
कनेक्शनconnectionइस प्रयोग के एक WebSocket कनेक्ट नोड की idपहलानहीं
फ़ॉर्मेटbinaryटेक्स्ट (false), या बाइनरी (hex) (true): पेलोड hex में लिखे बाइट हैं, de ad be effalse (न हो तो भी)नहीं
पेलोडtextसंदेशhello; अधिकतम 16 MiBहाँ

कनेक्ट उसके पाथ पर भेजाव से पहले आना चाहिए; जिस भेजाव का कनेक्शन खुला न हो, वह विफल होता है। जवाब संदेश लिखे जाने के क्षण से गिने जाते हैं। आउटपुट: आउटपुट। सेटिंग्स: दोबारा प्रयास, दोहराव।

json
{ "id": "hello", "type": "ws_send", "x": 500, "y": 80, "connection": "socket",
  "text": "{\"type\":\"ping\",\"id\":\"{{uuid}}\"}", "binary": false }

WebSocket बंद ​

क्लोज़ हैंडशेक के साथ कनेक्शन बंद करता है। टाइमलाइन बताती है कि इसे किसने बंद किया: यह चरण, पहले सर्वर (उसके कोड के साथ), या कोई कनेक्शन जो टूट गया था।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
कनेक्शनconnectionएक WebSocket कनेक्ट नोड की idपहलानहीं
क्लोज़ कोडcode1000 (सामान्य), या किसी एप्लिकेशन के अपने के लिए 3000–49991000 (न हो तो भी)नहीं
कारणreasonकोड के साथ भेजा गयाख़ाली; टेम्पलेट के बाद अधिकतम 123 बाइटहाँ

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "bye", "type": "ws_close", "x": 960, "y": 80, "connection": "socket", "code": 1000, "reason": "done" }

लॉग मार्कर ​

टाइमलाइन और रिपोर्ट में एक पंक्ति लिखता है — एक चेकपॉइंट, या वे मान जिन तक रन पहुँचा।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
संदेशmessageटेक्स्टCheck point; अधिकतम 10 000 अक्षरहाँ

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "ready", "type": "log", "x": 500, "y": 80, "message": "device {{device}} ready" }

प्रतीक्षाएँ ​

निगरानी समूह: वे नोड जो किसी चीज़ के आने की प्रतीक्षा करते हैं। इनके ये साझा नियम हैं:

  • वे रन के शुरू से सुनते हैं। प्रतीक्षा का पोर्ट या ब्रोकर सब्सक्रिप्शन पहले चरण से पहले खोला जाता है, इसलिए जो डिवाइस अगले चरण के शुरू होने से तेज़ जवाब देता है, वह छूटता नहीं। एक ही पते पर दो प्रतीक्षाएँ एक ही सॉकेट साझा करती हैं।
  • वे अपनी ब्रांच पर नवीनतम क्रिया से गिनती करते हैं। जो संदेश ब्रांच की अंतिम रिक्वेस्ट से पहले आया, वह उसका जवाब नहीं है; किसी भी क्रिया से पहले, रन के शुरू होने के बाद का सब कुछ गिना जाता है।
  • पहला मेल खाता संदेश लिया जाता है। जो संदेश एक प्रतीक्षा ने ले लिया, वह दूसरी को दिखता नहीं।
  • मेल खाया या टाइमआउट। मेल खाने पर संदेश प्रतीक्षा के वेरिएबल में सहेजा जाता है और फ़्लो मेल खाया का पीछा करता है। समय बीत जाने पर वह टाइमआउट का पीछा करता है, अगर उस आउटपुट पर वायर हो; वरना चरण विफल होता है, और बताता है कि कितने और संदेश आए।
  • हर सॉकेट नवीनतम 1 024 संदेश (और 64 MiB) रखता है; पुराने छोड़ दिए जाते हैं, और टाइमआउट बताता है कि कितने छूटे।
  • अभी सुनें उसी एक चरण के साथ, अब से सुनता है।

आउटपुट: मेल खाया (ज़रूरी), टाइमआउट (वैकल्पिक)। सेटिंग्स: दोबारा प्रयास।

पेलोड मिलान ​

UDP की प्रतीक्षा, MQTT की प्रतीक्षा, WebSocket की प्रतीक्षा और एक UDP जवाब चुनते हैं कि पेलोड कैसा होना चाहिए:

विकल्पफ़ाइल मेंतब मेल खाता है जब पेलोड
कोई भी डेटाग्रामanyकुछ भी हो
टेक्स्ट शामिल हैcontainsUTF-8 टेक्स्ट के रूप में पढ़ा गया, पैटर्न रखता है (केस-संवेदी)
regex से मेल खाता हैregexUTF-8 टेक्स्ट के रूप में पढ़ा गया, रेगुलर एक्सप्रेशन से मेल खाता है
बाइट शामिल हैं (hex)hexबाइट रखता है, hex जोड़ों में लिखे: de ad be ef, deadbeef, 0xde,0xad, DE:AD

मेल खाया संदेश एक ऑब्जेक्ट के रूप में सहेजा जाता है। बाद के चरण उसके फ़ील्ड {{reply.text}} के रूप में पढ़ते हैं (वेरिएबल के नाम के साथ reply की जगह):

फ़ील्डक्या
textपेलोड टेक्स्ट के रूप में
hex, bytesपेलोड hex में (उसके पहले 1 024 बाइट), और बाइट में उसका आकार
matchजो मेल खाया: टेक्स्ट, रेगुलर एक्सप्रेशन का पहला ग्रुप (या पूरा मिलान), या बाइट
fromभेजने वाले का IP:port
msब्रांच की नवीनतम क्रिया (या रन के शुरू) से संदेश तक के मिलीसेकंड
topicMQTT की प्रतीक्षा: जिस टॉपिक पर इसे पब्लिश किया गया
json, kindWebSocket की प्रतीक्षा: संदेश JSON के रूप में पार्स किया गया (null जब न हो), और text या binary

OSC की प्रतीक्षा ​

ऐसे OSC संदेश की प्रतीक्षा करता है जिसका पता किसी पैटर्न से मेल खाता हो और जिसके आर्ग्युमेंट हर नियम पूरा करते हों। बंडल में, जो पहला संदेश मेल खाता है, वही लिया जाता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
सुनने का पता (IP:port)bindसुनने का IP:port; हर नेटवर्क कार्ड के लिए 0.0.0.0127.0.0.1:9001नहीं
पता पैटर्नaddress* कोई भी अक्षर, ? एक, [0-9] एक समूह ([!0-9] उससे बाहर), {ping,pong} दोनों में से कोई; वाइल्डकार्ड एक ही / सेगमेंट के भीतर रहते हैं/pong; अधिकतम 512 अक्षरहाँ
आर्ग्युमेंट नियमargs[{ "index", "op", "value" }, …]: आर्ग्युमेंट index की तुलना value से op द्वारा (तुलनाएँ); सभी पूरे होने चाहिएकोई नहीं; अधिकतम 16, index 0–63मान: हाँ
टाइमआउट, mstimeout_ms2 000 (न हो तो भी); 1–120 000नहीं
जवाब का वैरिएबलvariableसंदेश कहाँ सहेजा जाता हैreply (न हो तो भी)नहीं

आर्ग्युमेंट की तुलना टेक्स्ट के रूप में होती है: संख्याएँ जैसी लिखी हैं, स्ट्रिंग बिना उद्धरण, true/false, blob hex में। जिस आर्ग्युमेंट पर नियम है और संदेश में वह नहीं है, वह पूरा नहीं होता। सहेजे गए संदेश में address, args ({{reply.args[0]}}), from और ms होते हैं।

json
{ "id": "status", "type": "wait_osc", "x": 500, "y": 80, "bind": "0.0.0.0:9001", "address": "/status",
  "args": [{ "index": 0, "op": "eq", "value": "ready" }], "timeout_ms": 5000, "variable": "reply" }

UDP की प्रतीक्षा ​

ऐसे UDP डेटाग्राम की प्रतीक्षा करता है जिसका पेलोड मेल खाता हो।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
सुनने का पता (IP:port)bindसुनने का IP:port127.0.0.1:9001नहीं
पेलोडmodeदेखें पेलोड मिलानcontains (न हो तो any)नहीं
पैटर्नpatternपेलोड में क्या होना या मेल खाना चाहिएpong; any के अलावा ज़रूरीहाँ
टाइमआउट, mstimeout_ms2 000 (न हो तो भी); 1–120 000नहीं
जवाब का वैरिएबलvariablereply (न हो तो भी)नहीं
json
{ "id": "ready", "type": "wait_udp", "x": 500, "y": 80, "bind": "0.0.0.0:9002", "mode": "contains",
  "pattern": "READY", "timeout_ms": 5000, "variable": "reply" }

MQTT की प्रतीक्षा ​

ब्रोकर पर किसी टॉपिक को पब्लिश किए गए ऐसे संदेश की प्रतीक्षा करता है जिसका पेलोड मेल खाता हो। रन अपने पहले चरण से पहले कनेक्ट होकर सब्सक्राइब करता है। सब्सक्राइब करते समय ब्रोकर जो retained संदेश दोहराता है, वे छोड़ दिए जाते हैं: केवल वही गिना जाता है जो रन शुरू होने के बाद पब्लिश हुआ।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
ब्रोकर होस्टhostब्रोकर127.0.0.1केवल पैरामीटर
पोर्टport1883; 1–65 535नहीं
टॉपिक फ़िल्टरtopicएक फ़िल्टर: + कोई भी एक लेवल, # उसके नीचे सब कुछ (केवल अंत में)lab/#केवल पैरामीटर
पेलोडmodeदेखें पेलोड मिलानany (न हो तो भी)नहीं
पैटर्नpatternख़ाली; any के अलावा ज़रूरीहाँ
टाइमआउट, mstimeout_ms2 000 (न हो तो भी); 1–120 000नहीं
जवाब का वैरिएबलvariablereply (न हो तो भी)नहीं
json
{ "id": "state", "type": "wait_mqtt", "x": 500, "y": 80, "host": "{{broker}}", "port": 1883,
  "topic": "lab/+/state", "mode": "contains", "pattern": "on", "timeout_ms": 5000, "variable": "reply" }

HTTP रिक्वेस्ट की प्रतीक्षा ​

उस पते पर रन के एमुलेटर को आने वाली HTTP रिक्वेस्ट — वेबहुक, कॉलबैक — की प्रतीक्षा करता है, या, जब रन का वहाँ कोई HTTP एमुलेटर न हो, तो रन के अपने ऐसे लिसनर की जो हर रिक्वेस्ट को 204 से जवाब देता है। रिक्वेस्ट को मेथड, पाथ और हर शर्त से मेल खाना चाहिए।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
सुनने का पता (IP:port)bindIP:port127.0.0.1:18080 — जहाँ नया एमुलेटर सुनता हैनहीं
मेथडmethodएक मेथड, या कोई भी (ANY); GET HEAD भी लेता हैANY (न हो तो भी)नहीं
पाथpath/hooks/:name एक सेगमेंट को नाम देता है ({{request.params.name}}); अंत का /* बाकी सब लेता है/* (न हो तो भी); अधिकतम 512 अक्षरहाँ
शर्तेंwhenकिसी header, query पैरामीटर, body या json पाथ पर [{ "on", "name", "op", "value" }, …]; हर एक पूरा होना चाहिएकोई नहीं; अधिकतम 16हाँ, नाम और मान
टाइमआउट, mstimeout_ms5 000 (न हो तो 2 000); 1–120 000नहीं
जवाब का वैरिएबलvariablerequest (न हो तो भी)नहीं

सहेजी गई रिक्वेस्ट में method, path, query, headers, body, json, params, from और ms होते हैं: {{request.json.event}}, {{request.headers.x-key}}।

json
{ "id": "hook", "type": "wait_http", "x": 500, "y": 80, "bind": "127.0.0.1:18081", "method": "POST",
  "path": "/hooks/:name", "when": [{ "on": "json", "name": "$.event", "op": "eq", "value": "deploy" }],
  "timeout_ms": 5000, "variable": "request" }

WebSocket की प्रतीक्षा ​

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

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
कनेक्शनconnectionएक WebSocket कनेक्ट नोड की idपहलानहीं
पेलोडmodeदेखें पेलोड मिलानany (न हो तो भी)नहीं
पैटर्नpatternख़ाली; any के अलावा ज़रूरीहाँ
टाइमआउट, mstimeout_ms2 000 (न हो तो भी); 1–120 000नहीं
जवाब का वैरिएबलvariablereply (न हो तो भी)नहीं

एक JSON संदेश फ़ील्ड दर फ़ील्ड पढ़ा जा सकता है: {{reply.json.type}}। कनेक्ट उसके पाथ पर प्रतीक्षा से पहले आना चाहिए।

json
{ "id": "pong", "type": "wait_ws", "x": 730, "y": 80, "connection": "socket", "mode": "contains",
  "pattern": "pong", "timeout_ms": 3000, "variable": "reply" }

एमुलेशन ​

एमुलेटर ​

पूरे रन के लिए एक डिपेंडेंसी निभाता है — HTTP API, OSC, UDP या TCP डिवाइस, MQTT ब्रोकर। यह पहले चरण से पहले खुलता है और रन समाप्त होने तक जवाब देता है; फ़्लो में चरण तुरंत सफल होता है। इसे जो मिला, वह रन की रिपोर्ट में नियम दर नियम गिना जाता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट
संपादित करें…emulatorएमुलेटर: name, bind (IP:port), protocol (http, osc, udp, tcp, mqtt), उसके रूट या नियम, और वैकल्पिक outage127.0.0.1:18080 पर API नाम का HTTP API जो /health का जवाब देता है

प्रॉपर्टीज़ एक पंक्ति में बताती हैं कि यह क्या निभाता है। संपादित करें… इसके नियम खोलता है, वही एडिटर जो एमुलेटर स्क्रीन का है; लाइब्रेरी में एमुलेटर लाइब्रेरी में एक कॉपी रखता है, और लाइब्रेरी से इसकी जगह उससे एक कॉपी ले आता है। नियम — रूट, रिस्पॉन्स, फ़ॉल्ट, आउटेज — वहीं बताए गए हैं।

  • एक HTTP एमुलेटर वही है जिसे उसके पते पर HTTP रिक्वेस्ट की प्रतीक्षा पढ़ती है; एक OSC या UDP एमुलेटर अपना पोर्ट वहाँ रन की प्रतीक्षाओं के साथ साझा करता है।
  • एक ही ट्रांसपोर्ट के दो एमुलेटर एक रन में एक पोर्ट साझा नहीं कर सकते।
  • एमुलेटर बंद/चालू इसे बंद करता है और वापस लाता है।

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "api", "type": "emulator", "x": 270, "y": 80,
  "emulator": { "name": "Orders API", "bind": "127.0.0.1:18080", "protocol": "http",
    "routes": [{ "method": "GET", "path": "/orders/:id", "order": "sequence",
                 "responses": [{ "status": 503 }, { "status": 200, "body": "{\"id\":\"{{request.params.id}}\"}" }] }] } }

फ़ॉल्ट ​

वे नोड जो इशारे पर चीज़ें तोड़ते हैं। विलंब नोड की एक ब्रांच और ट्रैफ़िक के बगल में ये, मिलकर एक शेड्यूल जैसे पढ़े जाते हैं; शेड्यूल पर फ़ॉल्ट बताता है कि कैसे।

इम्पेयरमेंट ​

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

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
सुनने का पताlistenजाँचा जा रहा सिस्टम जिस IP:port पर भेजता है127.0.0.1:9010केवल पैरामीटर
आगे भेजेंtargetअसली गंतव्य का IP:port, या host:port — होस्ट नाम रन शुरू होते समय हल होता है, और जो नाम न मिल सके वह इस नोड पर रन रोक देता है127.0.0.1:9000केवल पैरामीटर
प्रोटोकॉलprotocolUDP (udp): हर डेटाग्राम का अपना अंजाम होता है; TCP (tcp): हर कनेक्शन टारगेट तक अपने एक कनेक्शन से जोड़ा जाता है, और दोनों धाराएँ इम्पेयर होती हैंUDP (न हो तो udp)नहीं
प्रीसेट और उसके नीचे के मानprofileरिले ट्रैफ़िक के साथ क्या करता है — देखें प्रोफ़ाइलLAN (न हो तो कोई इम्पेयरमेंट नहीं)नहीं

रिले का सुनने का पता रन का कोई और सॉकेट नहीं हो सकता, और रिले एक-दूसरे को गोल घेरे में अग्रेषित नहीं कर सकते। नाम से दिया टारगेट हल होते ही उसका पीछा किया जाता है, इसलिए किसी नाम से बना घेरा रन के शुरू होते ही उसे रोक देता है। रिपोर्ट रिले के हर चरण को अलग गिनती है।

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "relay", "type": "impairment", "x": 270, "y": 80, "listen": "127.0.0.1:9010", "target": "{{device}}",
  "profile": { "name": "lan", "latency_ms": 1, "jitter_ms": 1 } }

प्रोफ़ाइल ​

एक प्रीसेट चिप — LAN, व्यस्त Wi-Fi, 4G, सैटेलाइट, रुक-रुक कर, ऑफ़लाइन — हर मान भर देती है; उसके बाद उनमें से कोई भी बदलें। रिले केवल अपने प्रोटोकॉल के मान पढ़ता है; फ़ाइल में हर key छोड़ी जा सकती है (शून्य, बंद)।

फ़ील्डफ़ाइल मेंक्यासीमाएँप्रोटोकॉल
—nameटाइमलाइन और रिपोर्ट के लिए एक लेबल: किसी प्रीसेट की key (lan, wifi, 4g, satellite, intermittent, offline) या आपकी अपनीअधिकतम 60 अक्षरदोनों
ऑफ़लाइन — कुछ नहीं जाताofflineकुछ भी पार नहीं जाताtrue / falseदोनों
लेटेंसीlatency_msहर पैकेट, या धारा के हर chunk में जोड़ा गया विलंब0–60 000 (स्लाइडर 1 000 तक जाता है)दोनों
जिटरjitter_msइतना तक रैंडम अतिरिक्त विलंब; एक TCP धारा क्रम में रहती है0–60 000 (स्लाइडर 500 तक जाता है)दोनों
बैंडविड्थ, kbit/srate_kbpsबैंडविड्थ सीमा, न हो तो 0। UDP: एक सेकंड से ज़्यादा की कतार होने पर डेटाग्राम थ्रॉटल होकर छोड़ दिए जाते हैं; TCP: भेजने वाला धीमा किया जाता है, कुछ नहीं छोड़ा जाता0, या 8–10 000 000दोनों
पैकेट लॉसlossडेटाग्राम छूट जाने की संभावना0–1 (स्लाइडर % दिखाता है)UDP
बर्स्ट लॉस, बर्स्ट की लंबाई, डेटाग्रामburst_start, burst_lengthनुकसान के झोंके शुरू होने की संभावना, और वह औसतन कितने डेटाग्राम चलता है0–1; झोंके चालू होने पर 1–1 000UDP
डुप्लिकेशनduplicateडेटाग्राम दो बार भेजे जाने की संभावना0–1UDP
दूषणcorruptडेटाग्राम का एक बिट पलट जाने की संभावना0–1UDP
क्रम बदलनाreorderडेटाग्राम रोक लिए जाने की संभावना, ताकि बाद वाले उसे पीछे छोड़ दें0–1UDP
कनेक्शन रीसेटresetधारा के किसी chunk की जगह उसका कनेक्शन रीसेट होने की संभावना — दोनों तरफ़ रीसेट मिलता है0–1TCP
अर्ध-खुलाstallकिसी chunk के बाद उसका कनेक्शन आधा-खुला छूटने की संभावना: अब किसी भी तरफ़ कुछ और नहीं जाता, और किसी को बताया नहीं जाता0–1TCP

रिले, प्रीसेट और वे क्या मॉडल करते हैं, इस पर और जानकारी बाधा पेज पर।

इम्पेयरमेंट बदलें ​

रन के किसी नेटवर्क बाधा नोड को इस चरण से दूसरी प्रोफ़ाइल पर बदल देता है, बिना उसका पोर्ट छोड़े। अब तक का चरण बंद कर दिया जाता है और रिपोर्ट में गिना जाता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्टटेम्पलेट
नेटवर्क बाधाrelayइस प्रयोग के एक नेटवर्क बाधा नोड की idपहलानहीं
प्रीसेट और उसके नीचे के मानprofileअब से यह किसके साथ इम्पेयर करता है — देखें प्रोफ़ाइल; रिले अपने ही प्रोटोकॉल के मान पढ़ता हैऑफ़लाइन (न हो तो कोई इम्पेयरमेंट नहीं)नहीं

अगर रिले चल नहीं रहा तो चरण विफल होता है — मान लीजिए, वह रिले करने में विफल रहा। आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "cut", "type": "impairment_change", "x": 730, "y": 200, "relay": "relay",
  "profile": { "name": "offline", "offline": true } }

एमुलेटर बंद/चालू ​

रन के किसी एमुलेटर को बंद कर देता है, या वापस चालू कर देता है। बंद रहते समय एक HTTP एमुलेटर वैसा जवाब देता है जैसा बंद रहते समय कहता है; एक TCP डिवाइस और MQTT ब्रोकर अपने कनेक्शन तोड़ देते हैं और नए अस्वीकार करते हैं; OSC और UDP डिवाइस कोई जवाब नहीं देते। फिर चालू होने पर एमुलेटर अपना आउटेज शेड्यूल चलाता है, अगर उसके पास हो।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट
एमुलेटरemulatorइस प्रयोग के एक एमुलेटर नोड की idपहला
स्थितिdownबंद (true) या चालू (false)बंद (न हो तो false)
बंद रहते समयfaultकेवल HTTP: 503 Unavailable (unavailable), कनेक्शन बंद करें (reset: कनेक्शन बिना जवाब के बंद कर दिया जाता है) या कोई जवाब नहीं (timeout: रिक्वेस्ट तब तक रोकी जाती है जब तक क्लाइंट हार न माने, अधिकतम 120 s)unavailable (न हो तो भी)

आउटपुट: आउटपुट। कोई सेटिंग नहीं। कुछ भी टेम्पलेट नहीं है।

json
{ "id": "down", "type": "emulator_state", "x": 500, "y": 200, "emulator": "api", "down": true, "fault": "unavailable" }

डेटा ​

मान निकालें ​

अपने पाथ पर नवीनतम HTTP रिस्पॉन्स का एक हिस्सा वेरिएबल के रूप में सहेजता है, बाद के फ़ील्ड ({{token}}), जाँचों और ब्रांचों के लिए। हर पाथ पर इससे पहले एक HTTP रिक्वेस्ट आनी चाहिए। अभी भेजें के रिस्पॉन्स में किसी मान पर क्लिक करने से आपके लिए एक जुड़ जाता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
वैरिएबलvariableनाम: अक्षर, अंक और _, अंक से शुरू नहीं, आरक्षित शब्द नहीं, किसी पैरामीटर का नाम नहींtokenनहीं
कहाँ से लेंfromJSON फ़ील्ड (json), हेडर (header), स्टेटस कोड (status), पूरी बॉडी (body) या रेगुलर एक्सप्रेशन (regex)jsonनहीं
JSON पाथ, हेडर का नाम या पैटर्न (ग्रुप 1, यदि हो)exprएक JSON पाथ ($.data.token, $.items[0], $["first name"]), एक हेडर नाम (किसी भी केस में), या एक रेगुलर एक्सप्रेसन — उसका पहला ग्रुप, या पूरा मिलान$.token; स्टेटस और बॉडी के लिए उपयोग नहीं होतानहीं

जब लेने के लिए कुछ न हो तो चरण विफल होता है: बॉडी JSON नहीं है, पाथ या हेडर मौजूद नहीं है, एक्सप्रेशन मेल नहीं खाता, या — किसी JSON फ़ील्ड या पूरी बॉडी के लिए — बॉडी रखे गए 256 KiB से लंबी थी। स्टेटस संख्या के रूप में सहेजा जाता है; बाकी टेक्स्ट के रूप में, या जो JSON मान मिला उसके रूप में। आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "token", "type": "extract", "x": 500, "y": 80, "variable": "token", "from": "json", "expr": "$.data.token" }

वेरिएबल पर और जानकारी डेटा और टेम्पलेट में।

जाँचें ​

एक जाँच या तो सफल होती है, या रन विफल कर देती है। चारों रिस्पॉन्स जाँचें अपने पाथ पर नवीनतम HTTP रिस्पॉन्स पढ़ती हैं, इसलिए हर पाथ पर उनसे पहले एक HTTP रिक्वेस्ट — लोड वाली नहीं — आनी चाहिए।

HTTP स्टेटस ​

जब नवीनतम रिस्पॉन्स का स्टेटस ठीक दिया गया हो तब सफल होती है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
अपेक्षित स्टेटसstatus200; 100–599नहीं

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "ok", "type": "assert_status", "x": 500, "y": 80, "status": 200 }

रिस्पॉन्स टेक्स्ट ​

जब नवीनतम रिस्पॉन्स की बॉडी में वह टेक्स्ट ठीक-ठीक (केस मिलाकर) हो तब सफल होती है। बॉडी के केवल पहले 256 KiB रखे जाते हैं: जो टेक्स्ट ऐसी बॉडी में न मिले जो काटी गई थी, वह उसी वजह से विफल होती है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
शामिल टेक्स्टcontainsok; ज़रूरीहाँ

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "ready", "type": "assert_body", "x": 500, "y": 80, "contains": "ready" }

रिस्पॉन्स हेडर ​

जब नवीनतम रिस्पॉन्स में वह हेडर हो और उसका मान वह टेक्स्ट रखता हो तब सफल होती है। हेडर का नाम किसी भी केस में मिलाया जाता है; मान ठीक-ठीक।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
हेडर का नामnamecontent-type; ज़रूरीहाँ
शामिल टेक्स्टcontainsउसके मान में क्या होना चाहिए; ख़ाली: हेडर का होना ही काफ़ी हैapplication/jsonहाँ

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "json", "type": "assert_header", "x": 500, "y": 80, "name": "Content-Type", "contains": "json" }

रिस्पॉन्स समय ​

जब नवीनतम रिस्पॉन्स में अधिकतम इतना समय लगा हो, रिक्वेस्ट भेजने से लेकर उसकी बॉडी के अंत तक, तब सफल होती है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
अधिकतम समय, msmax_ms1 000; 1–120 000नहीं

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "fast", "type": "assert_latency", "x": 500, "y": 80, "max_ms": 250 }

मान जाँचें ​

एक मान — आम तौर पर एक वेरिएबल, टेम्पलेट के रूप में लिखा — की तुलना अपेक्षित मान से करती है, और जब तुलना पूरी होती है तब सफल होती है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्टटेम्पलेट
मानvalueकिसकी तुलना होती है: {{token}}, {{reply.args[0]}}{{token}}हाँ
शर्तopदेखें तुलनाएँखाली नहीं हैनहीं
अपेक्षितexpectedखाली है और खाली नहीं है इसका उपयोग नहीं करतेख़ाली (न हो तो भी)हाँ

आउटपुट: आउटपुट। कोई सेटिंग नहीं।

json
{ "id": "state", "type": "assert_value", "x": 730, "y": 80, "value": "{{state}}", "op": "eq", "expected": "ready" }

तुलनाएँ ​

मान जाँचें, मान पर शाखा, किसी लूप की निकास शर्त, OSC आर्ग्युमेंट नियम और HTTP शर्तें एक ही तरह तुलना करते हैं:

विकल्पफ़ाइल मेंतब पूरा होता है जब मान
के बराबर हैeqअपेक्षित के बराबर है — संख्याओं के रूप में जब दोनों संख्याएँ हों (200 = 200.0), वरना ठीक-ठीक टेक्स्ट के रूप में
के बराबर नहीं हैneउसके बराबर नहीं है, उसी नियम से
से कम है, से अधिक नहीं है, से अधिक है, से कम नहीं हैlt, le, gt, geकम, अधिकतम, अधिक, कम से कम है — दोनों संख्याएँ होनी चाहिए: वरना कोई जाँच, ब्रांच या लूप चरण विफल कर देता है, और कोई आर्ग्युमेंट नियम या HTTP शर्त पूरी नहीं होती
को शामिल करता हैcontainsअपेक्षित टेक्स्ट रखता है
regex से मेल खाता हैmatchesअपेक्षित रेगुलर एक्सप्रेशन से मेल खाता है
खाली है, खाली नहीं हैempty, not_emptyख़ाली है (स्पेस ख़ाली गिने जाते हैं) / ख़ाली नहीं है

फ़्लो ​

वे नोड जो तय करते हैं कि रन कहाँ जाता है। ब्रांच, जॉइन और लूप पर और जानकारी फ़्लो में।

प्रारंभ ​

जहाँ रन शुरू होता है; हर प्रयोग में ठीक एक होता है। इसका कोई इनपुट और कोई फ़ील्ड नहीं होता। टाइमलाइन की पहली पंक्ति रन का सीड बताती है।

आउटपुट: आउटपुट, ज़रूरी। इससे कई वायर एक साथ समानांतर ब्रांचें शुरू करते हैं।

json
{ "id": "start", "type": "start", "x": 40, "y": 80 }

अंत ​

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

json
{ "id": "end", "type": "end", "x": 960, "y": 80 }

विलंब ​

अगले चरण से पहले एक तय समय प्रतीक्षा करता है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
विलंब (ms)ms300; 0–60 000नहीं

आउटपुट: आउटपुट। कोई सेटिंग नहीं। लंबी प्रतीक्षाओं के लिए, कई एक पंक्ति में या किसी लूप में रखें।

json
{ "id": "pause", "type": "delay", "x": 500, "y": 80, "ms": 500 }

स्टेटस ब्रांच ​

जब नवीनतम HTTP रिस्पॉन्स का यह स्टेटस हो तब हाँ चुनता है, वरना नहीं। हर पाथ पर इससे पहले एक HTTP रिक्वेस्ट आनी चाहिए।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
अपेक्षित स्टेटसstatus200; 100–599नहीं

आउटपुट: हाँ और नहीं, दोनों ज़रूरी। कोई सेटिंग नहीं।

json
{ "id": "branch", "type": "branch_status", "x": 500, "y": 80, "status": 200 }

मान पर ब्रांच ​

जब कोई तुलना पूरी होती है तब हाँ चुनता है, वरना नहीं। इसके फ़ील्ड और तुलनाएँ वही हैं जो मान जाँचें के हैं; जो तुलना की ही नहीं जा सकती (lt टेक्स्ट पर), वह चरण विफल कर देती है।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्टटेम्पलेट
मानvalueकिसकी तुलना होती है{{token}}हाँ
शर्तopके बराबर हैनहीं
अपेक्षितexpectedख़ाली (न हो तो भी)हाँ

आउटपुट: हाँ और नहीं, दोनों ज़रूरी। कोई सेटिंग नहीं।

json
{ "id": "ok", "type": "branch_value", "x": 730, "y": 80, "value": "{{reply.args[0]}}", "op": "eq", "expected": "ok" }

समानांतर ब्रांच ​

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

आउटपुट: शाखा 1 और शाखा 2, दोनों ज़रूरी।

json
{ "id": "split", "type": "fork", "x": 270, "y": 80 }

ब्रांचें जोड़ें ​

तब तक प्रतीक्षा करता है जब तक इसमें आने वाले हर वायर तक न पहुँचा जाए, फिर एक बार आगे बढ़ता है, ब्रांचों के वेरिएबल मिलाकर — जहाँ दो ब्रांचें एक ही वेरिएबल सेट करती हैं, वहाँ फ़ाइल में जिसका वायर बाद में आता है वह जीतता है — और उनमें से जिस आख़िरी के पास थी उसका नवीनतम HTTP रिस्पॉन्स। कोई फ़ील्ड नहीं।

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

आउटपुट: आउटपुट, ज़रूरी।

इसमें आने वाले कई वायर वाला कोई भी और नोड हर आगमन पर एक बार चलता है।

json
{ "id": "joined", "type": "join", "x": 730, "y": 80 }

लूप ​

बॉडी पर के चरण — जो वापस इसी तक लाते हैं — बार-बार चलाता है: अधिकतम कई बार, और, जब कोई निकास शर्त हो, तब तक जब तक वह पूरी न हो जाए।

फ़ील्डफ़ाइल मेंक्याडिफ़ॉल्ट और सीमाएँटेम्पलेट
अधिकतम इटरेशनmaxअधिकतम पुनरावृत्तियाँ5; 1–1 000नहीं
पहले रुकें, जबuntilवैकल्पिक निकास शर्त { "value", "op", "expected" }, जैसे मान जाँचें मेंबंदमान और अपेक्षित: हाँ
  • बॉडी हमेशा कम से कम एक बार चलती है। निकास शर्त हर पुनरावृत्ति के बाद पढ़ी जाती है, इसलिए बॉडी वह सेट कर सकती है जो वह जाँचती है।
  • जब शर्त पूरी होती है तब पूर्ण का पीछा किया जाता है — या, बिना शर्त के, अंतिम पुनरावृत्ति के बाद।
  • जब शर्त पूरी होने से पहले पुनरावृत्तियाँ ख़त्म हो जाती हैं तब सीमा का पीछा किया जाता है। उस पर वायर न हो तो वह चरण विफल कर देता है।
  • बॉडी के भीतर, {{counter}} पुनरावृत्ति का क्रमांक है।
  • बॉडी एक ब्रांच के रूप में चलती है: उसके भीतर हर आउटपुट पर एक वायर होता है; उसमें कोई शुरुआत, अंत, समानांतर शाखा, शाखाएँ जोड़ें या दूसरा लूप नहीं होता; उसमें प्रवेश केवल बॉडी से होता है; और उसका हर वायर बॉडी में आगे या लूप तक वापस ले जाता है।

आउटपुट: बॉडी और पूर्ण (ज़रूरी), सीमा (वैकल्पिक)। कोई सेटिंग नहीं।

json
{ "id": "poll", "type": "loop", "x": 270, "y": 80, "max": 10,
  "until": { "value": "{{status.args[0]}}", "op": "eq", "expected": "ready" } }