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

इवेंट ​

जॉब चलते समय जो कुछ भी होता है — रन के चरण, मॉनिटर के संदेश, बर्स्ट की संख्याएँ, इंस्पेक्टर के फ़्रेम, जॉब का अंत — वह एक इवेंट के रूप में भेजा जाता है। ब्राउज़र में सर्वर का पेज उन्हें एक WebSocket, /api/events पर पाता है; स्क्रिप्ट उसी सॉकेट पर सुन सकती है। डेस्कटॉप ऐप वही इवेंट, उन्हीं नामों और पेलोड के साथ, ऐप के भीतर पाता है।

सब्सक्राइब करना ​

सर्वर पर /api/events को एक WebSocket खोलें:

bash
websocat -H "Authorization: Bearer $TOKEN" ws://127.0.0.1:1430/api/events
  • प्रमाणीकरण API के बाकी हिस्से जैसा है: Authorization: Bearer के रूप में टोकन, या ब्राउज़र का सेशन कुकी। इसके बिना अपग्रेड 401 auth.required के साथ अस्वीकार हो जाता है।
  • Origin: जो क्लाइंट Origin हेडर भेजता है उसे सर्वर का अपना भेजना चाहिए (हॉस्ट और पोर्ट Host के बराबर), वरना अपग्रेड 403 auth.origin के साथ अस्वीकार हो जाता है। ब्राउज़र के बाहर की ज़्यादातर WebSocket लाइब्रेरी कोई नहीं भेजतीं।
  • हर इवेंट हर क्लाइंट को। सब्सक्राइब करने को कुछ नहीं है: हर सॉकेट हर जॉब का हर इवेंट पाता है, चाहे उसे किसी ने भी शुरू किया हो। जो चाहिए उसे event से, और पेलोड में job_id से चुनें।
  • केवल सुनें। क्लाइंट जो भेजता है सर्वर उसे नज़रअंदाज़ करता है, बंद करने के सिवा; 64 KiB से बड़ा संदेश सॉकेट बंद कर देता है।
  • कीप-अलाइव। सर्वर हर 20 s में पिंग करता है, इसलिए शांत सॉकेट प्रॉक्सी के आर-पार खुला रहता है। सर्वर बंद होने पर हर सॉकेट बंद कर देता है।
  • कुछ दोहराया नहीं जाता। जब क्लाइंट जुड़ा नहीं था तब भेजे गए इवेंट उसके लिए खो जाते हैं। जो क्लाइंट फिर जुड़ता है उसे मौजूदा हाल कमांड से पढ़ना चाहिए (jobs_list, inspect_snapshot, emulator_exchanges…)।
  • पीछे रह जाना। एक सॉकेट के लिए अधिकतम 4096 इवेंट प्रतीक्षा करते हैं। जो क्लाइंट इससे और पीछे रह जाता है, उसे server://lagged मिलता है, यह बताते हुए कि कितने छूटे।

संदेश का रूप ​

हर इवेंट एक JSON ऑब्जेक्ट रखने वाला एक टेक्स्ट संदेश है:

json
{ "event": "scan://open", "payload": { "job_id": 9, "ts": 1759600000123, "port": 8080, "banner": null } }
फ़ील्डयह क्या है
eventचैनल, नीचे
payloadइवेंट के मान; उसका रूप चैनल पर निर्भर है

समय (ts, किसी पीयर के first_ms और last_ms) 1970 से मिलीसेकंड में हैं; विलंब और दूसरी अवधियाँ (*_latency_ms, p50_ms…, ms) मिलीसेकंड में। पेलोड में त्रुटियाँ EngineError ऑब्जेक्ट हैं; उनके कोड त्रुटि संदेश में सूचीबद्ध हैं।

चैनल ​

चैनलकौन भेजता हैकब
experiment://stepएक रनचरण शुरू होता है, पास होता है, विफल होता है, दोबारा प्रयास करता है, दोहराता है या लोड बताता है
experiment://endedएक रनएक बार, जब रन अपने आप समाप्त होता है
job://endedहर जॉबएक बार, जब जॉब अपने आप समाप्त होता है या विफल होता है
osc://messageOSC मॉनिटरहर पैकेट
osc://gen-tickOSC जनरेटरहर संदेश, या 60 संदेश प्रति सेकंड से ऊपर 30 से 45 बार प्रति सेकंड
http://burst-progressHTTP बर्स्टहर 100 ms, और अंत में
ws://stateWebSocket कनेक्शनजुड़ा, बंद
ws://messagesWebSocket कनेक्शनहर 100 ms, जब कुछ नया हो
mqtt://stateMQTT कनेक्शनजुड़ा, सब्सक्राइब किया, बंद
mqtt://messagesMQTT कनेक्शनहर 100 ms, जब कुछ नया हो
mqtt://ackMQTT कनेक्शनQoS 1/2 पब्लिश पूरी हुई; अनसब्सक्राइब का जवाब आया
broadcast://emit-statबीकनहर 250 ms, और अंत में
broadcast://peersडिस्कवरी लिसनरहर 400 ms
netsim://statइम्पेयरमेंट रिलेहर 250 ms
storm://statस्टॉर्महर 250 ms, और अंत में
scan://openस्कैनरहर खुला पोर्ट
scan://progressस्कैनरलगभग रेंज के हर 1 % पर, और अंत में
emulator://activityएमुलेटर जॉबहर 200 ms, जब कुछ नया हो
inspect://batchइंस्पेक्टरनए फ़्रेम के साथ हर 120 ms, शांत रहने पर लगभग सेकंड में एक बार, जब तक कैप्चर चालू हो
server://laggedसर्वरकोई क्लाइंट पीछे रह गया

experiment://step ​

रन का एक चरण: नोड का शुरू होना, पास होना, विफल होना, दोबारा प्रयास की प्रतीक्षा, दोहराना, या लोड की प्रगति बताना। /api/run से शुरू किया रन अपने जवाब पर वही चरण भेजता है (देखें रन)।

फ़ील्डप्रकारअर्थ
job_idसंख्यारन का जॉब
tsसंख्याकब
node_idस्ट्रिंगनोड
stateस्ट्रिंगrunning, passed, failed, retry (कोई प्रयास विफल हुआ और चरण रुकने के बाद फिर चलता है), repeating (दोहराने वाली क्रिया की प्रगति, अधिकतम सेकंड में एक बार) या load (लोड की प्रगति, अधिकतम सेकंड में एक बार)
detailस्ट्रिंगक्या हुआ, अंग्रेज़ी में; running और failed के लिए ख़ाली (देखें error)
message_keyस्ट्रिंग या nullउसके लिए इंटरफ़ेस का टेक्स्ट, उसकी डिक्शनरी की कुंजी के रूप में
message_paramsऑब्जेक्ट या nullवे मान जिनका नाम message_key देता है
varsऑब्जेक्टचरण द्वारा लिखे वेरिएबल; न हों तो छोड़ दिए जाते हैं
errorEngineErrorयह क्यों विफल हुआ, या प्रयास क्यों विफल हुआ (retry); वरना छोड़ दिया जाता है
frameसंख्याजिस संदेश से किसी प्रतीक्षा (या भेजाव के अपेक्षित जवाब) का मेल हुआ, उसका इंस्पेक्टर फ़्रेम, जब कैप्चर चालू था; वरना छोड़ दिया जाता है
loadऑब्जेक्टलोड ने क्या मापा, उसकी थ्रेशोल्ड पढ़ी गईं — लोड चरण के अंतिम इवेंट पर, पास या विफल; वरना छोड़ दिया जाता है। देखें लोड

रन का अंत नोड running दिखाता है जब पहली शाखा उस तक पहुँचती है, और passed जब हर शाखा बिना विफलता के समाप्त हो जाती है। सीक्रेट मान हर फ़ील्ड में मास्क होते हैं।

experiment://ended ​

रन अपने आप समाप्त हुआ: पास हुआ, विफल हुआ या समय समाप्त हो गया। job://ended पर वही पेलोड आने के ठीक बाद भेजा जाता है। job_stop या सभी रोकें से रोका गया रन न यह भेजता है न कोई रिपोर्ट सहेजता है।

फ़ील्डप्रकारअर्थ
job_idसंख्यारन का जॉब
kindस्ट्रिंगexperiment
seedसंख्यासीड जिसके साथ यह चला
profileस्ट्रिंग या nullइसका प्रोफ़ाइल
overriddenबूलियनकुछ पैरामीटर मान इसके साथ चलाएँ… या overrides से आए
errorEngineError या nullरन की पहली विफलता; पास होने पर null
report_pathस्ट्रिंग या nullइसकी रिपोर्ट, डेटा फ़ोल्डर के runs/ में
report_errorEngineError या nullरिपोर्ट क्यों नहीं लिखी जा सकी

job://ended ​

जॉब अपने आप समाप्त हुआ या विफल हुआ। job_stop या jobs_stop_all से रोका गया जॉब इसे नहीं भेजता।

फ़ील्डप्रकारअर्थ
job_idसंख्याजॉब
kindस्ट्रिंगosc-monitor, osc-gen, http-burst, netsim, storm, scan, beacon, discovery, mqtt, websocket, emulator या experiment
errorEngineError या nullकुछ ग़लत होने पर यह क्यों समाप्त हुआ

रन का job://ended experiment://ended के फ़ील्ड भी ले जाता है। हर तरह को क्या समाप्त करता है:

kindकब समाप्त होता हैerror
osc-monitorसॉकेट अब प्राप्त नहीं कर सकताwait.receive_failed
osc-genइसकी अवधि ख़त्म, या कोई भेजाव विफलnull, या transport.*
http-burstइसका कुल या अवधि पूरीnull
stormइसकी अवधि ख़त्मnull
scanरेंज का हर पोर्ट आज़माया गयाnull
beaconइसके राउंड या अवधि ख़त्म, या 32 से ज़्यादा भेजाव विफल हुए और कोई नहीं गयाnull, या transport.*
discoveryसॉकेट अब प्राप्त नहीं कर सकताwait.receive_failed
mqttब्रोकर ने कनेक्शन बंद किया या वह खो गयाtransport.* (transport.reset जब ब्रोकर ने इसे बंद किया), या mqtt.protocol
websocketकनेक्शन बंद हुआnull, या यह क्यों खोया
netsimरिले अब काम नहीं कर सकताक्यों
emulatorइसका सॉकेट विफल होता हैक्यों
experimentरन समाप्त होता हैरन की विफलता, या null

osc://message ​

OSC मॉनिटर को मिला एक UDP पैकेट, डिकोड किया हुआ। हर पैकेट के लिए भेजा जाता है, बिना बैच के।

फ़ील्डप्रकारअर्थ
job_idसंख्यामॉनिटर का जॉब
tsसंख्यायह कब आया
fromस्ट्रिंगभेजने वाला, IP:port
bytesसंख्यापैकेट का आकार
messagesऑब्जेक्ट[]पैकेट का हर संदेश (बंडल में कई होते हैं): address और args (OscArg[])
errorEngineError या nullजब पैकेट डिकोड नहीं हुआ तो osc.packet_malformed (तब messages ख़ाली होता है)

osc://gen-tick ​

OSC जनरेटर की प्रगति: 60 संदेश प्रति सेकंड से नीचे हर संदेश के लिए; उससे ऊपर हर n-वें के लिए, जहाँ n दर को 30 से भाग देकर नीचे की ओर पूर्णांकित करने पर मिलता है — सेकंड में 30 से 45 बार।

फ़ील्डप्रकारअर्थ
job_idसंख्याजनरेटर का जॉब
tsसंख्याकब
valueसंख्याअभी भेजा गया मान, इससे पहले कि उसे पूर्णांक या 32-bit float में पूर्णांकित किया जाए
sentसंख्याअब तक भेजे संदेश

http://burst-progress ​

HTTP बर्स्ट की संख्याएँ, चलते समय हर 100 ms, और अपने आप समाप्त होने पर done: true के साथ एक बार और।

फ़ील्डप्रकारअर्थ
job_idसंख्याबर्स्ट का जॉब
tsसंख्याकब
sentसंख्याअब तक जवाब पाई या विफल रिक्वेस्ट
okसंख्याउनमें से 2xx स्टेटस के साथ जवाब पाई
failedसंख्याउनमें से कोई दूसरा स्टेटस या कोई जवाब नहीं
missedसंख्यापेस्ड बर्स्ट की वे रिक्वेस्ट जो ख़ाली वर्कर के लिए बहुत देर प्रतीक्षा करके छोड़ दी गईं
rpsसंख्यापिछले 100 ms में रिक्वेस्ट प्रति सेकंड; अंतिम इवेंट में पूरे बर्स्ट पर
last_latency_ms, min_latency_ms, max_latency_ms, avg_latency_msसंख्याअब तक के विलंब
p50_ms, p90_ms, p95_ms, p99_msसंख्याअब तक की हर रिक्वेस्ट के प्रतिशतक, विफलताओं समेत, 0.5 % के भीतर
doneबूलियनबर्स्ट का अंतिम इवेंट

ws://state ​

ws_connect से खोला गया WebSocket कनेक्शन जुड़ा, या बंद हुआ। जिस कनेक्शन का जॉब रोका गया, वह closed नहीं भेजता।

फ़ील्डप्रकारअर्थ
job_idसंख्याकनेक्शन का जॉब
tsसंख्याकब
stateस्ट्रिंगconnected या closed
handshakeऑब्जेक्टurl, peer, local, protocol (सर्वर द्वारा चुना सबप्रोटोकॉल, या null) और ms (कनेक्ट होना और अपग्रेड)
closedऑब्जेक्ट या nullclosed के साथ: code, reason, by (client, server या lost) और error

ws://messages ​

पिछले इवेंट के बाद WebSocket कनेक्शन ने क्या भेजा और पाया, हर 100 ms जब कुछ हो।

फ़ील्डप्रकारअर्थ
job_idसंख्याकनेक्शन का जॉब
tsसंख्याकब
messagesऑब्जेक्ट[]क्रम में: ts, dir (rx प्राप्त, tx भेजा), kind (text या binary), text (पहले 64 KiB UTF-8 के रूप में, बाइनरी संदेश का भी; जो बाइट नहीं हैं वे � बन जाते हैं), hex (बाइनरी संदेश के पहले 4096 बाइट hex में, वरना null), bytes (पूरा आकार) और truncated (दिखाए गए से ज़्यादा: टेक्स्ट के 64 KiB से आगे, बाइनरी के 4096 बाइट से आगे)
droppedसंख्याइस इवेंट से छोड़े गए संदेश क्योंकि 2000 से ज़्यादा थे; सबसे पुराने पहले

mqtt://state ​

MQTT कनेक्शन की स्थिति बदली।

फ़ील्डप्रकारअर्थ
job_idसंख्याकनेक्शन का जॉब
tsसंख्याकब
stateस्ट्रिंगconnected; सब्सक्राइब के हर जवाब के बाद subscribed; कनेक्शन समाप्त होने पर closed (तब नहीं जब उसका जॉब रोका गया)
brokerस्ट्रिंगhost:port
errorEngineError या nullclosed कनेक्शन क्यों समाप्त हुआ (transport.reset जब ब्रोकर ने इसे बंद किया); वरना null
grantsऑब्जेक्ट[]subscribed के साथ: माँगा गया हर फ़िल्टर, filter, qos (दिया गया) और accepted के साथ; वरना ख़ाली

mqtt://messages ​

पिछले इवेंट के बाद MQTT कनेक्शन ने क्या पाया, हर 100 ms जब कुछ हो। दोबारा दिया गया QoS 2 संदेश एक बार दिखाया जाता है।

फ़ील्डप्रकारअर्थ
job_idसंख्याकनेक्शन का जॉब
tsसंख्याकब
messagesऑब्जेक्ट[]ts, topic, payload (UTF-8 के रूप में; जो बाइट नहीं हैं वे � बन जाते हैं), bytes, qos, retain, dup
droppedसंख्यासंदेश छोड़े गए क्योंकि 100 ms में 4000 से ज़्यादा आए; सबसे पुराने पहले

mqtt://ack ​

ब्रोकर ने वह पूरा किया जो कनेक्शन ने माँगा।

फ़ील्डप्रकारअर्थ
job_idसंख्याकनेक्शन का जॉब
tsसंख्याकब
kindस्ट्रिंगpublished (QoS 1 या 2 पब्लिश पूरी हुई) या unsubscribed
packet_idसंख्याMQTT पैकेट id
topicस्ट्रिंग या nullपब्लिश किया टॉपिक; unsubscribed के लिए null

broadcast://emit-stat ​

बीकन के काउंटर, हर 250 ms, और अपने आप समाप्त होने पर pps 0 के साथ एक बार और।

फ़ील्डप्रकारअर्थ
job_idसंख्याबीकन का जॉब
tsसंख्याकब
targetsसंख्याहर राउंड में गंतव्य
roundsसंख्याभेजे गए राउंड
packets, bytesसंख्याभेजे गए डेटाग्राम और बाइट
errorsसंख्याविफल भेजाव
ppsसंख्यापिछले 250 ms में डेटाग्राम प्रति सेकंड

broadcast://peers ​

डिस्कवरी लिसनर ने क्या सुना, हर 400 ms।

फ़ील्डप्रकारअर्थ
job_idसंख्यालिसनर का जॉब
tsसंख्याकब
peersऑब्जेक्ट[]सबसे हाल में सुना पहले: addr, proto, packets, bytes, first_ms, last_ms, last_summary, responded (उसके वे पैकेट जिनका जवाब दिया गया, आते ही गिने गए); अधिकतम 512
packets, bytesसंख्याजो कुछ प्राप्त हुआ
responsesसंख्याभेजे गए जवाब

netsim://stat ​

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

फ़ील्डप्रकारअर्थ
job_idसंख्यारिले का जॉब
tsसंख्याकब
received, forwardedसंख्याअंदर और बाहर डेटाग्राम या चंक
droppedसंख्याloss, बर्स्ट या offline से खोए (UDP; TCP रिले ऑफ़लाइन रहते स्ट्रीम रोके रखता है और कुछ नहीं गिराता)
throttledसंख्याUDP: बैंडविड्थ सीमा से गिराए, या क्योंकि बहुत सारे पहले से रास्ते में थे। TCP: वे चंक जो बैंडविड्थ सीमा के लिए अपनी स्ट्रीम रोके रहे
duplicated, corrupted, reorderedसंख्याप्रोफ़ाइल ने इनके साथ क्या किया
bytesसंख्याआगे भेजे गए बाइट
connections, reset, stalledसंख्याTCP: लिए गए कनेक्शन, रीसेट किए, हाफ-ओपन छोड़े; 0 रहते छोड़ दिए जाते हैं
profileस्ट्रिंगजिस प्रोफ़ाइल से यह अब इम्पेयर कर रहा है, जैसे टाइमलाइन उसे नाम देती है: उसका नाम, या यह क्या करता है (60 ms ±25 · loss 2%)

storm://stat ​

स्टॉर्म के काउंटर, हर 250 ms, और अपने आप समाप्त होने पर pps तथा mbps 0 के साथ एक बार और।

फ़ील्डप्रकारअर्थ
job_idसंख्यास्टॉर्म का जॉब
tsसंख्याकब
packets, bytesसंख्याभेजे गए डेटाग्राम (या TCP कनेक्शन) और बाइट
errorsसंख्याविफल भेजाव या कनेक्शन
ppsसंख्यापिछले 250 ms में प्रति सेकंड
mbpsसंख्यापिछले 250 ms में मेगाबिट प्रति सेकंड

scan://open ​

स्कैनर को एक खुला पोर्ट मिला।

फ़ील्डप्रकारअर्थ
job_idसंख्यास्कैन का जॉब
tsसंख्याकब
portसंख्यापोर्ट
bannerस्ट्रिंग या nullसेवा ने सबसे पहले क्या भेजा, जब बैनर माँगे गए और उसने 400 ms के भीतर कुछ कहा

scan://progress ​

स्कैन कितना आगे है: लगभग रेंज के हर 1 % पर, और अपने आप समाप्त होने पर done के total के बराबर होने के साथ (वह एक दो बार आ सकता है)।

फ़ील्डप्रकारअर्थ
job_idसंख्यास्कैन का जॉब
tsसंख्याकब
doneसंख्याआज़माए गए पोर्ट
totalसंख्यारेंज में पोर्ट
openसंख्यामिले खुले पोर्ट

emulator://activity ​

emulator_start से शुरू किया एमुलेटर पिछले इवेंट के बाद क्या पाया और उसका जवाब दिया, हर 200 ms जब कुछ बदले (कोई आदान-प्रदान, बंद या चालू किया जाना, या कोई संदेश जो MQTT ब्रोकर पहुँचा नहीं सका)। रन के एमुलेटर नोड इसे नहीं भेजते; उनके काउंटर रन की रिपोर्ट में होते हैं।

फ़ील्डप्रकारअर्थ
job_idसंख्याएमुलेटर का जॉब
tsसंख्याकब
countsऑब्जेक्टtotal, unmatched, failed, down, hits (प्रति नियम), और missed (MQTT; 0 रहते छोड़ दिया जाता है) — emulator_exchanges की तरह
forcedस्ट्रिंगजब यह बंद किया गया हो तो unavailable, reset या timeout; वरना छोड़ दिया जाता है
exchangesऑब्जेक्ट[]नए आदान-प्रदान, जैसे emulator_exchanges उन्हें सूचीबद्ध करता है पर data के बिना; अधिकतम 200
droppedसंख्याअंतराल के पहले 200 के बाद के आदान-प्रदान, यहाँ नहीं भेजे गए; emulator_exchanges के पास फिर भी अंतिम 500 हैं

inspect://batch ​

नए इंस्पेक्टर फ़्रेम। केवल तब भेजे जाते हैं जब कैप्चर चालू हो: नए फ़्रेम होने पर हर 120 ms, और न होने पर लगभग सेकंड में एक बार, ताकि काउंटर ताज़ा रहें।

फ़ील्डप्रकारअर्थ
framesऑब्जेक्ट[]नए फ़्रेम, सबसे पुराने पहले, अधिकतम 250; उनके बाइट के बिना (inspect_payload उपयोग करें)
statsऑब्जेक्टकैप्चर के काउंटर, CaptureStats
skipped_nowसंख्यापिछले बैच के बाद पकड़े गए पर इस बैच में न रहने वाले फ़्रेम — 250 से ज़्यादा आए, या बफ़र ने उन्हें छोड़ दिया। जब तक बफ़र उन्हें रखे है, वे एक्सपोर्ट में फिर भी रहते हैं

server://lagged ​

केवल सर्वर। यह क्लाइंट 4096 से ज़्यादा इवेंट पीछे रह गया और कुछ चूक गया। हाल को कमांड से फिर पढ़ें।

फ़ील्डप्रकारअर्थ
skippedसंख्यायह कितने इवेंट चूका