2022幎12æã« intdash Edge Agent 2 ããããããŒã¬ã€ã ãå
¬éãããŸããã ãããŸã§ã® intdash Edge Agent ïŒä»¥éãAgent 1ïŒãšèšå®æé ãæ¯èŒããŠã¿ãŸãããã ã¯ãããŸããŠããœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã®äŒå¢ã§ãã æ®æ®µã¯ã客æ§ãžã®ææ¡ãæ
åœããŠããŠéçºäœæ¥ã¯è¡ããªãã®ã§ãintdash Edge Agent 2ïŒä»¥éãAgent 2ïŒã«ãŸã çŽæ¥è§ŠããããŠããŸãããã©ããããAgent 1ã®èª²é¡ã ã£ãæ©èœçŸ€ã®é¢ä¿æ§ã®ãããããããæ¹åãããããšã«ãããèšå®æ¹æ³ãå€ãã£ãŠããããã§ãã ä»åã¯Agent 2ã®ã玹ä»ããŠããå
·äœçã«èšå®äœæ¥ãã©ãå€ãã£ãã®ã確èªããŠãããããšæããŸãã docs.intdash.jp ç®æ¬¡ ç®æ¬¡ ãã®åã« ãããšãã Agent 2ãšã¯ Agent 1ãšäœãå€ãã£ãã®ã 確èªãã€ã³ã 確èªçšã®æ§æ æ¯èŒ UpstreamïŒAgentå°å
¥ãšããã€ã¹ã³ãã¯ã¿ãŒèšå® UpstreamïŒAgentå°å
¥ãšããã€ã¹ã³ãã¯ã¿ãŒèšå® - Agent 1 UpstreamïŒAgentå°å
¥ãšããã€ã¹ã³ãã¯ã¿ãŒèšå® - Agent 2 UpstreamïŒãã£ã«ã¿ãªã³ã°èšå® UpstreamïŒãã£ã«ã¿ãªã³ã°èšå® - Agent 1 UpstreamïŒãã£ã«ã¿ãªã³ã°èšå® - Agent 2 Downstreamã®ã»ããã¢ãã é éæç€ºïŒAgent 1 â Agent 1 é éæç€ºïŒAgent 2 â Agent 2 é éæç€ºïŒAgent 2 â Agent 1 é éæç€ºïŒAgent 1 â Agent 2 ãŸãšã AppendixïŒèšå®æ
å ± ã³ã³ãã agent1up /root/manager.conf /root/logger.conf.mjpeg ã³ã³ãã agent2up intdash-agentd config show /etc/dc_conf/jpeg-up.yml /etc/dc_conf/h264-up.yml ã³ã³ãã agent1down /root/manager.conf ã³ã³ãã agent2down intdash-agentd config show ãã®åã« ãããšãã ããã¯ãããŸã§"ãã£ãŠã¿ã"èšäºã§ãã æ£åŒãªæé ã¯åããããããŒã¬ã€ãããåç
§ãã ããã Agent 2ãšã¯ ããããããŒã¬ã€ã ã«ããã°ã以äžã®ãšããã§ãã intdash Edge Agent 2ã¯ãintdashãµãŒããŒãšã®éã§æç³»åããŒã¿ã®éåä¿¡ãè¡ããšãŒãžã§ã³ããœãããŠã§ã¢ã§ãã ãšããžããã€ã¹ïŒLinux PCïŒã«ã€ã³ã¹ããŒã«ããŠäœ¿çšããŸãã intdash Edge Agent 2 ãšããžããã€ã¹ã¯ãã«ã¡ã©ãã»ã³ãµããååŸããããŒã¿ãããã€ã¹ã³ãã¯ã¿ãŒçµç±ã§Agentããã»ã¹ã«æµã蟌ã¿ãŸãã Agentã¯ãµãŒããŒã®APIãšã¹ããªãŒã ã匵ã£ãŠãããŒã¿ããµãŒããŒã«UpstreamããŸãã ãŸãããšããžããã€ã¹ãžã®å¶åŸ¡ä¿¡å·ããµãŒããŒããDownstreamããŠããã€ã¹ã³ãã¯ã¿ãŒã«æž¡ããŸãã Agent 1ãšäœãå€ãã£ãã®ã ããã€ã¹ã³ãã¯ã¿ãŒãšã®ã€ã³ã¿ãã§ãŒã¹ã¯ãããŸã§ã®éããååä»ããã€ãã§ãã FIFOãã¡ã€ã« ã§ãã ãŸãããµãŒããŒãšã®é信㯠iSCP v1 ã®åŸç¶ã§ããiSCP v2ãæ¡çšããŠããŸãããAgentã§é èœããããããå©çšè
ãéããæèããããšã¯ããŸããããŸããã ãªããå®è£
ã¯éçºå¹çã®ããã«RustãšGoãæ¡çšããŠããŸãã å©çšè
ç®ç·ã§å€ãã£ãç¹ã¯æ©èœã®åç·šïŒåå²ã»è¿œå ã»åç§°å€æŽïŒã§ãã intdashæäŸéå§ããå¢ãç¶ããŠããåçš®æ©èœã®äœçœ®ä»ãããŒãããŒã¹ã§èŠçŽããå®çŸ©ããªãããŠããŸãã intdash Edge Agent é¡èãªå€æŽç¹ã¯ãã®ãããªãšããã§ãã èšå®ç®¡çã¯ããŒã¢ã³ãè¡ãããã«ãªã£ã èšå®æ
å ±ã®åœ¢åŒãJSONããYAMLã«å€ãã£ãïŒãªãã·ã§ã³ã§JSONãæå®å¯èœïŒ èšå®æ
å ±ã®é
ç®ç«ãŠãäžæ°ãã ããã€ã¹ã³ãã¯ã¿ãŒããã€ãã©ã€ã³ãšããŠå®çŸ©ããããã«ãªã£ã UpstreamãšDownstreamã®åºå¥ãæç¢ºã«ãªã£ã èšå®åšããå€ãã§ãããAgent 1ã®èšå®ãã¡ã€ã«ã¯Agent 2ã§ã¯ãã®ãŸãŸäœ¿ããŸããã ã§ã¯ãã©ã®ãããªèšå®æé ã«ãªã£ãã®ããAgent 1ãšAgent 2ã§æ¯èŒããªããèŠãŠãããŸãããã 確èªãã€ã³ã å
žåçãªå©çšã±ãŒã¹ããŸãAgent 1âAgent 2ã®éæž¡æã«ããåŸãããªãã¿ãŒã³ãæ³å®ããŠæ®µéçã«ã»ããã¢ããããŠãããŸãã Upstreamã®ã»ããã¢ãã Agentå°å
¥ãšããã€ã¹ã³ãã¯ã¿ãŒèšå® ãã£ã«ã¿ãªã³ã°èšå® Downstreamã®ã»ããã¢ãã é éæç€ºïŒAgent 1 â Agent 1 é éæç€ºïŒAgent 2 â Agent 2 é éæç€ºïŒAgent 2 â Agent 1 é éæç€ºïŒAgent 1 â Agent 2 確èªçšã®æ§æ ä»åã¯Agent 1/2ãšUpstream/Downstreamããããã®æé ã確èªãããããã1å°ã®ãã¹ãã³ã³ãã¥ãŒã¿ã«4ã€ã®Dockerã³ã³ãããç«ãŠãŠããŸãã ãšããžã4ã€çšæ æ¯èŒ UpstreamïŒAgentå°å
¥ãšããã€ã¹ã³ãã¯ã¿ãŒèšå® å€éšããã€ã¹ã®ããããããäŸãšããŠUSBã«ã¡ã©ã®Upstreamãèšå®ããŸãã USBã«ã¡ã©ã¯Logicoolã®C920s UpstreamïŒAgentå°å
¥ãšããã€ã¹ã³ãã¯ã¿ãŒèšå® - Agent 1 ãŸãã¯Agent 1ã§ã®èšå®æ¹æ³ã®ããããã§ãã æ§æã¯ãã®ããã«ãªããŸãã Agent 1ã§æ åãUpstream Dockerã³ã³ãããäœæããŸãã ã³ã³ããã§ããã€ã¹ãå©çšãããã --privileged ãæå® intdash Edge Agent ããããããŒã¬ã€ãã® 2.1 ã€ã³ã¹ããŒã« ãåèã«ã€ã³ã¹ããŒã«ããŠãããŸãã rootãŠãŒã¶ãŒãªã®ã§sudoãªãã§ ãšãã£ã¿ãšã«ã¡ã©ããã€ã¹ãŠãŒãã£ãªãã£ãã€ã³ã¹ããŒã« Admin Console ã§ãšããžãäœæããŸãã UUIDãšã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããã³ã㌠intdash-edge-manager ãèµ·åãããšãã®ç°å¢å€æ°ãå€ãã®ã§èµ·åçšã·ã§ã«ã¹ã¯ãªãããäœã£ãŠãããŸãã FQDNã»UUIDã»ã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããèšå® ããã©ã«ãèšå®ã§èµ·åãããš Edge Finder ã§Upstreamã確èªã§ããŸãã Statusæ
å ±ãUpstreamãããŠãã äžæŠAgentã忢ããã«ã¡ã©æ åã®Upstreamèšå®ã远å ããŠãããŸãã ãŠãŒãã£ãªãã£ã§ã«ã¡ã©ããã€ã¹ã®èšå®ã確èªããŸãã 15FPSã»640x480ã«ãªã£ãŠãã 察å¿ããŠããã«ã¡ã©ãªã ãããªã€ã³ã¹ããŒã«ãããããã€ã¹ã³ãã¯ã¿ãŒïŒintdash-edge-loggerïŒã§Agentãžã®ããŒã¿é£æºãå¯èœã§ãã ããããããŒã¬ã€ãã® 3.2.1 ãããŒãžã£ãŒã®èšå®ãã¡ã€ã«äŸïŒmanager.confïŒ ãåèã«manager.confãšmjpegèšå®ãã¡ã€ã«ãç·šéããŸãã mjpegèšå®ãã¡ã€ã«ãã¹ã»ãã£ã³ãã«ã»è§£å床ãèšå® å床ãèµ·åçšã·ã§ã«ã¹ã¯ãªããã§èµ·åã åŒæ°ã®èšå®ãã¡ã€ã«ãã¹ãå€æŽ Edge Finderã§JPEGã®Upsteramã確èªã§ããŸããã 1ç§ã«15æåä¿¡ ãã®ããšå¥ã®ã³ã³ããã§ã«ã¡ã©ããã€ã¹ã䜿ããããAgentã忢ããŠãããŸãã UpstreamïŒAgentå°å
¥ãšããã€ã¹ã³ãã¯ã¿ãŒèšå® - Agent 2 ã§ã¯ãããããAgent 2ãå°å
¥ããŠã¿ãŸãã æ§æã¯ãã®ããã«ãªããŸãã Agent 2ã§æ åãUpstream Dockerã³ã³ãããäœæãã intdash Edge Agent 2 ããããããŒã¬ã€ã ãåèã«é²ããŠãããŸãã Agent 1ãšåãããæµã Agent 1ãšéã£ãŠããã©ã«ãã®èšå®ãã¡ã€ã«ãããããã§ã¯ãããŸããã å®éã«ãã£ãŠèŠããã«ã¯ããããããŒã¬ã€ãã® ãã¥ãŒããªã¢ã« ãé²ããã®ãããã®ã§ãããããã¯æ¯èŒã®ããã«æ åã®ã¢ããã¹ããªãŒã ãèšå®ããŠã¿ãŸãããã ãªããDockerã§ã¯systemdã§ããŒã¢ã³ãèªåèµ·åããªãããã ããŒã¢ã³ãæåã§èµ·å ããŸãã ããŒã¢ã³ïŒintdash-agentdïŒãèµ·å Upstreamãèšå®ããŸããã«ã¡ã©ããã€ã¹ã¯èšå®ã¬ã·ãéã® 7.2. ã«ã¡ã©ããV4L2çµç±ã§ååŸããJPEGããŒã¿ãéä¿¡ãã ã«ãã®ãŸãŸã®æé ããããŸãããããåèã«ããŸãã ã¢ããã¹ããªãŒã ãš ããã€ã¹ã³ãã¯ã¿ãŒ ãèšå®ããŸãã Agent 1ã® manager.conf ã® loggers ïŒmjpegèšå®ãã¡ã€ã«ãã¹ã»ãã£ã³ãã«ã»è§£å床ãèšå®ããã»ã¯ã·ã§ã³ïŒã«ãããéšåã§ããã iSCP v2ã«ã¯ãã£ã³ãã« channel ãšããæŠå¿µã¯ãããŸããããããããã§ã¯ã äºæã«ãŒã« ã«æ²¿ã£ãŠiSCP v2ã®ããŒã¿ãiSCP v1ã®ãã£ã³ãã« 1 ãšããŠæ±ããããã«ãããããããŒã¿åç§°ããªãã£ãã¯ã¹ data_name_prefix ã« v1/1/ ãæå®ããŸãããŸããAgent 1ãšåããã«ã¡ã©ããã€ã¹ã«ããããŠè§£å床ã»FPSãèšå®ããŸãã è§£å床ã»FPSã¯ç°å¢å€æ°ã§ããã€ã¹ã³ãã¯ã¿ãŒã«æž¡ã ç¶ããŠããã€ã¹ã³ãã¯ã¿ãŒã® ãã€ãã©ã€ã³ ãèšå®ããŸããAgent 1ã®mjpegèšå®ãã¡ã€ã«ã®éšåã«ããããŸãã Agent1ã§ã¯ /opt/vm2m/sbin/intdash-edge-logger ã®äžã«é èœãããŠãããããã€ã¹å
¥åããã©ãŒããã倿ãFIFOåºåã®æµããå®çŸ©ããŸããAgent 2ã®ä»å±ããã€ã¹ã³ãã¯ã¿ãŒã®ç¹é·ãšããŠãã®ãã€ãã©ã€ã³ã®ä»çµã¿ã«ããã¿ã¹ã¯ã®æè»ãªå®çŸ©ãå¯èœã«ãªã£ãŠããŸãã å
¥åâäžéåŠçâåºå ç°å¢å€æ°ããè§£å床ã»FPSãååŸ æ¥ç¶èšå® ãè¡ããŸããAgent 1ã§ã¯ intdash-edge-manager èµ·åæã«ç°å¢å€æ°ã§æå®ããéšåã§ãããã®ã³ã³ããçšã®UUIDãšã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããAdmin Consoleã§æãåºããèšå®ããŸãã FQDNã»UUIDã»ã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããèšå® æåŸã« ã¹ããªãŒããŒãèµ·å ããŸãã ãã€ãã©ã€ã³ã«å«ãŸãã print-log-filter ã®ãã°ãåºåãããŸãã ãã°ã¬ãã« ã¯èµ·åæã«èšå®ããããšãã§ããŸãã ããã€ã¹ã³ãã¯ã¿ãŒãžã®å
¥åããŒã¿éãããã ãã¡ããEdge Finderã§ç¢ºèª Agent 2ã® intdash-agentctl ã³ãã³ãã ãšèšå®æã«ãã©ãŒããããšã©ãŒã«æ°ã¥ãããšãã§ãããããã»ããã¢ããäœæ¥ã®å¹çãäžããããã§ãã UpstreamïŒãã£ã«ã¿ãªã³ã°èšå® éä¿¡ããŒã¿éãéåŒããã£ã«ã¿ãªã³ã°ã®ä»£è¡šäŸãšããŠãäžå®æéã«1ããŒã¿ãã€ã³ãã«çµããµã³ããªã³ã°ã®éããèŠãŠã¿ãŸãã Agent 1/2ãšãã«ããã€ã¹ã³ãã¯ã¿ãŒã®åºåã«å¯ŸããŠå®çŸ©ããŸãã UpstreamïŒãã£ã«ã¿ãªã³ã°èšå® - Agent 1 Agent 1ã§ã¯ sampling ãã£ã«ã¿ãŒ ã§èšå®ããŸãã ãµã³ããªã³ã°ééã®æåã®ããŒã¿ãã€ã³ãããã¹ manager.conf ã® manager.filters ã»ã¯ã·ã§ã³ãç·šéããŸãã 1000ããªç§éã«1ããŒã¿ãã€ã³ãã«çµã èµ·åçšã·ã§ã«ã¹ã¯ãªãããå®è¡ãããšéåŒããããŠããã®ã確èªã§ããŸãã 1ç§ã«1æåä¿¡ UpstreamïŒãã£ã«ã¿ãªã³ã°èšå® - Agent 2 Agent 2ã§ã¯ samplingã¿ã€ãã®ãã£ã«ã¿ãŒ ãèšå®ããŸãã èãæ¹ã¯åã ã¯ããã«ãããã€ã¹ã³ãã¯ã¿ãŒããã®ããŒã¿ã®è¡å
ãã recoverable ã§ã¯ãªã src_jpeg ã«å€æŽããŸãããã ã src_jpeg ãšããã¹ããªãŒã ã¯ååšãããã®ã§ããã®ããšãµã³ããªã³ã°ãã£ã«ã¿ãŒãçµãŠãè¡å
ã src_jpeg ã®ãŸãŸã«ãªã£ãŠããããŒã¿ã¯ç Žæ£ãããããšã«ãªããŸãã ããã€ã¹ã³ãã¯ã¿ãŒã®å
¥åå
IDãå€æŽ ãã£ã«ã¿ãŒãå®çŸ©ããŸãã src_jpeg ã«å¯ŸããŠãµã³ããªã³ã°ããçµæã recoverable ã«åºåããŸãã targetããã£ã«ã¿ãŒã®å
¥åã»change_toãåºå ã¹ããªãŒããŒãèµ·åãããšéåŒããããŠããã®ã確èªã§ããŸãã 1ç§ã«1æåä¿¡ Agent 2ã®ãµã³ããªã³ã°ã¯H.264圢åŒã«å¯Ÿå¿ããŠããŸãã確èªããŠã¿ãŸãããã H.264ã¯åãã¬ãŒã ãšã®å·®åããŒã¿ã«ããåç»å§çž®èŠæ Œã®ããããµã³ããªã³ã°ãããšãªã¢ã«ã¿ã€ã åçã¯ã§ããŸãããJPEG以å€ã«ããµã³ããªã³ã°ãå¹ãããšã確èªããããã«å®æœããŠããŸããïŒé
å»¶ã¢ããããŒãã«ãããå
šããŒã¿ãã€ã³ããååãããããšã¯åç»ãšããŠåçãå¯èœã§ããïŒ ãŸãã¯ã«ã¡ã©ããã€ã¹ã®èšå®ã倿ŽããŸããFPSã¯15ã®ãŸãŸã§ãã è§£å床ã»ãã©ãŒããããå€æŽ ããã€ã¹ã³ãã¯ã¿ãŒã®èšå®ãæ°ãã«èšå®ããŸãã ã«ã¡ã©ããã€ã¹èšå®ãåæ H.264çšã®ãã€ãã©ã€ã³èšå®ãã¡ã€ã«ãäœæããŸãã MJPEGã®ãšãã«5ã€ã ã£ããšã¬ã¡ã³ãã4ã€ã«ãªã£ãŠããŸãã id: 2 ã® h264-split-filter ã®åºå㯠iscp-v2-compat-msg ãªã®ã§ã iscp-v2-compat-filter ãäžèŠãªããã§ãã ååŠçã®åºå圢åŒã«ããå¿
èŠãªãšã¬ã¡ã³ãã¯ç°ãªã ããã€ã¹ã³ãã¯ã¿ãŒã«ããããŠããã£ã«ã¿ãŒã®å
¥åå
IDãšããŒã¿ååã倿ŽããŸãã jpegãh264ã«å€æŽ ã¹ããªãŒããŒãèµ·åãããšEdge Finderã§1ç§éã«1åã®åä¿¡ã確èªã§ããŸãã H.264ã¯ç»é¢äžéšããã€ã衚瀺 Downstreamã®ã»ããã¢ãã ããŠã³ã¹ããªãŒã ã®å
žåäŸãšããŠãå¥ã®ãšããžã®éä¿¡ããŒã¿ããµãŒããŒçµç±ã§åä¿¡ããŸãã Agent 2å士ã®ã»ããAgent 1/2éã§ã®éåä¿¡ã®èšå®æ¹æ³ã確èªããŠã¿ãããšæããŸãã é éæç€ºïŒAgent 1 â Agent 1 ã§ã¯ããŸããããAgent 1åå£«ã®æé ã確èªããŠãããŸãã æ§æã¯ãã®ããã«ãªããŸãã Agent 1ããAgent 1ã«Stringãéä¿¡ éä¿¡åŽã®èšå®ãšããŠå
ã»ã©äœæããã³ã³ãã agent1up ã«ãã£ã³ãã«ã远å ããŸãã ããããããŒã¬ã€ã 4.1 ç¬èªã®ããã€ã¹ã³ãã¯ã¿ãŒã䜿çšããããã®èšå® ãåèã«é²ããŸãã ããã€ã¹ã³ãã¯ã¿ãŒèµ·åãªã èµ·åçšã·ã§ã«ã¹ã¯ãªããã§Agentãèµ·åããŸãã æã£åãæ©ãéä¿¡ãããããå¥ã¿ãŒããã«ã§åã³ã³ããã«å
¥ããFIFOãã¡ã€ã«ã«python3ã® struct.pack ã®çµæããªãã€ã¬ã¯ãããŸãã python3 -c "import struct, sys, time; s, n = divmod(time.clock_gettime(time.CLOCK_MONOTONIC_RAW), 1); sys.stdout.buffer.write(struct.pack('<BBBBLLBBB7s8s', 1, 26, 0, 0, int(s), int(n * 1_000_000_000), 0x1d, 0, 7, b'command', b'message1'))" > /var/run/intdash/logger_002.tx ãã©ãŒããã㯠6.5 Agent ãšããã€ã¹ã³ãã¯ã¿ãŒã®éã§äœ¿ããã FIFO ã®ããŒã¿ãã©ãŒããã ãã®6.5.1 å
±éããããŒã6.5.2 ããŒã¿ã¿ã€ãããšã®åºæéšåã«åŸã£ãŠããŸãã ã¿ã€ã ã¹ã¿ã³ãïŒTime SecãTime nanoïŒã¯åºæºæå»ä»¥åã ãšAgentã§åãä»ããªãããã time.clock_gettime(time.CLOCK_MONOTONIC_RAW) ã§çŸåšæå»ãååŸã»èšç®ããŠããŸãã Time Sec以éã®ããŒã¿ãµã€ãºã§ããLengthïŒç¬¬3åŒæ° 26 ïŒã®èšç®ãçµæ§é¢åã§ããã ä»»æã®ã¡ãã»ãŒãžãFIFOã«ãªãã€ã¬ã¯ã Edge Finderã§ãµãŒããŒã§ã®åä¿¡ã確èªããŸãã ãªãã€ã¬ã¯ãã®ãã³ã«åä¿¡ 次ã«åä¿¡åŽã®ãšããžãæ§ç¯ããŸããDockerã§ã³ã³ãããäœæããŠãéä¿¡åŽãšåæ§ã«Agentãã€ã³ã¹ããŒã«ããŸãã åä¿¡åŽã§ã¯ --privileged äžèŠ ãšãã£ã¿ãã€ã³ã¹ããŒã« 4.3 FIFO ããã®èªã¿åºã ãåèã«ã㊠manager.conf ã«Downstreamèšå®ã远å ããŸãã "clients" ã® "type": "control" ã§ãããDownstreamã§ããããšãå®çŸ©ããŠããŸãã Downstreamã®å Žåãéä¿¡å
Edgeã®UUIDã®èšå®ãå¿
èŠã§ããè€æ°ã®ãšããžïŒ2ã€ãŸã§ïŒãèšå®ã§ãã ctlr_ids ãå©çšã§ããŸãã clientsãšloggersã«èšå®ã远å Admin Consoleã§åä¿¡åŽãšããžã®UUIDãæ°ãã«æãåºããèµ·åçšã·ã§ã«ã¹ã¯ãªãããäœæããŠãããŸãã FQDNã»UUIDã»ã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããèšå® éä¿¡åŽã»åä¿¡åŽããããã§èµ·åçšã·ã§ã«ã¹ã¯ãªãããèµ·åããå¥ã¿ãŒããã«ã§åä¿¡åŽã«å
¥ããFIFOãã¡ã€ã«ã cat ã³ãã³ãã§ç£èŠããŠãããŸããéä¿¡åŽã§ããã»ã©ã®ãªãã€ã¬ã¯ããå床å®è¡ããŸãã cat ã³ãã³ãã®çµæã§ãéä¿¡åŽã§ãªãã€ã¬ã¯ãããã¢ã¹ããŒæåé
ç®ïŒããŒã¿IDãããŒã¿ïŒã確èªã§ããŸãã od ã³ãã³ããªã©ã§ãã€ãããŒã¿ãšããŠç¢ºèªããŠãããã§ãããã éä¿¡åŽã®ãªãã€ã¬ã¯ããšã»ãŒåæã«åºåããã é éæç€ºïŒAgent 2 â Agent 2 ã§ã¯ãç¶ããŠAgent 2ã§åæ§ã®æ§æãèšå®ããŠã¿ãŸãã æ§æã¯ããã§ãã Agent 2ããAgent 2ã«Stringãéä¿¡ éä¿¡åŽã®èšå®ãã³ã³ãã agent2up ã«è¿œå ããŸãã ããããããŒã¬ã€ã 4.1. ã¢ããã¹ããªãŒã ã®èšå®ãäœæïŒå€æŽãã ãåèã«é²ããŸãã ãã£ã«ã¿ãªã³ã°ãé©çšãããŠããã«ã¡ã©æ åãšã¯å¥ã«ã¹ããªãŒã ãæ°èŠäœæããŸãããŸããããã€ã¹ã³ãã¯ã¿ãŒèšå®ãäœæããŸãããAgent 1ãšåæ§ã«ãªãã€ã¬ã¯ãã§FIFOãã¡ã€ã«ã«æžã蟌ãããããã€ãã©ã€ã³ã¯äœæããŸããã æ°ã¹ããªãŒã ãšããã€ã¹ã³ãã¯ã¿ãŒèšå®ãäœæ Agent 1ã§ã¯éä¿¡ã»åä¿¡ã®FIFOïŒ logger_XXX.tx ã logger_XXX.rx ïŒãã»ããã§å®çŸ©ããŠããŸããããAgent 2ã§ã¯å¿
èŠãªããã€ã¹ã³ãã¯ã¿ãŒèšå®ã«å¯ŸããŠ1ã€ãã€FIFOãã¡ã€ã«ãèšå®ããŠããŸãã intdash-agentctl run ã§ã¹ããªãŒããŒãèµ·åããŸãã å¥ã¿ãŒããã«ã§ã³ã³ãã agent2up ã«å
¥ããFIFOãã¡ã€ã«ã«python3ã® struct.pack ã®çµæããªãã€ã¬ã¯ãããŸãã python3 -c "import struct, sys, time; s, n = divmod(time.clock_gettime(time.CLOCK_MONOTONIC_RAW), 1); sys.stdout.buffer.write(struct.pack('<LLHHL6s7s8s', int(s), int(n * 1_000_000_000), 6, 7, 8, b'string', b'command', b'message1'))" > /var/run/intdash/uplink-command.fifo Agent 2ã§ã¯ãã©ãŒããããAgent 1ãšã¯ç°ãªããŸãã 5. intdash Edge Agent 2ãšããã€ã¹ã³ãã¯ã¿ãŒã®éã§äœ¿ãããFIFOçšããŒã¿ãã©ãŒããã ãåèã«ããŠããŸããè€æ°é
ç®ã®ããŒã¿é·ã®åèšé
ç®ããªããªã£ããããAgent 1ãããã€ãæ°æå®ã楜ã«ãªããŸããã ãªãã€ã¬ã¯ãã®ãã³ã«åä¿¡ ã§ã¯ãAgent 2ã§ãåä¿¡åŽã®ãšããžãæ§ç¯ããŸããDockerã§ã³ã³ãããäœæããŠãéä¿¡åŽãšåæ§ã«Agentãã€ã³ã¹ããŒã«ããŸãã ãã®ãã ãã¯ããæ
£ãããã® Downstreamãšããã€ã¹ã³ãã¯ã¿ãŒãèšå®ããŠãããŸãã Downstreamãšããã€ã¹ã³ãã¯ã¿ãŒèšå® åä¿¡åŽãšããž agent2down ãAdmin Consoleã§æãåºããæ¥ç¶ãèšå®ããŸãã ãã¡ããæ
£ãããã® /etc/init.d/intdash-agentd start ã§ã¹ããªãŒããŒãèµ·åããŸãã èµ·åçŽåŸ éä¿¡åŽã§ãã¹ããªãŒããŒãèµ·åããŸããå¥ã¿ãŒããã«ã§åä¿¡åŽã«å
¥ããFIFOãã¡ã€ã«ã cat ã³ãã³ãã§ç£èŠããŠãããŸãã éä¿¡åŽã§ããã»ã©ã®ãªãã€ã¬ã¯ããå床å®è¡ããŸãã éä¿¡åŽã®ãªãã€ã¬ã¯ããšã»ãŒåæã«åºåããã Agent 2çšã®ãã©ãŒãããã§åºåãããŠããã®ãããããŸãã é éæç€ºïŒAgent 2 â Agent 1 次ã¯Agent 1/2䜵çšãæ³å®ããé éæç€ºã®èšå®ã確èªããŠã¿ãŸãã Agent 1/2åæ¹ã®ããŒã¿ãåãåããããã«åä¿¡åŽã«èšå®ã远å ããŸãããŸãã¯Agent 1ããã ã©ãããã©ãã«éä¿¡ããŠããã®ããããããã£ãŠããŸããæ§æã¯ãã¡ãã§ãã Agent 2ããAgent 1ã«Stringãéä¿¡ Agent 2ã«ã¯ 4.3. iSCP v1ãšäºææ§ãæãããããã®ããŒã¿åç§° ãçšæãããŠããŸããå®ã¯æ¬èšäºã¯ããã«åããããŒã¿åç§°ã v1/<ãã£ã³ãã«> ã§å§ããŠããŸãã®ã§ãèšå®ã¯æäœéã§æžã¿ãŸãã ã³ã³ãã agent1down ã® manager.conf ã® ctlr_ids ã«ãã³ã³ãã agent2up ã®UUIDã远å ããŸãããã£ã³ãã«ïŒããŒã¿åç§°æ¥é èŸãããŒã¿IDãããŒã¿ã¿ã€ãã¯ä»åããããŠãããããä¿®æ£äžèŠã§ãã éä¿¡åŽã®UUIDã远å ã³ã³ãã agent2up ã®ã¹ããªãŒããŒãã³ã³ãã agent1down ã®èµ·åçšã·ã§ã«ã¹ã¯ãªãããèµ·åãã agent1down ã®FIFOã cat ããŠãããŸãã agent2up ã§FIFOã«ã¡ãã»ãŒãžããªãã€ã¬ã¯ãããŸãã Agent 2ããéãããããŒã¿ããAgent 1âAgent 1ã®ãšããšåãããAgent 1圢åŒã§åºåãããŠããã®ãããããŸãã Agent 2ã®ã¡ãã»ãŒãžãAgent 1圢åŒã§åºå é éæç€ºïŒAgent 1 â Agent 2 æåŸã¯ãAgent 2ã®åä¿¡åŽã«Agent 1ã®èšå®ã远å ããŸãã æ§æã¯ãã¡ãã§ãã Agent 1ããAgent 2ã«Stringãéä¿¡ ã³ã³ãã agent2down ã«Downstreamèšå®ã远å ããŸãã Downstreamã® src_edge_uuid ãšã㊠agent1up ã®UUIDã远å ããŠããŸãã filters é
äžã«è€æ°ã®éä¿¡åŽãšããžãèšå®å¯èœ ã³ã³ãã agent1up ã®èµ·åçšã·ã§ã«ã¹ã¯ãªãããã³ã³ãã agent2down ã®ã¹ããªãŒããŒãèµ·åãã agent2down ã®FIFOã cat ããŠãããŸãã agent1up ã§FIFOã«ã¡ãã»ãŒãžããªãã€ã¬ã¯ãããŸãã Agent 1ã®ã¡ãã»ãŒãžãAgent 2圢åŒã§åºå ãã®ããã«ãAgent 2ã¯ãã©ãŒããããéãAgent 1ãšãéåä¿¡ãã§ãããããäºææ§ãåããŠããŸãã ãŸãšã é·ã
ãšãä»ãåãããããšãããããŸããã Agent 1ã§ã¯ãAgentèµ·åãšã¹ããªãŒã éå§ãUpstreamãšDownstreamãããã«ããã€ã¹ã³ãã¯ã¿ãŒå
ã®ååŠçããäžç·ããã«ãªã£ãŠããŠæ§ç¯ã»éçšãã¥ããé¢ããããŸããã Agent 2ã§ã¯ããããããã¡ããšæå³åãããšã«æŽçã»åé¢ãããåå¥ã®ç®¡çé
ç®ãšããŠåå®çŸ©ãããããšã§æ§é ãçè§£ãããããåãåããããããªããŸããã ä»åã¯ã玹ä»ããããŸããã§ããããAgent 2ã«ã¯é
å»¶ã¢ããããŒãïŒAgent 1ã®åéïŒãªã©ã®æ©èœããããŸãããã²å®éã«ã䜿ãããã ããintdashã®äœé
å»¶æ§ã»æäœæ§ãäœæããã ããã°ãšæããŸãã ãŸããAgent以å€ã«ãaptpodã®ãããã¯ãã¯ãã©ãã·ã¥ã¢ããããŠãããŸãã®ã§ãä»åŸããäŒãããŠãããããšæã£ãŠããŸãã AppendixïŒèšå®æ
å ± åèãŸã§ã«æçµçãªèšå®æ
å ±ãæ²èŒããŸãã Agent 2èšå®ã¯ããããããŒã¬ã€ã 12. èšå®ãæžãåºãïŒèªã¿èŸŒã ã®åºåçµæã§ãã å
šäœåãåæ² ã³ã³ãã agent1up /root/manager.conf { "manager": { "meas_root": "$APPDIR/intdash/meas", "meas_root_volatile": "$RUNDIR/intdash/meas", "rawdir": "$APPDIR/intdash/raw", "basetime": "$RUNDIR/intdash/basetime", "stat": "$RUNDIR/intdash/manager.stat", "logger_stat": "$RUNDIR/intdash/logger_%03hhu.stat", "process_stat": "$RUNDIR/intdash/process.stat", "intdash_stat": "$RUNDIR/intdash/intdash.stat", "network_stat": "$RUNDIR/intdash/network.stat", "system_stat": "$RUNDIR/intdash/system.stat", "wwan_stat": "$RUNDIR/intdash/wwan.stat", "workdirs": [ "$APPDIR/intdash/meas", "$RUNDIR/intdash" ], "filters": [ { "name": "sampling", "channel": "1", "target": "realtime", "setting": [ { "key": "rate", "value": "1000" } ] } ] }, "clients": [ { "protocol": "mod_websocket.v2", "type": "realtime", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "auth_path": "$APPDIR/intdash/.auth", "project_uuid": "", "connection": { "host": "$SERVER", "path": "/api/v1/ws/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" }, { "protocol": "mod_http", "type": "resend", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "project_uuid": "", "auth_path": "$APPDIR/intdash/.auth", "connection": { "host": "$SERVER", "path": "/api/v1/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" } ], "loggers": [ { "path": "", "connections": [ { "channel": 255, "fifo_rx": "$RUNDIR/intdash/logger_XXX.rx", "fifo_tx": "$RUNDIR/intdash/logger_XXX.tx" } ], "details": { "plugin": "status", "plugin_dir": "$LIBDIR/plugins", "plugin_arg": { "stintd": { "meas_root": "$RUNDIR/intdash/meas" }, "stsys": { "storage_dir": "/" } } } }, { "path": "/opt/vm2m/sbin/intdash-edge-logger", "conf": "/root/logger.conf.mjpeg", "connections": [ { "channel": 1, "fifo_rx": "$RUNDIR/intdash/logger_001.rx", "fifo_tx": "$RUNDIR/intdash/logger_001.tx" } ] }, { "connections": [ { "channel": 2, "fifo_rx": "$RUNDIR/intdash/logger_002.rx", "fifo_tx": "$RUNDIR/intdash/logger_002.tx" } ], "details": { "plugin": "fifo" } } ] } /root/logger.conf.mjpeg { "type": "mjpeg", "data_handler": { "path": "/dev/video0", "baudrate": 15, "camera_width": 640, "camera_height": 480, "camera_hwencodedelay_msec": 100 }, "manager_client": { "tx_path": "/var/run/intdash/logger_001.tx", "rx_path": "/var/run/intdash/logger_001.rx" }, "status": "/var/run/intdash/logger_001.stat", "basetime": "/var/run/intdash/basetime" } ã³ã³ãã agent2up intdash-agentd config show connection: server_url: https://xxx.intdash.jp project_uuid: 00000000-0000-0000-0000-000000000000 edge_uuid: 84db287d-d763-4b40-a9a2-2d2824a8b803 client_secret: xxx transport: protocol: websocket upstream: - id: recoverable enabled: true recover: true persist: true qos: unreliable flush_policy: interval flush_interval: 5 - id: recoverable2 enabled: true recover: true persist: true qos: unreliable flush_policy: interval flush_interval: 5 downstream: [] device_connectors_upstream: - id: h264 data_name_prefix: v1/1/ dest_ids: - src_h264 enabled: true format: iscp-v2-compat ipc: type: fifo path: /var/run/intdash/h264.fifo launch: cmd: device-connector-intdash args: - --config - /etc/dc_conf/h264-up.yml environment: - DC_V4L2_SRC_CONF_PATH=/dev/video0 - DC_V4L2_SRC_WIDTH=1920 - DC_V4L2_SRC_HEIGHT=1080 - DC_V4L2_SRC_FPS=15 - DC_PRINT_LOG_FILTER_CONF_TAG=h264 - DC_FILE_SINK_CONF_PATH=/var/run/intdash/h264.fifo - id: command data_name_prefix: v1/2 dest_ids: - recoverable2 enabled: true format: iscp-v2-compat ipc: type: fifo path: /var/run/intdash/uplink-command.fifo device_connectors_downstream: [] filters_upstream: - id: sampling enabled: true type: sampling target: dest_ids: - src_h264 interval_ms: 1000 name: "" src_id: "" type: h264 change_to: dest_id: recoverable filters_downstream: [] deferred_upload: priority: same_as_realtime limit_data_storage: true data_storage_capacity: 102400 /etc/dc_conf/jpeg-up.yml tasks: - id: 1 element: v4l2-src conf: path: $(DC_V4L2_SRC_CONF_PATH) type: jpeg width: $(DC_V4L2_SRC_WIDTH) height: $(DC_V4L2_SRC_HEIGHT) fps: $(DC_V4L2_SRC_FPS) - id: 2 element: jpeg-split-filter from: [ [1] ] - id: 3 element: iscp-v2-compat-filter from: [ [2] ] conf: timestamp: stamp: clock_id: CLOCK_MONOTONIC convert_rule: jpeg - id: 4 element: print-log-filter from: [ [3] ] conf: interval_ms: 10000 tag: $(DC_PRINT_LOG_FILTER_CONF_TAG) output: stderr - id: 5 element: file-sink from: [ [4] ] conf: flush_size: 100 path: $(DC_FILE_SINK_CONF_PATH) /etc/dc_conf/h264-up.yml tasks: - id: 1 element: v4l2-src conf: path: $(DC_V4L2_SRC_CONF_PATH) type: h264 width: $(DC_V4L2_SRC_WIDTH) height: $(DC_V4L2_SRC_HEIGHT) fps: $(DC_V4L2_SRC_FPS) - id: 2 element: h264-split-filter from: [ [1] ] conf: clock_id: CLOCK_MONOTONIC - id: 3 element: print-log-filter from: [ [2] ] conf: interval_ms: 10000 tag: $(DC_PRINT_LOG_FILTER_CONF_TAG) output: stderr - id: 4 element: file-sink from: [ [3] ] conf: flush_size: 100 path: $(DC_FILE_SINK_CONF_PATH) ã³ã³ãã agent1down /root/manager.conf { "manager": { "meas_root": "$APPDIR/intdash/meas", "meas_root_volatile": "$RUNDIR/intdash/meas", "rawdir": "$APPDIR/intdash/raw", "basetime": "$RUNDIR/intdash/basetime", "stat": "$RUNDIR/intdash/manager.stat", "logger_stat": "$RUNDIR/intdash/logger_%03hhu.stat", "process_stat": "$RUNDIR/intdash/process.stat", "intdash_stat": "$RUNDIR/intdash/intdash.stat", "network_stat": "$RUNDIR/intdash/network.stat", "system_stat": "$RUNDIR/intdash/system.stat", "wwan_stat": "$RUNDIR/intdash/wwan.stat", "workdirs": [ "$APPDIR/intdash/meas", "$RUNDIR/intdash" ], "filters": [] }, "clients": [ { "protocol": "mod_websocket.v2", "type": "realtime", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "auth_path": "$APPDIR/intdash/.auth", "project_uuid": "", "connection": { "host": "$SERVER", "path": "/api/v1/ws/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" }, { "protocol": "mod_http", "type": "resend", "my_token": "$TOKEN", "my_id": "$UUID", "my_secret": "$SECRET", "project_uuid": "", "auth_path": "$APPDIR/intdash/.auth", "connection": { "host": "$SERVER", "path": "/api/v1/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "fast_net_check_cmd":"$BINDIR/intdash-edge-networkd.sh -q -t" }, { "protocol": "mod_websocket.v2", "type": "control", "my_id": "$UUID", "my_secret": "$SECRET", "project_uuid": "", "auth_path": "$APPDIR/intdash/.auth", "connection": { "host": "$SERVER", "path": "/api/v1/ws/measurements" }, "fifo_rx": "$RUNDIR/intdash/client_%s.rx", "fifo_tx": "$RUNDIR/intdash/client_%s.tx", "path": "$SBINDIR/intdash-edge-client", "stat": "$RUNDIR/intdash/client_%s.stat", "down_dst_id": "00000000-0000-0000-0000-000000000000", "ctlr_ids": [ "e5e156b5-35f3-40ec-9993-8d6d812428c9", "84db287d-d763-4b40-a9a2-2d2824a8b803" ], "ctlr_flts":[ { "channel": 2, "dtype": 10, "ids": ["command"] } ] } ], "loggers": [ { "path": "", "connections": [ { "channel": 255, "fifo_rx": "$RUNDIR/intdash/logger_XXX.rx", "fifo_tx": "$RUNDIR/intdash/logger_XXX.tx" } ], "details": { "plugin": "status", "plugin_dir": "$LIBDIR/plugins", "plugin_arg": { "stintd": { "meas_root": "$RUNDIR/intdash/meas" }, "stsys": { "storage_dir": "/" } } } }, { "path": "", "connections": [ { "channel": 2, "channel_rx": -1, "receive_basetime": true, "fifo_rx": "$RUNDIR/intdash/logger_002.rx", "fifo_tx": "$RUNDIR/intdash/logger_002.tx" } ], "details": { "plugin": "fifo" } } ] } ã³ã³ãã agent2down intdash-agentd config show connection: server_url: https://xxx.intdash.jp project_uuid: 00000000-0000-0000-0000-000000000000 edge_uuid: 7e340e6a-ad9f-49d7-8e20-0694d906bbd8 client_secret: xxx transport: protocol: websocket upstream: [] downstream: - id: down enabled: true dest_ids: - src_command filters: - src_edge_uuid: 84db287d-d763-4b40-a9a2-2d2824a8b803 data_filters: - type: string name: v1/2/command - src_edge_uuid: e5e156b5-35f3-40ec-9993-8d6d812428c9 data_filters: - type: string name: v1/2/command device_connectors_upstream: [] device_connectors_downstream: - id: src_command enabled: true format: iscp-v2-compat ipc: type: fifo path: /var/run/intdash/downlink-command.fifo filters_upstream: [] filters_downstream: [] deferred_upload: priority: same_as_realtime limit_data_storage: true data_storage_capacity: 102400