Video viewer webrtc stream get freeze

Hi,
Thank you for your work on Jetson. I'm building an AI server that runs on a NX Orin. But when I ran video-viewer with a file as an input and webrtc output with this command
./aarch64/bin/video-viewer file:///home/aiserver/Software/cc/videos/helicopter.mp4 webrtc://@:8686/output --headless
The stream appears to be glitching and freezing, especially after a long time ( like after a minute).
What do you think is the reason for this delay and is there any way that I can debug or solve this issue? (I always want to get the latest frame possible with perhaps a lower bitrate/image quality)
https://github.com/dusty-nv/jetson-inference/assets/53960609/6d3f7f14-ee9b-4b4e-8b87-c542475b502a
Here is the full log:
./aarch64/bin/video-viewer file:///home/aiserver/Software/cc/videos/helicopter.mp4 webrtc://@:8686/output --headless --bitrate=6000000 --input-loop=-1
[gstreamer] initialized gstreamer, version <IP_ADDRESS>
[gstreamer] gstDecoder -- creating decoder for /home/aiserver/Software/cc/videos/helicopter.mp4
[gstreamer] GST_LEVEL_WARNING GstFileSrc basesrc
              gstbasesrc.c:3583  gst_base_src_start_complete
              pad not activated yet
[gstreamer] GST_LEVEL_WARNING GstFileSrc basesrc
              gstbasesrc.c:3583  gst_base_src_start_complete
              pad not activated yet
[gstreamer] GST_LEVEL_WARNING   qtdemux
              qtdemux_types.c:233  qtdemux_type_get
              unknown QuickTime node type Xtra
[gstreamer] GST_LEVEL_WARNING GstQTDemux qtdemux
              qtdemux.c:3031  qtdemux_parse_trex
              failed to find fragment defaults for stream 1
[gstreamer] GST_LEVEL_WARNING GstQTDemux qtdemux
              qtdemux.c:3031  qtdemux_parse_trex
              failed to find fragment defaults for stream 2
Opening in BLOCKING MODE
[gstreamer] GST_LEVEL_WARNING GstPad v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:4447  gst_v4l2_object_probe_caps
              Failed to probe pixel aspect ratio with VIDIOC_CROPCAP: Unknown error -1
[gstreamer] GST_LEVEL_WARNING (null) v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:2388  gst_v4l2_object_add_interlace_mode
              Failed to determine interlace mode
[gstreamer] GST_LEVEL_WARNING (null) v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:2388  gst_v4l2_object_add_interlace_mode
              Failed to determine interlace mode
[gstreamer] GST_LEVEL_WARNING (null) v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:2388  gst_v4l2_object_add_interlace_mode
              Failed to determine interlace mode
NvMMLiteOpen : Block : BlockType = 261
NVMEDIA: Reading vendor.tegra.display-size : status: 6
NvMMLiteBlockCreate : Block : BlockType = 261
[gstreamer] GST_LEVEL_WARNING GstPad v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:4447  gst_v4l2_object_probe_caps
              Failed to probe pixel aspect ratio with VIDIOC_CROPCAP: Unknown error -1
[gstreamer] GST_LEVEL_WARNING (null) v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:2388  gst_v4l2_object_add_interlace_mode
              Failed to determine interlace mode
[gstreamer] GST_LEVEL_WARNING (null) v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:2388  gst_v4l2_object_add_interlace_mode
              Failed to determine interlace mode
[gstreamer] GST_LEVEL_WARNING (null) v4l2
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2object.c:2388  gst_v4l2_object_add_interlace_mode
              Failed to determine interlace mode
[gstreamer] GST_LEVEL_WARNING nvv4l2decoder v4l2videodec
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2videodec.c:1673  gst_v4l2_video_dec_decide_allocation
              Duration invalid, not setting latency
[gstreamer] GST_LEVEL_WARNING GstNvV4l2BufferPool v4l2bufferpool
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2bufferpool.c:1065  gst_v4l2_buffer_pool_start
              Uncertain or not enough buffers, enabling copy threshold
[gstreamer] GST_LEVEL_WARNING GstNvV4l2BufferPool v4l2bufferpool
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-v4l2/gst-v4l2/gstv4l2bufferpool.c:1512  gst_v4l2_buffer_pool_dqbuf
              Driver should never set v4l2_buffer.field to ANY
[gstreamer] gstDecoder -- discovered video resolution: 1920x1080  (framerate 30.000000 Hz)
[gstreamer] gstDecoder -- discovered video caps:  video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, level=(string)4, profile=(string)constrained-baseline, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
[gstreamer] gstDecoder -- pipeline string:
[gstreamer] filesrc location=/home/aiserver/Software/cc/videos/helicopter.mp4 ! qtdemux ! queue ! h264parse ! omxh264dec name=decoder ! video/x-raw(memory:NVMM) ! appsink name=mysink
[gstreamer] GST_LEVEL_WARNING   omx
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-omx/omx/gstomx.c:2826  plugin_init
              Failed to load configuration file: Valid key file could not be found in search dirs (searched in: /home/aiserver/.config:/etc/xdg as per GST_OMX_CONFIG_DIR environment variable, the xdg user config directory (or XDG_CONFIG_HOME) and the system config directory (or XDG_CONFIG_DIRS)
[video]  created gstDecoder from file:///home/aiserver/Software/cc/videos/helicopter.mp4
------------------------------------------------
gstDecoder video options:
------------------------------------------------
  -- URI: file:///home/aiserver/Software/cc/videos/helicopter.mp4
     - protocol:  file
     - location:  /home/aiserver/Software/cc/videos/helicopter.mp4
     - extension: mp4
  -- deviceType: file
  -- ioType:     input
  -- codec:      H264
  -- codecType:  omx
  -- width:      1920
  -- height:     1080
  -- frameRate:  30
  -- numBuffers: 2
  -- zeroCopy:   true
  -- flipMethod: none
  -- loop:       -1
------------------------------------------------
video viewer
[gstreamer] gstEncoder -- codec not specified, defaulting to H.264
[gstreamer] gstEncoder -- pipeline launch string:
[gstreamer] appsrc name=mysource is-live=true do-timestamp=true format=3 ! omxh264enc name=encoder bitrate=6000000 insert-sps-pps=1 insert-vui=1 ! video/x-h264 ! rtph264pay config-interval=1 ! application/x-rtp,media=video,encoding-name=H264,clock-rate=90000,payload=96 ! tee name=videotee ! queue ! fakesink
[webrtc] WebRTC server started @ http://aiserver:8686
[webrtc] WebRTC server thread running...
[webrtc] websocket route added /output
[video]  created gstEncoder from webrtc://@:8686/output
------------------------------------------------
gstEncoder video options:
------------------------------------------------
  -- URI: webrtc://@:8686/output
     - protocol:  webrtc
     - location:  <IP_ADDRESS>
     - port:      8686
  -- deviceType: ip
  -- ioType:     output
  -- codec:      H264
  -- codecType:  omx
  -- frameRate:  30
  -- bitRate:    6000000
  -- numBuffers: 2
  -- zeroCopy:   true
  -- latency     0
------------------------------------------------
[gstreamer] opening gstDecoder for streaming, transitioning pipeline to GST_STATE_PLAYING
[gstreamer] GST_LEVEL_WARNING GstFileSrc basesrc
              gstbasesrc.c:3583  gst_base_src_start_complete
              pad not activated yet
[gstreamer] gstreamer changed state from NULL to READY ==> mysink
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter1
[gstreamer] gstreamer changed state from NULL to READY ==> decoder
[gstreamer] gstreamer changed state from NULL to READY ==> h264parse1
[gstreamer] gstreamer changed state from NULL to READY ==> queue0
[gstreamer] gstreamer changed state from NULL to READY ==> qtdemux1
[gstreamer] gstreamer changed state from NULL to READY ==> filesrc0
[gstreamer] gstreamer changed state from NULL to READY ==> pipeline0
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter1
[gstreamer] gstreamer changed state from READY to PAUSED ==> decoder
[gstreamer] gstreamer changed state from READY to PAUSED ==> h264parse1
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue0
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer stream status CREATE ==> sink
[gstreamer] gstreamer changed state from READY to PAUSED ==> qtdemux1
[gstreamer] gstreamer changed state from READY to PAUSED ==> filesrc0
[gstreamer] gstreamer stream status ENTER ==> sink
[gstreamer] GST_LEVEL_WARNING   qtdemux
              qtdemux_types.c:233  qtdemux_type_get
              unknown QuickTime node type Xtra
[gstreamer] GST_LEVEL_WARNING GstQTDemux qtdemux
              qtdemux.c:3031  qtdemux_parse_trex
              failed to find fragment defaults for stream 1
[gstreamer] GST_LEVEL_WARNING GstQTDemux qtdemux
              qtdemux.c:3031  qtdemux_parse_trex
              failed to find fragment defaults for stream 2

(video-viewer:23711): GStreamer-CRITICAL **: 09:13:16.625: gst_caps_is_empty: assertion 'GST_IS_CAPS (caps)' failed

(video-viewer:23711): GStreamer-CRITICAL **: 09:13:16.625: gst_caps_truncate: assertion 'GST_IS_CAPS (caps)' failed

(video-viewer:23711): GStreamer-CRITICAL **: 09:13:16.626: gst_caps_fixate: assertion 'GST_IS_CAPS (caps)' failed

(video-viewer:23711): GStreamer-CRITICAL **: 09:13:16.626: gst_caps_get_structure: assertion 'GST_IS_CAPS (caps)' failed

(video-viewer:23711): GStreamer-CRITICAL **: 09:13:16.626: gst_structure_get_string: assertion 'structure != NULL' failed
[gstreamer] GST_LEVEL_ERROR   GstOMXH264Dec-omxh264dec omxvideodec
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-omx/omx/gstomxvideodec.c:3274  gst_omx_video_dec_negotiate
              Invalid caps: (NULL)

(video-viewer:23711): GStreamer-CRITICAL **: 09:13:16.627: gst_mini_object_unref: assertion 'mini_object != NULL' failed
NvMMLiteOpen : Block : BlockType = 261
NVMEDIA: Reading vendor.tegra.display-size : status: 6
NvMMLiteBlockCreate : Block : BlockType = 261
Allocating new output: 1920x1088 (x 10), ThumbnailMode = 0
OPENMAX: HandleNewStreamFormat: 3605: Send OMX_EventPortSettingsChanged: nFrameWidth = 1920, nFrameHeight = 1080
[gstreamer] gstDecoder -- onPreroll()
[gstreamer] gstreamer message stream-start ==> pipeline0
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer message duration-changed ==> h264parse1
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ /\ AVC", bitrate=(uint)11907565;
[gstreamer] gstreamer mysink taglist, datetime=(datetime)2021-12-14T16:56:13Z, container-format=(string)"ISO\ MP4/M4A";
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565;
[gstreamer] gstreamer changed state from READY to PAUSED ==> mysink
[gstreamer] gstBufferManager -- map buffer size was less than max size (1008 vs 3110400)
[gstreamer] gstreamer changed state from READY to PAUSED ==> pipeline0
[gstreamer] gstreamer message async-done ==> pipeline0
[gstreamer] gstreamer message new-clock ==> pipeline0
[gstreamer] gstBufferManager recieve caps:  video/x-raw(memory:NVMM), format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)30/1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> mysink
[gstreamer] gstBufferManager -- recieved first frame, codec=H264 format=nv12 width=1920 height=1080 size=3110400
[gstreamer] gstBufferManager -- recieved NVMM memory
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> decoder
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> h264parse1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> qtdemux1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> filesrc0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> pipeline0
[cuda]   cudaAllocMapped 8 bytes, CPU 0x2032ba000 GPU 0x2032ba000
[cuda]   cudaAllocMapped 8 bytes, CPU 0x2032ba200 GPU 0x2032ba200
[cuda]   allocated 2 ring buffers (8 bytes each, 16 bytes total)
nvbuf_utils: dmabuf_fd 1071 mapped entry NOT found
nvbuf_utils: NvReleaseFd Failed... Exiting...
nvbuf_utils: dmabuf_fd 1069 mapped entry NOT found
nvbuf_utils: NvReleaseFd Failed... Exiting...
[cuda]   cudaAllocMapped 6220800 bytes, CPU 0x203afa000 GPU 0x203afa000
[cuda]   cudaAllocMapped 6220800 bytes, CPU 0x2040e9000 GPU 0x2040e9000
[cuda]   allocated 2 ring buffers (6220800 bytes each, 12441600 bytes total)
video-viewer:  captured 0 frames (1920x1080)
nvbuf_utils: dmabuf_fd 1073 mapped entry NOT found
nvbuf_utils: NvReleaseFd Failed... Exiting...
[cuda]   cudaAllocMapped 3110400 bytes, CPU 0x2034ba000 GPU 0x2034ba000
[cuda]   cudaAllocMapped 3110400 bytes, CPU 0x2046d8000 GPU 0x2046d8000
[cuda]   allocated 2 ring buffers (3110400 bytes each, 6220800 bytes total)
[gstreamer] gstEncoder -- starting pipeline, transitioning to GST_STATE_PLAYING
[gstreamer] gstEncoder -- queued state to GST_STATE_PLAYING => GST_STATE_CHANGE_ASYNC
[gstreamer] gstreamer changed state from NULL to READY ==> fakesink0
[gstreamer] gstreamer changed state from NULL to READY ==> queue1
[gstreamer] gstreamer changed state from NULL to READY ==> videotee
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter3
[gstreamer] gstreamer changed state from NULL to READY ==> rtph264pay0
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter2
[gstreamer] gstreamer changed state from NULL to READY ==> encoder
[gstreamer] gstreamer changed state from NULL to READY ==> mysource
[gstreamer] gstreamer changed state from NULL to READY ==> pipeline1
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue1
[gstreamer] gstreamer changed state from READY to PAUSED ==> videotee
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter3
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> rtph264pay0
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter2
[gstreamer] gstreamer changed state from READY to PAUSED ==> encoder
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> mysource
[gstreamer] gstreamer changed state from READY to PAUSED ==> pipeline1
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer message new-clock ==> pipeline1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> videotee
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter3
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtph264pay0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter2
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> encoder
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> mysource
nvbuf_utils: dmabuf_fd 1075 mapped entry NOT found
nvbuf_utils: NvReleaseFd Failed... Exiting...
nvbuf_utils: dmabuf_fd 1077 mapped entry NOT found
nvbuf_utils: NvReleaseFd Failed... Exiting...
nvbuf_utils: dmabuf_fd 1079 mapped entry NOT found
nvbuf_utils: NvReleaseFd Failed... Exiting...
[gstreamer] gstEncoder -- new caps: video/x-raw, width=1920, height=1080, format=(string)I420, framerate=30/1
Framerate set to : 30 at NvxVideoEncoderSetParameterNvMMLiteOpen : Block : BlockType = 4
===== NVMEDIA: NVENC =====
video-viewer:  captured 1 frames (1920x1080)
NvMMLiteBlockCreate : Block : BlockType = 4
[gstreamer] GST_LEVEL_WARNING GstOMXH264Enc-omxh264enc omxvideoenc
              /dvs/git/dirty/git-master_linux/3rdparty/gst/gst-omx/omx/gstomxvideoenc.c:1860  gst_omx_video_enc_set_format
              Error setting temporal_tradeoff 0 : Vendor specific error (0x00000001)
[gstreamer] gstEncoder -- appsrc signalling enough data
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer stream status ENTER ==> src
video-viewer:  captured 2 frames (1920x1080)
H264: Profile = 66, Level = 40
NVMEDIA_ENC: bBlitMode is set to TRUE
video-viewer:  captured 3 frames (1920x1080)
[gstreamer] gstreamer message stream-start ==> pipeline1
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)10789680, maximum-bitrate=(uint)10789680;
video-viewer:  captured 4 frames (1920x1080)
[gstreamer] gstreamer changed state from READY to PAUSED ==> fakesink0
[gstreamer] gstreamer message async-done ==> pipeline1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> fakesink0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> pipeline1
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)3829680, maximum-bitrate=(uint)10789680;
video-viewer:  captured 5 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)3010320, maximum-bitrate=(uint)10789680;
video-viewer:  captured 6 frames (1920x1080)
video-viewer:  captured 7 frames (1920x1080)
video-viewer:  captured 8 frames (1920x1080)
video-viewer:  captured 9 frames (1920x1080)
video-viewer:  captured 10 frames (1920x1080)
video-viewer:  captured 11 frames (1920x1080)
video-viewer:  captured 12 frames (1920x1080)
video-viewer:  captured 13 frames (1920x1080)
video-viewer:  captured 14 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)2236800, maximum-bitrate=(uint)10789680;
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)2236800, maximum-bitrate=(uint)11034000;
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)2236800, maximum-bitrate=(uint)65089680;
video-viewer:  captured 25 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)1505760, maximum-bitrate=(uint)65089680;
video-viewer:  captured 50 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)1505760, maximum-bitrate=(uint)65120640;
video-viewer:  captured 75 frames (1920x1080)
video-viewer:  captured 100 frames (1920x1080)
video-viewer:  captured 125 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)1433520, maximum-bitrate=(uint)65120640;
video-viewer:  captured 150 frames (1920x1080)
video-viewer:  captured 175 frames (1920x1080)
[webrtc] websocket /output -- new connection opened by <IP_ADDRESS> (peer_id=0)
[webrtc] new WebRTC peer connecting (<IP_ADDRESS>, peer_id=0)

(video-viewer:23711): GLib-GObject-WARNING **: 09:13:23.382: g_object_set_is_valid_property: object class 'GstWebRTCBin' has no property named 'latency'

(video-viewer:23711): GLib-GObject-WARNING **: 09:13:23.383: g_object_set_is_valid_property: object class 'WebRTCTransceiver' has no property named 'direction'
[gstreamer] gstreamer changed state from NULL to READY ==> queue-0
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue-0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue-0
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from NULL to READY ==> rtpbin
[gstreamer] gstreamer changed state from NULL to READY ==> webrtcbin-0
[gstreamer] gstreamer changed state from READY to PAUSED ==> rtpbin
[gstreamer] gstreamer changed state from READY to PAUSED ==> webrtcbin-0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpbin
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> webrtcbin-0
[webrtc] GStreamer WebRTC -- onNegotiationNeeded()
video-viewer:  captured 200 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstPad GST_PADS
              gstpad.c:4226  gst_pad_peer_query
              could not send sticky events
[gstreamer] GST_LEVEL_WARNING GstPad GST_PADS
              gstpad.c:4226  gst_pad_peer_query
              could not send sticky events
[webrtc] GStreamer WebRTC -- onCreateOffer()
[webrtc] negotiation offer created:
v=0
o=-<PHONE_NUMBER>703445696 0 IN IP4 <IP_ADDRESS>
s=-
t=0 0
a=ice-options:trickle
a=msid-semantic:WMS webrtcbin-0
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 <IP_ADDRESS>
a=setup:actpass
a=ice-ufrag:X14dK5fZJCw9rL+FV2lK0uXQnJFGeXWz
a=ice-pwd:PGn86OaHdnjVxczRy6L1nnovUTzYOt20
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack pli
a=framerate:30
a=fmtp:96 packetization-mode=1;profile-level-id=424015;sprop-parameter-sets=Z0JAKJWgHgCJ+WEAAAMAAQAAAwA8jwiEag==,aM48gA==
a=ssrc:3885686574 msid:user3754559267@host-2cc00e2c webrtctransceiver0
a=ssrc:3885686574 cname:user3754559267@host-2cc00e2c
a=mid:video0
a=fingerprint:sha-256 DC:8D:D0:55:78:A6:87:A5:E0:12:6F:B8:1D:F8:64:62:93:D4:3F:5D:DB:4D:0B:43:61:88:A4:CE:14:5F:50:DC

[webrtc] sending offer for /output to <IP_ADDRESS> (peer_id=0):
{"type":"sdp","data":{"type":"offer","sdp":"v=0\r\no=-<PHONE_NUMBER>703445696 0 IN IP4 <IP_ADDRESS>\r\ns=-\r\nt=0 0\r\na=ice-options:trickle\r\na=msid-semantic:WMS webrtcbin-0\r\nm=video 9 UDP/TLS/RTP/SAVPF 96\r\nc=IN IP4 <IP_ADDRESS>\r\na=setup:actpass\r\na=ice-ufrag:X14dK5fZJCw9rL+FV2lK0uXQnJFGeXWz\r\na=ice-pwd:PGn86OaHdnjVxczRy6L1nnovUTzYOt20\r\na=sendrecv\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 H264/90000\r\na=rtcp-fb:96 nack pli\r\na=framerate:30\r\na=fmtp:96 packetization-mode=1;profile-level-id=424015;sprop-parameter-sets=Z0JAKJWgHgCJ+WEAAAMAAQAAAwA8jwiEag==,aM48gA==\r\na=ssrc:3885686574 msid:user3754559267@host-2cc00e2c webrtctransceiver0\r\na=ssrc:3885686574 cname:user3754559267@host-2cc00e2c\r\na=mid:video0\r\na=fingerprint:sha-256 DC:8D:D0:55:78:A6:87:A5:E0:12:6F:B8:1D:F8:64:62:93:D4:3F:5D:DB:4D:0B:43:61:88:A4:CE:14:5F:50:DC\r\n"}}
[gstreamer] gstreamer changed state from NULL to READY ==> rtpssrcdemux0
[gstreamer] gstreamer changed state from READY to PAUSED ==> rtpssrcdemux0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpssrcdemux0
[gstreamer] gstreamer changed state from NULL to READY ==> rtpsession0
[gstreamer] gstreamer changed state from READY to PAUSED ==> rtpsession0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpsession0
[gstreamer] gstreamer changed state from NULL to READY ==> funnel4
[gstreamer] gstreamer changed state from READY to PAUSED ==> funnel4
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel4
[gstreamer] gstreamer changed state from NULL to READY ==> funnel5
[gstreamer] gstreamer changed state from READY to PAUSED ==> funnel5
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel5
[gstreamer] gstreamer changed state from NULL to READY ==> rtpstorage0
[gstreamer] gstreamer changed state from READY to PAUSED ==> rtpstorage0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> rtpstorage0
[gstreamer] gstreamer changed state from NULL to READY ==> nicesink2
[gstreamer] gstreamer changed state from NULL to READY ==> nicesink1
[gstreamer] gstreamer changed state from NULL to READY ==> outputselector0
[gstreamer] gstreamer changed state from NULL to READY ==> transportsendbin0
[gstreamer] gstreamer changed state from READY to PAUSED ==> nicesink2
[gstreamer] gstreamer changed state from READY to PAUSED ==> nicesink1
[gstreamer] gstreamer changed state from READY to PAUSED ==> outputselector0
[gstreamer] gstreamer changed state from READY to PAUSED ==> transportsendbin0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesink2
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesink1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> outputselector0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> transportsendbin0
[gstreamer] gstreamer changed state from NULL to READY ==> nicesrc1
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> nicesrc1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesrc1
[gstreamer] gstreamer changed state from NULL to READY ==> nicesrc2
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> nicesrc2
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> nicesrc2
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from NULL to READY ==> funnel3
[gstreamer] gstreamer changed state from NULL to READY ==> queue2
[gstreamer] gstreamer changed state from NULL to READY ==> funnel2
[gstreamer] gstreamer changed state from NULL to READY ==> srtpdec0
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from NULL to READY ==> dtlsdec0
[gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdemux0
[gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdec0
[gstreamer] gstreamer changed state from NULL to READY ==> srtpdec1
[gstreamer] gstreamer changed state from NULL to READY ==> dtlsdec1
[gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdemux1
[gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpdec1
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter4
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter5
[gstreamer] gstreamer changed state from NULL to READY ==> transportreceivebin0
[gstreamer] gstreamer changed state from READY to PAUSED ==> funnel3
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> queue2
[gstreamer] gstreamer changed state from READY to PAUSED ==> funnel2
[gstreamer] gstreamer changed state from READY to PAUSED ==> srtpdec0
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsdec0
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdemux0
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdec0
[gstreamer] gstreamer changed state from READY to PAUSED ==> srtpdec1
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsdec1
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdemux1
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpdec1
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter4
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter5
[gstreamer] gstreamer changed state from READY to PAUSED ==> transportreceivebin0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel3
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> queue2
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel2
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpdec0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsdec0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdemux0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdec0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpdec1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsdec1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdemux1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpdec1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter4
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter5
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> transportreceivebin0
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:1 1 UDP<PHONE_NUMBER> fe80::42:feff:fe44:1ee2 36747 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:2 1 TCP<PHONE_NUMBER> fe80::42:feff:fe44:1ee2 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:3 1 TCP<PHONE_NUMBER> fe80::42:feff:fe44:1ee2 48607 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:4 1 UDP<PHONE_NUMBER> fe80::7d4b:aa57:607f:a15a 60821 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:5 1 TCP<PHONE_NUMBER> fe80::7d4b:aa57:607f:a15a 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:6 1 TCP<PHONE_NUMBER> fe80::7d4b:aa57:607f:a15a 57381 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:7 1 UDP<PHONE_NUMBER> <IP_ADDRESS> 44864 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:8 1 TCP<PHONE_NUMBER> <IP_ADDRESS> 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:9 1 TCP<PHONE_NUMBER> <IP_ADDRESS> 34103 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:10 1 UDP<PHONE_NUMBER> <IP_ADDRESS> 49196 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:11 1 TCP<PHONE_NUMBER> <IP_ADDRESS> 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:12 1 TCP<PHONE_NUMBER> <IP_ADDRESS> 34065 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:1 2 UDP<PHONE_NUMBER> fe80::42:feff:fe44:1ee2 56877 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:2 2 TCP<PHONE_NUMBER> fe80::42:feff:fe44:1ee2 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:3 2 TCP<PHONE_NUMBER> fe80::42:feff:fe44:1ee2 56661 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:4 2 UDP<PHONE_NUMBER> fe80::7d4b:aa57:607f:a15a 50172 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:5 2 TCP<PHONE_NUMBER> fe80::7d4b:aa57:607f:a15a 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:6 2 TCP<PHONE_NUMBER> fe80::7d4b:aa57:607f:a15a 33137 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:7 2 UDP<PHONE_NUMBER> <IP_ADDRESS> 51381 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:8 2 TCP<PHONE_NUMBER> <IP_ADDRESS> 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:9 2 TCP<PHONE_NUMBER> <IP_ADDRESS> 48999 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:10 2 UDP<PHONE_NUMBER> <IP_ADDRESS> 40393 typ host"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:11 2 TCP<PHONE_NUMBER> <IP_ADDRESS> 9 typ host tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:12 2 TCP<PHONE_NUMBER> <IP_ADDRESS> 46519 typ host tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:13 1 UDP<PHONE_NUMBER> <IP_ADDRESS> 44864 typ srflx raddr <IP_ADDRESS> rport 44864"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:14 1 TCP 847250175 <IP_ADDRESS> 9 typ srflx raddr <IP_ADDRESS> rport 9 tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:15 1 TCP 843055871 <IP_ADDRESS> 34103 typ srflx raddr <IP_ADDRESS> rport 34103 tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:16 2 UDP<PHONE_NUMBER> <IP_ADDRESS> 40393 typ srflx raddr <IP_ADDRESS> rport 40393"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:17 2 TCP 847250430 <IP_ADDRESS> 9 typ srflx raddr <IP_ADDRESS> rport 9 tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:18 2 TCP 843056126 <IP_ADDRESS> 46519 typ srflx raddr <IP_ADDRESS> rport 46519 tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:13 2 UDP<PHONE_NUMBER> <IP_ADDRESS> 51381 typ srflx raddr <IP_ADDRESS> rport 51381"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:16 1 UDP<PHONE_NUMBER> <IP_ADDRESS> 49196 typ srflx raddr <IP_ADDRESS> rport 49196"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:14 2 TCP 847250174 <IP_ADDRESS> 9 typ srflx raddr <IP_ADDRESS> rport 9 tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:17 1 TCP 847250431 <IP_ADDRESS> 9 typ srflx raddr <IP_ADDRESS> rport 9 tcptype active"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:15 2 TCP 843055870 <IP_ADDRESS> 48999 typ srflx raddr <IP_ADDRESS> rport 48999 tcptype passive"}}
[webrtc] GStreamer WebRTC -- onICECandidate()
[webrtc] sending ICE candidate for /output to <IP_ADDRESS> (peer_id=0):
{"type":"ice","data":{"sdpMLineIndex":0,"candidate":"candidate:18 1 TCP 843056127 <IP_ADDRESS> 34065 typ srflx raddr <IP_ADDRESS> rport 34065 tcptype passive"}}
[webrtc] websocket /output -- recieved message from <IP_ADDRESS> (peer_id=0) (639 bytes)
[webrtc] received SDP message for /output from <IP_ADDRESS> (peer_id=0)
v=0
o=-<PHONE_NUMBER>295625883 2 IN IP4 <IP_ADDRESS>
s=-
t=0 0
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 <IP_ADDRESS>
a=rtcp:9 IN IP4 <IP_ADDRESS>
a=ice-ufrag:fr/O
a=ice-pwd:aftzGMOvJiLp3hAEwDjnlUNl
a=ice-options:trickle
a=fingerprint:sha-256 BA:3C:8B:17:19:C9:CE:09:47:57:26:58:F3:59:08:39:E0:EF:47:BE:A0:30:50:A0:A9:B0:AA:E3:42:2F:D6:CD
a=setup:active
a=mid:video0
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack pli
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e015

[webrtc] websocket /output -- recieved message from <IP_ADDRESS> (peer_id=0) (208 bytes)
[webrtc] received ICE message on /output from <IP_ADDRESS> (peer_id=0) with mline index 0; candidate:
candidate:2147567054 1 udp<PHONE_NUMBER> <IP_ADDRESS> 64683 typ host generation 0 ufrag fr/O network-cost 999
[gstreamer] gstEncoder -- appsrc signalling enough data
[gstreamer] gstreamer changed state from NULL to READY ==> funnel0
[gstreamer] gstreamer changed state from NULL to READY ==> dtlsenc0
[gstreamer] gstreamer changed state from NULL to READY ==> srtpenc0
[gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpenc0
[gstreamer] gstreamer changed state from READY to PAUSED ==> funnel0
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsenc0
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> srtpenc0
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpenc0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsenc0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpenc0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpenc0
[gstreamer] gstreamer changed state from NULL to READY ==> funnel1
[gstreamer] gstreamer changed state from NULL to READY ==> dtlsenc1
[gstreamer] gstreamer changed state from NULL to READY ==> srtpenc1
[gstreamer] gstreamer changed state from NULL to READY ==> dtlssrtpenc1
[gstreamer] gstreamer changed state from READY to PAUSED ==> funnel1
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlsenc1
[gstreamer] gstreamer changed state from READY to PAUSED ==> srtpenc1
[gstreamer] gstreamer changed state from READY to PAUSED ==> dtlssrtpenc1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> funnel1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlsenc1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> srtpenc1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> dtlssrtpenc1
[gstreamer] gstreamer stream status ENTER ==> src
[webrtc] websocket /output -- recieved message from <IP_ADDRESS> (peer_id=0) (242 bytes)
[webrtc] received ICE message on /output from <IP_ADDRESS> (peer_id=0) with mline index 0; candidate:
candidate:3056029747 1 udp<PHONE_NUMBER> <IP_ADDRESS> 64683 typ srflx raddr <IP_ADDRESS> rport 64683 generation 0 ufrag fr/O network-cost 999
[gstreamer] gstEncoder -- pipeline full, skipping frame 225 (1920x1080, 3110400 bytes)
video-viewer:  captured 225 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)1433520, maximum-bitrate=(uint)66950640;
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 250 frames (1920x1080)
video-viewer:  captured 275 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 300 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 325 frames (1920x1080)
video-viewer:  captured 350 frames (1920x1080)
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)1056720, maximum-bitrate=(uint)66950640;
[gstreamer] gstreamer mysink taglist, video-codec=(string)"H.264\ \(Constrained\ Baseline\ Profile\)", bitrate=(uint)11907565, minimum-bitrate=(uint)723120, maximum-bitrate=(uint)66950640;
video-viewer:  captured 375 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 400 frames (1920x1080)
video-viewer:  captured 425 frames (1920x1080)
video-viewer:  captured 450 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 475 frames (1920x1080)
video-viewer:  captured 500 frames (1920x1080)
video-viewer:  captured 525 frames (1920x1080)
video-viewer:  captured 550 frames (1920x1080)
video-viewer:  captured 575 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 600 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 625 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 650 frames (1920x1080)
video-viewer:  captured 675 frames (1920x1080)
video-viewer:  captured 700 frames (1920x1080)
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1
video-viewer:  captured 725 frames (1920x1080)
video-viewer:  captured 750 frames (1920x1080)
video-viewer:  captured 775 frames (1920x1080)
video-viewer:  captured 800 frames (1920x1080)
video-viewer:  captured 825 frames (1920x1080)

Hi @manhntm3, sorry for the delay - WebRTC networking can be a little tricky to debug, so here are some things to try to help investigate it further:

can you first test that video-viewer is able to playback your video file without issue without WebRTC (i.e. rendered to the display or output to another video file)

Then I would test that you can view a lower-resolution / lower-bitrate WebRTC stream without issue (typically I use 1280x720 or 640x480, but have also done 1920x1080 here ok), either from a camera or different video file.  Try different videos to see if that helps.

What is the networking connection like between your Jetson and the client that you are viewing it from?   I use 802.11ac WiFi here without problems, but you may want to check your signal strength of both devices, and that both devices can reliably ping each other with consistent latencies.  To rule out any wireless issue, you can also temporarily try a hardwired Ethernet connection to your router or switch.

Also, in your command above you are using video-viewer, but the video you posted it looks like the HTML/Javascript sample    Instead, if you try navigating your browser to port 8686 and view the built-in webrtc page that shows the connection stats, do you see it dropping packets/frames or does it reliably receive frames?

It would appear from your console log that the Jetson is sending your video frames out over WebRTC, but there are also these spurious messages that I haven't seen and am wondering if are related to the video or something:
[gstreamer] GST_LEVEL_WARNING   qtdemux
              qtdemux_types.c:233  qtdemux_type_get
              unknown QuickTime node type Xtra
[gstreamer] GST_LEVEL_WARNING GstQTDemux qtdemux
              qtdemux.c:3031  qtdemux_parse_trex
              failed to find fragment defaults for stream 1
[gstreamer] GST_LEVEL_WARNING GstQTDemux qtdemux
              qtdemux.c:3031  qtdemux_parse_trex
              failed to find fragment defaults for stream 2
[gstreamer] GST_LEVEL_WARNING GstDtlsSrtpDemux dtlssrtpdemux
              gstdtlssrtpdemux.c:134  sink_chain
              received invalid buffer: 1

You can also enable additional GStreamer debug messages with export GST_DEBUG=4  (see here for log level options)


Hasura graphql?

Hey!
I find solidjs pretty interesting. Currently onto svelte since the on vdom approach. I noticed solidjs feels exactly like react except for the vdom part. Is there any reference implementation on hasura graphql? I did not find anything regarding this (solid is pretty new though). Any ideas about how to get it working? Would look forward to it!
regards

Oh ok, I haven't heard of Hasura GraphQL, but I see it just uses the GraphQL client of your choice. I've use Solid with Apollo but I can't say that the approach is as polished as Apollo React. Generally I just wrap an Apollo Client in a Provider and then use client.watchQuery or client.mutate.
So you might do something like:
// store.jsx
import { createContext, useContext } from 'solid-js';

const ApolloContext = createContext({});

export function ApolloProvider(props) {
  const client = new ApolloClient(/* all the config */);
  return <ApolloContext.Provider value={client}>{props.children}</ApolloContext.Provider>
}

export function useApollo() { return useContext(ApolloContext); }

// in a component somewhere:
import { createState, reconcile } from 'solid-js'
import { useApollo } from './store.jsx'

export default function UserComponent(props) {
  const [state, setState] = createState({});
  const client = useApollo();
  client.watchQuery({query: gql`your query ...`})
    .subscribe(({data}) => {
      setState(reconcile('user', data.user));
    });
  return <Show when={state.user}>

Hi {state.user.firstName}

  </Show>
}

That being said there are lots of ways to use this. This example didn't use Suspense and is based on watching an observable. Which has the benefit of keeping things up to date even if data is updated elsewhere. This isn't the only way to handle this. I'd obviously like to eventually have a better wrapper. But for now it's just using the Apollo Client API: https://www.apollographql.com/docs/react/api/apollo-client
So unfortunately I don't have a great answer for you in terms of an easy to use library. But there should be no issue using Apollo client directly. Hopefully that helps. But I understand if it isn't the best answer.

this could work with wouter????

Unfortunately not. While we could build something similar. Hooks fundamentally work different than Solid's computations. They look similar but that's where the similarity ends. Hooks VDOM libraries render full components over and over and only run the hooks when something changes, basically whitelisting changes. Solid only renders Components once and it's the Computations(Hooks) that run multiple times. It means in practice the approaches are quite transferable. There are places where each need more wrappers (like useCallback etc) and it doesn't really work the same.

It's 2022, any update on this?

There's a blog post by @nisargjoshi95 called Over-Engineering a Todo App: Postgres, GraphQL, Python, SolidJS that uses Hasura. There's also a lot more GraphQL resources in general including:

@solid-primitives/graphql
tqwewe/solid-urql
jherr/solid-graphql-code
sophiabrandt/solid-heroes
merged-js/solid-urql
merged-js/solid-apollo
zentered/fastify-dx-solidjs-example

Thanks for sharing @ajcwebdev! I just uploaded the code for that blog series in a repo here - while I haven't finished the part 3 article yet which starts to get into the frontend details, I have completed a good bit of the code which you can take a look at. In short, interacting with hasura is pretty much like interacting with any other graphql service. I'm using solid-urql and haven't noticed any issues so far.

Any news for 2023? @ajcwebdev?

Thanks for the ping but unfortunately since I've moved on from my role at StepZen I can't say I'm particularly plugged in anymore to the GraphQL zeitgeist. I'd recommend trying to get in touch with the Hasura DevRel team for updates.


fix(pkg/plugin/installer): unix-style paths in HELM_PLUGINS

What this PR does / why we need it:
Supports unix-style paths (with a colon) in the HELM_PLUGINS env for installing new plugins.
Closes #11310
Signed-off-by: Sergei Karpov<EMAIL_ADDRESS>Special notes for your reviewer:
If applicable:

[ ] this PR contains documentation
[x] this PR contains unit tests
[ ] this PR has been tested for backwards compatibility

I didn't understand the rational of the change here. IIUC, the change is to allow specifying multiple HELM_PLUGINS paths, splitting those plugins directory path(s), but then immediately discarding all/any additional paths.
Would it please be possible to explain why this behavior is wanted? (hopefully I'm not missing something obvious :) ). And also, should we consider updating the docs https://helm.sh/docs/topics/plugins/#environment-variables ?

@gjenkins8

I didn't understand the rational of the change here. IIUC, the change is to allow specifying multiple HELM_PLUGINS paths, splitting those plugins directory path(s), but then immediately discarding all/any additional paths.

Helm already supports HELM_PLUGINS path with multiple entries, for reading plugins.
https://github.com/helm/helm/blob/8199db309ae73d745b983fb7ea2bfdd944a834ae/pkg/plugin/plugin.go#L261-L262
But if you set up the path like that, it breaks writing (installing) plugins, as the entire env variable is treated as a single directory path.
Helm creates and installs the plugin in that directory, but it is then impossible for it to read the plugin from that directory, as it gets split.
Full example in #11310.


minor tweak for about developer

copy paste too much and forgot to delete the comma xD

https://github.com/dragonjet/KC3Kai/compare/dragonjet:master...McDohl:patch-3?expand=1

https://github.com/dragonjet/KC3Kai/commit/c7bb04f4291fceeb80b7ef0d3549a21657af7daa


Implement the new Play 2.4 messages API

See: https://www.playframework.com/documentation/2.4.x/ScalaI18N

@akkie is it possible to do that without spray the Messages for every place? Because Messages can be  extract from the RequestHeader.
maybe one solution could be convert DefaultEndpointHandler to the Play ErrorHandler and inject the MessagesApi
WDYT?

The Lang which is contained in the messages can be retrieved from many different sources. The default in Play is to extract it from the request. This can be easily done with the request2Messages method in the I18nSupport method. There are now two possibilities to override this default behavior:

Retrieve the Lang also from request:
The Lang can also be retrieved from another request header(Cookie header, Proxy sets a custom X-LANG header, ...). This can be implemented by overriding the request2Messages method in the I18nSupport trait. Following your suggestion, a user must now additionally add the overridden request2Messages method in scope, everywhere a Messages instance is used. With my suggestion, the user must only add it once at the controller level.

Retrieve the language from another source
It is also possible that a user has the need to retrieve the Lang from a database. With your suggestion the user must query the Lang from the database, everywhere a Messages instance is used. I'm also not sure if it is easily possible to pass the database dependencies around. With my suggestion, the user must only add it once at the controller level.

In my opinion, as the default behavior, it is better to define the lang in the entry point(Controller) and then pass it around to the other components. If a user needs another Lang in the sub components, he can still override it with one of the different methods. But it is very unlikely that a Lang changes in a single request cycle.

My concern is that now need to every Controler that extends Silhouette is mandatory to inject Environment and MessageApi, so my sugestion is minimize the dependencies.
There are 4 place where have Messages as param, Authorization, Event, SecuredSettings and DefaultEndpointHandler, for me none of those make sense to have the Messages.
The only one that use Messages is the DefaultEndpointHandler that could be change to a ErrorHandler.
I agree that the best point to set Lang is the Controller but really need to be mandatory?

There are 4 place where have Messages as param, Authorization, Event, SecuredSettings and DefaultEndpointHandler, for me none of those make sense to have the Messages.

The SecuredSettings needs the Messages because it can deal with templates. For the Authorization trait it could be possible to restrict access based on a locale. And for the events it may be useful to handle events based on the lang.
One big problem with Secure Social was, that it wasn't possible to internationalize your application. This was one of the main reason I've forked the library and created Silhouette. I see your concern, but I think omitting the Messages from the API is a step backward. Maybe we could find another solution for this problem.

The only one that use Messages is the DefaultEndpointHandler that could be change to a ErrorHandler.

I'm not sure if it easily possible to replace the DefaultEndpointHandler with an ErrorHandler. The DefaultEndpointHandler is responsible to display the result for the current content type. Where the ErrorHandler is responsible to handle exceptions. I'm also not sure if it's possible to have multiple error handlers. Otherwise the user must compose it's own error handler based of different error handlers. We cannot create a package in the global package and therefore we must set play.http.errorHandler in the config. But what happens if a user overrides this entry?

@rfranco What do you think about something like this?

@akkie it's looks ok but i don't know if that is realy necessary create a wrapper for Messages, because Message still depends on MessagesApi maybe the Enviromnent can hold a MessagesApi
trait Environment[I <: Identity, T <: Authenticator] {
  def identityService: IdentityService[I]
  def authenticatorService: AuthenticatorService[T]
  def requestProviders: Seq[RequestProvider]
  def eventBus: EventBus
  def messagesApi: MessageApi
}

trait Silhouette[I <: Identity, A <: Authenticator] extends Controller with Logger with play.api.i18n.I18nSupport  {
 lazy val messagesApi: MessagesApi = env.messagesApi
}

WDYT?

Let me put it this way: Silhouette depends on the Play messages support. So why not! I'll change it and update the pull request. Thanks, for the suggestion!

@rfranco Please could you review it again?

@rfranco
https://github.com/mohiva/play-silhouette/pull/335#issuecomment-98057982

I agree that the best point to set Lang is the Controller

I thought we agreed that it's the best to define the Messages in the controller so that the user must not override the logic in different places in case of different lang sources. Inside a Silhouette controller the Messages instance will be resolved implicitly. So there is no extra effort for the user to pass the Messages instance.

@akkie Ok, i agreed, looks good to go!


Add ONBUILD integration tests

Currently we don't have ANY integration tests for onbuild strategy. We should have a couple at least!

It also looks like when we do a make test we do not run our integration tests along with the other tests.
[centos@ip-10-155-13-188 source-to-image]$ make test
hack/test-go.sh
. . .
?   	github.com/openshift/source-to-image/test/integration	[no test files]

@ewolinetz @soltysh @bparees we can close this now?

I think so.


Fix regression: allow import when import_id_fields is 'id'

Problem
Closes #1812
Solution
Re-added checks from v3 which permit imports when 'id' field is not specified.
Acceptance Criteria

Added test

coverage: 99.855% (+0.001%) from 99.854%
when pulling e4108cff61aab0e2c6e6fb0abaf05bf09461ec2f on matthewhegarty:issue-1812-import-non-pk-rows
into 9839a28089575baef1ecab686ab81682751ed761 on django-import-export:main.

This does not work for this issue


Ios installation docs need an update

On https://github.com/devfd/react-native-google-signin/blob/master/ios-guide.md, step 2:
Open https://developers.google.com/identity/sign-in/ios/sdk/
Scroll down and click Get a configuration file button
Download the GoogleService-Info.plist file at the end of the process"

There isn't any "Get a configuration file" button anymore.

Btw, what should I do then? Or it's unnecessary?

I have the same question

Documentation definitely needs to be updated to the latest changes on Google's documentation. We've got quite a lot of work things to get this library and documentation up to dated.
Meanwhile you can get your credentials here:
https://developers.google.com/identity/sign-in/ios/sdk/#get_an_oauth_client_id

Seems like a sufficient solution until everything else is updated.  Closing


[i2c] Update target state diagram for clock stretching.

companion commit to #16249

Signed-off-by: Timothy Chen<EMAIL_ADDRESS>

@a-will / @jdonjdon , #16249 is kind of difficult to review without a diagram.
Please review these two together. I think the revamped state diagrams for clock stretching is VERY close.

there appears to be something going on with FPGA CI (@a-will theorizes that perhaps on some of them reset is not being released).  Given that this is a documentation only change, it seems impossible this is at all related to a failed FPGA CI.  I will merge for now and hope for the best!


Fix Simulator Plugin in Interpreter for Running H2H Simulation

I make a small changes in interpreter.cpp to make memory rewrite could be simulated.

@joyliu37 can you clean this PR up and reduce it to just the things relevant to your change? It looks like a lot of extraneous things in here; including effects of a merge. you should rebase on master too.

@joyliu37, agreed with @rsetaluri, could you do the master rebase?

Should I do git rebase master instead of git merge master.  The local changes should still be there, but requires you to re add/commit.

@joyliu37 see #875. please work off that if it is appropriate. In this case I think a rebase is best.
Also, your editor seems to be automatically cleaning up whitespace -- please do not commit the changes caused by that. Make sure whatever you add and commit is actually what is relevant for your change. I recommend against git commit -a.

I also found the whitespace substitute issue. I will check your commit.

Closing in favor of #875


If there are several messages, user has to manually scroll to the new message line

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Expected Result:
User is scrolled to the New message line
Actual Result:
If there are several messages, user has to manually scroll to the new message line
Action Performed:

Send a bunch of messages to account A from account B (more that 10 msg)
Log in as account A
Navigate to the conversation with account B

Workaround:
Unknown
Platform:
Where is this issue occurring?
Web ✔
iOS
Android ✔
Desktop App
Mobile Web
Version Number: 1.0.28-0
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:
https://user-images.githubusercontent.com/44479856/115790462-bf9a9b80-a394-11eb-97e6-90298703a335.mp4
Expensify/Expensify Issue URL:
View all open jobs on Upwork

Triggered auto assignment to @mateocole (AutoAssignerTriage), see https://stackoverflow.com/c/expensify/questions/4749 for more details.

Triggered auto assignment to @jasperhuangg (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

This seems to be a duplicate of https://github.com/Expensify/Expensify/issues/156238 which I've also already been assigned to, so I'll close this one out.


ErrorException When Editing product in different language

Bug report
Title
ErrorException when trying to edit product in different locale
Issue Description
I receive an issue with the ProductController on line nr 189
Trying to get property 'code' of non-object
Preconditions
1. Bagisto Latest Pull from Master

Steps to reproduce
1. Add a new locale
2. Edit product
3. Select another locale

Expected result
Show form to edit product in English locale.
Actual result

This issue has been fixed.


Always prints only one tweet. The output csv is not created.

Hi. I ran the code exactly as in the instructions.
However, it always print only one tweet no matter what, which doesn't make sense given the user and the period.
It doesn't matter whether I set the maximum number of tweets or not using .setMaxTweets(1)
Also, the output csv file is not created anywhere. How can I create the csv file containing the results?
Here are my code:
import GetOldTweets3 as got tweetCriteria = got.manager.TweetCriteria().setUsername("washingtonpost")  \                                            .setSince("2019-01-01")  \                                            .setUntil("2019-01-05") tweet = got.manager.TweetManager.getTweets(tweetCriteria)[0] print(tweet.text)
Here are the output:
C:/............../GetOldTweets.py
How to be likable, by @petridisheshttps://wapo.st/2F9uL1J
Process finished with exit code 0

Remove the [0] that you have after .getTweets(tweetCriteria)[0]
Then create a loop to iterate through the tweets like so:
for tweets in tweet:
print(tweets.text)


Using rules_typescript in package.json vs git_repository in WORKSPACE

Hi,
This is more a clarification question. The README suggests to "Include @bazel/typescript in package.json#devDependencies", followed by, in WORKSPACE:
local_repository(
    name = "build_bazel_rules_typescript",
    path = "node_modules/@bazel/typescript",
)

On the other hand, @alexeagle 's angular example repo just uses in the WORKSPACE file:
git_repository(
    name = "build_bazel_rules_typescript",
    remote = "https://github.com/bazelbuild/rules_typescript.git",
    tag = "b94f18bcdbf529615b57bf24de773758c33d85fc",
)

Does it matter which one is used? Does the first one actually not create a bootstraping issue, where the WORKSPACE file would be invalid until bazel run @yarn//:yarn is run, since the local repository doesn't exist - but an invalid WORKSPACE file prevents the bazel run?

FYI @bazel/typescript on NPM is now up-to-date again. NPM supports transitive dependencies, so users of the @angular/bazel package get the correct version of @bazel/typescript rather than futzing around in the WORKSPACE file.
Still planning to keep both options.

Hi again,
I agree with your points, maybe it would be nicer. But bootstraping doesn't work the way it's described in the README right now as far as I can tell. When I don't have yet a node_modules directory (e.g. in CI)
local_repository(
    name = "build_bazel_rules_typescript",
    path = "node_modules/@bazel/typescript",
)

I have a problem when trying to run yarn to install rules_typescript.
Baze fails when reading the WORKSPACE I assume:
> bazel run @nodejs//:yarn
ERROR: error loading package '': Encountered error while reading extension
 file 'defs.bzl': no such package '@build_bazel_rules_typescript//': /home/y/.cache/bazel/_bazel_y/353cc7731d9fb1ef948c81259e5d7654/external/build_bazel_rules_typescript must be an existing directory

So this seems to be a bit of a chicken and egg problem. node_modules/@bazel/typescript/ doesn't exist, and it's supposed to be created by bazel run @nodejs//:yarn, which needs it to run.
I've looked at https://github.com/alexeagle/angular-bazel-example/blob/master/WORKSPACE and it also uses the http archive for this repo instead of the npm version.
I'm pretty sure this is nothing new, but maybe worth mentioning somewhere?

This is something I've just run into as well - it seems like it's impossible to use @nodejs//:yarn correctly with these rules.

Update on this. We've landed idiomatic install for rule_typescript so the npm @bazel/typescript package is now a .js only distribution and it contains the .js files used by the rules_typescript rules as well as listing their npm dependencies. The bazel rules themselves must now be pulled via http_archive (or git_repository).
See https://github.com/bazelbuild/rules_typescript#installation, or take a look at https://github.com/alexeagle/angular-bazel-example which shows to build with an Angular app with the latest rules_typescript. Note: in angular-bazel-example, the build_bazel_rules_typescript archive is downloaded in the rules_angular_dependencies() which comes from the Angular rules which ensures that the appropriate version is downloaded by default.


Include validation of output against json schema at Compile time (unit test)

must find or create json schema first see #7


Health check for backends.gateway.envoyproxy.io

something like:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: Backend
metadata:
  name: static-upstream
  namespace: default
spec:
  endpoints:
  - ip:
      address: <IP_ADDRESS>
      port: 8080
  - ip:
      address: <IP_ADDRESS>
      port: 8080
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: BackendTrafficPolicy
metadata:
  name: health-check-static-upstream
  namespace: default
spec:
  targetRefs:
    - group: gateway.envoyproxy.io
      kind: Backend
      name: static-upstream
  healthCheck:
    active:
      timeout: 3s
      interval: 5s
      unhealthyThreshold: 3
      healthyThreshold: 1
      type: HTTP
      http:
        path: "/healthz"
        expectedStatuses:
          - 200

Hey @guydc ,
Thanks for attention!
From a semantic perspective, BackendTrafficPolicy refers to a policy for the backend. If it is intended for the BackendRef of xRoute, it is confusing.
Another point is that if the BackendTrafficPolicy is applied to xRoute, will there be conflicting configurations if multiple xRoutes refer to the same Backend?
#3954 looks really nice. Will targetRefs in PolicyTargetReferences support backends.gateway.envoyproxy.io resource?

From a semantic perspective, BackendTrafficPolicy refers to a policy for the backend. If it is intended for the BackendRef of xRoute, it may be confusing.

You can read the high-level design and some naming discussion for this policy here: https://github.com/envoyproxy/gateway/issues/1821.

Another point is that if the BackendTrafficPolicy is applied to xRoute, will there be conflicting configurations if multiple xRoutes refer to the same Backend?

There shouldn't be a conflict. In Envoy Gateway, each route produces a separate envoy cluster. As a result, different policies would be isolated to different clusters.

https://github.com/envoyproxy/gateway/pull/3954 looks really nice. Will targetRefs in PolicyTargetReferences support backends.gateway.envoyproxy.io resource?

Depends on the policy. For example, BackendTLSPolicy attaches to a backend-like resources, such as service, serviceImport and backends.gateway.envoyproxy.io (already). However, most policies (BackendTrafficPolicy, ClientTrafficPolicy, SecurityPolicy, EnvoyExtensionPolicy) support attachment to a subset of [Gateway, Listener and Route]. These are not likely to support attachment to backends.gateway.envoyproxy.io.

the diagram in https://gateway.envoyproxy.io/docs/concepts/concepts_overview/ should help understand which policies can target which resource

Hi @guydc !
Thank you very much for your patient response.
In addition to configuration conflicts, duplicate configurations might also be an issue. If multiple HTTPRoutes are configured with the same Backend, you need to configure a BackendTrafficPolicy for each HTTPRoute. However, the health check configurations are the same (for the same backend).

@arkodg Thanks!
This diagram is very helpful.

closing this one, attaching BTP to the route should resolve this issue


Reconsider VirtualBox DNS proxy on/off

We are currently turning these off:
    # Disable VirtualBox DNS proxy as it may cause issues.
    # See https://github.com/docker/machine/pull/1069
    v.customize ['modifyvm', :id, '--natdnshostresolver1', 'off']
    v.customize ['modifyvm', :id, '--natdnsproxy1', 'off']

I ran into two use cases where it would be better to keep them on:

Moving from one LAN to another will break DNS resolution
B2D VM inherits the DNS server list from the host at boot. Moving into a different LAN (e.g. home <=> office) will mean a change of the network subnet and/or the DNS server IP address in most cases.

I had a really weird issue on one Windows box with very poor network performance. I fixed it by switching natdnshostresolver1 and natdnsproxy1 ON.

At the minimum adding a note to the Troubleshooting docs about the switch would be good.

Revised this in https://github.com/blinkreaction/boot2docker-vagrant/commit/c9adb8d2325eb2c6d87e4ac36de26462aadec39f
See the diff for details.
Released in 1.5.0


User signup for different tenants

I was wondering how a user will be able to sign up using email for multiple pooled tenants sharing the same cognito pool without getting an error that the email was already used while.

This reference solution doesn't support one user to multiple tenant mapping. In that case you need a user registration that is agnostic of tenant so that you can register once with your email and then users can choose which all tenant they want to onboard too. The user sign-in process will probably need to ask which tenant user want to login with, vs starting from tenant and then ask for credentials.
The other alternative as you can guess is to leverage user pool per tenant.

Closing the issue. Please feel free to re-open it if you have questions


Service proxy factory lifetime

In the Service proxy factory lifetime section it reads "If you use the API ServiceProxy.Create to create a proxy, the framework creates a singleton service proxy. ", should it not be "If you use the API ServiceProxyFactory.CreateServiceProxy to create a proxy, the framework creates a singleton service proxy. "?
Thanks

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 8902374b-b631-9d50-16ef-1899ea2dd29d
Version Independent ID: 55351e69-aa2a-901c-a563-106b62e3d6ac
Content: Service remoting by using C# in Service Fabric
Content Source: articles/service-fabric/service-fabric-reliable-services-communication-remoting.md
Service: service-fabric
GitHub Login: @vturecek
Microsoft Alias: vturecek

Thanks for the feedback! We are currently investigating and will update you shortly.

@JC-JackClark good find! I have corrected the doc. Once the PR merges the changes will go live in a few hours.

Thanks for confirming!


rocm-smi deb package could Suggests: sudo

Very low prio, but just small suggestion.
rocm-smi only requires Depends: python3, and nothing else (I checked the source and indeed that is true!), and that is awesome.
But setting things require running as root, or the scripts does execvp to re-execute using sudo.
So I think it would make sense to add this to control file: Suggests: sudo  as a non-strong dependency, and it enhanced the script, but is not required in any sense.

Thanks @baryluk
I am not sure why do we need sudo for rocm-smi.
Can you please elaborate your issue.

sudo is required to set any settings.
Normally we relaunch as sudo if there are any issues. But we can't make it a dependency in the packaging, unfortunately, we just have to run it as sudo if we want to change anything.
Hope this helps.

Just added Suggests: sudo to the debian package. It is not a dependency, but a weak dependency. It will not break anything. On Ubuntu, sudo is usually installed by default, but it is not the case on Debian and derivatives for example.

Hi @baryluk
We do not wish to recommend sudo for any kind of rocm operations. Ideally all functions should work without sudo.
There are/may be some cases where some times, things work with sudo only. In those cases, users definitely try with sudo only.
Anyway I will once again check with component owner and update on this.
Thank you.

For suggests/requires/depends, these need to be packages that might not be installed. Since sudo is always installed, the only way someone would see that we're suggesting sudo is by reading the packaging (and almost no one ever does that). And since any system that doesn't have sudo installed would be broken, it's inclusion in the requires/suggests section would not be any different than the SMI currently is. Plus, it's not required for simple monitoring, it's only needed for changing settings, so there's that side of things as well

@rkothako sudo is not always installed at all. I have a system with no sudo.
Please add Suggests: sudo. It is simple as that.

@baryluk I had not seen "Suggests: sudo" in the wild before, but I see it in a few spots now that you've inspired me to take a look. I honestly hadn't considered that there would be many systems running ROCm where they would not have sudo, but I'll see if we can make that change.

We have merged this request internally and are tracking it to be resolved in ROCm 4.1

We have merged this request internally and are tracking it to be resolved in ROCm 4.1

Hi @baryluk
Issue is fixed with 4.1 code. Can you please check and update asap.
Thank you.

Fixed. Thank you.

Thanks @baryluk for the closure.


feat: Support Unix Time

fix: Support Unix Time as unsigned 4 byte unix timestamp as specified in https://github.com/ElectronicCats/CayenneLPP/blob/master/decoders/decoder.js
It converts and restores datetime objects. It also supports directly providing an integer/float timestamp.
For naive datetime objects (without timezone) it assumes the timezone is the system timezone. It converts to utc before converting, and returns back as a datetime object with timezone=utc. For timestamp integers, it is assumed this already is the timestamp in utc timezone (ie no conversion is done).
No other datetime libraries are required beyond the builtin datetime module.

I didn't realize that python<=3.5 didn't support astimezone for naive datetime objects. Python 3.6+ automatically assumes the timezone is the system timezone. So I added a utils module and function that has a fallback for python <=3.5. Now I am running all tests through tox with python 3.4-3.8

This adresses issue #40

@smlng what can I do to help someone review this PR?

@dolfandringa any chance for a rebase before 🎄 🎅

This has been rebased within #51.

updated in #51


Move JS code/infra to repo root, delete Example app.

This is another big step towards having a standard RN project setup. It moves everything JS related from /emission to the repo root. All thats left behind in /emission is the cocoapod.
I also deleted the Example app and some scripts and docs.
This will probably create a few more annoying (rename/delete) merge conflicts, and in hindsight I should have done it this way to begin with 😞This should be the last of them, though!
#trivial lol

Fails

:no_entry_sign:

🃏 FAIL in Collection-tests.tsx

:no_entry_sign:

🃏 FAIL in FilterModal-tests.tsx

:no_entry_sign:
TypeScript hasn't passed, see below for full logs

TypeScript Fails
src/lib/Components/FilterModal.tsx(2,50): error TS2307: Cannot find module 'lib/Components/ArtworkFilterOptions/SortOptions'.
src/lib/Scenes/Collection/Collection.tsx(1,22): error TS6133: 'FilterIcon' is declared but its value is never read.
src/lib/Scenes/Collection/Collection.tsx(1,40): error TS6133: 'Sans' is declared but its value is never read.

  Generated by :no_entry_sign: dangerJS


Rewrite docs quickstart guide + resolve issue #277

Okay, I spent the day rewriting the quickstart guide. Input definitely welcomed!
I tried to stray away from describing things in too much detail as I didn't want things to drag on. That said, let me know if you think I've been overly descriptive / too brief anywhere in particular.
I've also adjusted a few of the demo files to reduce the number of things someone needs to tweak to get Eureka up and running. I don't think these are being used anywhere else but let me know if that's not the case!
This will close #277 and also close #242.

Just pushed a few more tweaks, including switching to Kipping 2013 for the fitting and close #279.

@taylorbell57 I should have resolved all of the comments you made on Friday, let me know if it's all okay!

Okay I decided to do a little formatting to the installation page (e.g. putting things in code blocks, removing the reference to the 2021 hackathon) and I noticed that the contents is kind of messed up:
Any thoughts on why the CRDS / Issues with jwst sections aren't under the Installation drop down?

I would also propose that we delete the out of date intro.ipynb and hackathon-day2-tutorial.ipynb notebooks

Okay I decided to do a little formatting to the installation page (e.g. putting things in code blocks, removing the reference to the 2021 hackathon) and I noticed that the contents is kind of messed up:
Any thoughts on why the CRDS / Issues with jwst sections aren't under the Installation drop down?

@AarynnCarter that is weird. when I locally build the version of the docs that I just merged with main, these sections are properly listed under the installation toctree entry.

However, the updated live version of the docs still has the weird structure you pointed out.

Something seems to be weird in using the docs makefile locally vs how they're built automatically

@jbrande Huh, now that I can see it side by side it looks like the subheading titles are completely different too... I thought we didn't need to do anything to update the website but it looks like it hasn't incorporated @taylorbell57 's changes to the installation instructions...

@jbrande Huh, now that I can see it side by side it looks like the subheading titles are completely different too... I thought we didn't need to do anything to update the website but it looks like it hasn't incorporated @taylorbell57 's changes to the installation instructions...

Ah, that'll probably be updated right away here - the documentation likely crashed when it tried to update because I hadn't specified image_registration as a requirement. I've just merged an edit that makes image_registration as an optional dependency, so the docs should successfully recompile pretty soon here.

Hmm... @taylorbell57, doesn't look like it changed. Does it take a while to update?

Yeah I'm surprised too - it usually takes several minutes. I don't have permissions to the readthedocs page though, so I can't tell what might be wrong. I'll try looking into whether someone can add me to that

Oh wait, there was another issue with me accidentally importing niriss_cython which is also likely causing errors

Any thoughts on why the CRDS / Issues with jwst sections aren't under the Installation drop down?

Ah, so it seems this is actually my fault - I wanted to add more emphasis to those sections, but didn't realized that it would result in changing the toctree. If you edit the underlines underneath those two sections to just - symbols instead of = symbols, then it should get fixed

Hmm, okay, in this pull request they should just be - symbols. Let's see what happens when we merge haha

Haha, every time I think I have git figured it out it somehow manages to confuse me. Now the headings should be correct.

I would also propose that we delete the out of date intro.ipynb and hackathon-day2-tutorial.ipynb notebooks

I agree, but let's do that in a different PR so Kevin can weigh in on that. I'll make a new issue related to that

Okay, let me check everything out locally to make sure it's ready for approval

I would also propose that we delete the out of date intro.ipynb and hackathon-day2-tutorial.ipynb notebooks

I agree, but let's do that in a different PR so Kevin can weigh in on that. I'll make a new issue related to that

Sounds good, I haven't deleted them in this PR. Thanks for making the issue.


Edit args parameter in restart

Signed-off-by: Aadhitya A<EMAIL_ADDRESS>Notes for Reviewers
This PR fixes #
Signed commits

[x] Yes, I signed my commits.

Codecov Report
Base: 16.62% // Head: 12.31% // Decreases project coverage by -4.30% :warning:

Coverage data is based on head (d864d06) compared to base (bd179c6).
Patch coverage: 0.00% of modified lines in pull request are covered.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6892      +/-   ##
==========================================
- Coverage   16.62%   12.31%   -4.31%
==========================================
  Files         116      116
  Lines       15912    15912
==========================================
- Hits         2645     1960     -685
- Misses      12793    13639     +846
+ Partials      474      313     -161

Flag
Coverage Δ

gointegrationtests
?

unittests
12.31% <0.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

mesheryctl/internal/cli/root/system/restart.go
2.66% <0.00%> (-42.67%)
:arrow_down:

mesheryctl/internal/cli/root/system/start.go
1.57% <0.00%> (-54.58%)
:arrow_down:

mesheryctl/internal/cli/root/system/status.go
1.51% <0.00%> (-53.79%)
:arrow_down:

mesheryctl/internal/cli/root/system/stop.go
2.00% <0.00%> (-46.50%)
:arrow_down:

mesheryctl/internal/cli/root/system/update.go
1.73% <0.00%> (-43.48%)
:arrow_down:

mesheryctl/internal/cli/root/system/logs.go
3.97% <0.00%> (-43.05%)
:arrow_down:

mesheryctl/internal/cli/root/root.go
25.49% <0.00%> (-40.20%)
:arrow_down:

mesheryctl/internal/cli/root/version.go
0.00% <0.00%> (-34.24%)
:arrow_down:

mesheryctl/internal/cli/root/system/check.go
1.00% <0.00%> (-24.25%)
:arrow_down:

... and 3 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


ERROR: (gcloud.app.deploy) Error Response: [9] Application startup error! Code: APP_CONTAINER_CRASHED /bin/sh: 1: exec: gunicorn: not found

I am deploying my Django project on google cloud app engine with my virtual environment I get the error ERROR: (gcloud.app.deploy) Error Response: [9] Application startup error! Code: APP_CONTAINER_CRASHED /bin/sh: 1: exec: gunicorn: not found i already install gunicorn and my app.yaml
    `runtime: python
         env: flex
     entrypoint: gunicorn -b :$PORT tiwari.wsgi
    automatic_scaling:
         min_num_instances: 1
        max_num_instances: 2`

You have to include gunicorn in your requirements.txt


Average fortification level

On the performance over time page, if it's quick/easy, can we change the bottom/summary calculated to average fortification level (mg/kg) among fortifiable food vehicle at point of fortification (instead of among all food vehicle)? So the label would be "Average fortification level (mg/kg) among fortifiable food vehicle at point of fortification" and then the values would be calculated in the same way as those values for baseline. In reviewing all of this together, I think it'll make a lot more sense to users to have that value vs the "among all food vehicle" values displayed.

I think the calculation is in fact already mirroring the baseline page so I have just updated the header text as suggested to reflect this


Error when calling a procedure using a side effect

This example will create an error on runtime:
import maybe/maybe

var crash = false

proc wontwork(): Maybe[int] =
  if crash:
    nothing[int]()
  else:
    crash = true
    just(4)

maybeCase wontwork():
  just x:
    var y = 3
    echo $(x+y)
  nothing:
    echo "no value"

The reason is simple, maybeCase substitutes all occurences of x with it's first argument. This means that the above get's turned into something like this:
if wontwork().valid:
  var y = 3
  echo $(wontwork().value + y)
else:
  echo "no value"

As we can see wontwork is called twice, the second time producing a different result than the first. What should be happening is something like this:
let x = wontwork()
if x.valid:
  var y = 3
  echo $(x.value + y)
else:
  echo "no value"

Fixed in https://github.com/superfunc/maybe/pull/10

Noted in the PR, will take a look this weekend, thanks!


[SPARK-10227] fatal warnings with sbt on Scala 2.11

The bulk of the changes are on @transient annotation on class parameter. Often the compiler doesn't generate a field for this parameters, so the the transient annotation would be unnecessary.
But if the class parameter are used in methods, then fields are created. So it is safer to keep the annotations.
The remainder are some potential bugs, and deprecated syntax.

Can one of the admins verify this patch?

What's the meaning of param and field?
The scala documentation doesn't really say anything: http://www.scala-lang.org/api/2.10.4/index.html#scala.annotation.meta.param
"Consult the documentation in package scala.annotation.meta."
But scala.annotation.meta doesn't say much either.

It indicates on which of the elements generated for the class parameter to apply the annotation.
There are 4 possible elements generated for a class parameter: the constructor parameter, the field, the getter and the setter (and more for beans).
I would expect @(transient @field) to be enough, for the cases when a field is actually created, but the warning is not resolve until @param is added too. I haven't dig on why the compiler complain in this case.
The base question was mostly: do we want to remove the @transient annotation which have no effect at all (no field generated by the compiler).

@rxin et al I think I'd favor removing these @transient. They don't do anything now. The only argument for the more complex expansion is to quietly apply transient if the param quietly becomes a field, and that does not seem like a good automatic thing to happen. @skyluc I would favor moving forward with that variation unless anyone objects shortly.

Updated the changes for @transient. The annotation has been removed where not needed, and the paremeter has been transformed in @transient private val where needed.

Test build #1711 has started for   PR 8433 at commit 0408404.

Test build #1711 has finished for   PR 8433 at commit 0408404.

This patch fails Scala style tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
class SparkHadoopWriter(jobConf: JobConf)
class BlockRDD[T: ClassTag](sc: SparkContext, @transient val blockIds: Array[BlockId])
class ZippedWithIndexRDD[T: ClassTag](prev: RDD[T]) extends RDD[(T, Long)](prev)
class Checkpoint(ssc: StreamingContext, val checkpointTime: Time)
abstract class InputDStream[T: ClassTag] (ssc_ : StreamingContext)
abstract class ReceiverInputDStream[T: ClassTag](ssc_ : StreamingContext)

Test build #1719 has started for   PR 8433 at commit 0408404.

Test build #1719 has finished for   PR 8433 at commit 0408404.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Aside from possible removing those imports, yes, this looks good to me for master/1.6.

Just giving this one more go through Jenkins, but still LGTM. our test framework is just testing Scala 2.10, not 2.11. However, it seems like this patch can only make it less broken for Scala 2.11 + SBT if it doesn't work now, so I think the risk of merging into master is low. The changes seem sound and positive in any event.

Test build #1726 has started for   PR 8433 at commit 5892876.

Test build #1726 has finished for   PR 8433 at commit 5892876.

This patch passes all tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
class SparkHadoopWriter(jobConf: JobConf)
class BlockRDD[T: ClassTag](sc: SparkContext, @transient val blockIds: Array[BlockId])
class ZippedWithIndexRDD[T: ClassTag](prev: RDD[T]) extends RDD[(T, Long)](prev)
class Checkpoint(ssc: StreamingContext, val checkpointTime: Time)
abstract class InputDStream[T: ClassTag] (ssc_ : StreamingContext)
abstract class ReceiverInputDStream[T: ClassTag](ssc_ : StreamingContext)


improve look of code snippets in Commentary

the code snippets look awkward because:

we are using 16px for commentary, and 16px monospace doesn't look great
we should find a way to stand off the code snippets a bit; either with a different text color, or a background color (github uses the latter technique, fwiw)

as it stands:

github style:


Publish docker image to docker hub

Hi,
I really like your tool but it might be a lot easier to consume when it's being pushed to docker hub so we can just pull and run the image rather than building it first. Might be little effort for you but can help out quite a lot since a lot of folks out there is running stuff on servers that can't access the internet in general but limited sources (like docker hub) only ...
And sure I could probably do this myself but where's the point if I would just copy the repo 1:1 which might result in outdated versions or whatever ... ;-)
I just like the convenience of consuming a good tool as is rather than adding no value but work by myself ;_)

very good point. How about the github docker registry?

I guess I still prefer hub.docker.com but I take what you provide. Might not need to be either A or B but both registries though ;-)

like this?: https://hub.docker.com/r/bbricardo/netbox-sync

I still need to change the path from /opt to /app. So please wait for the next version.

Haha. Yeah. Just like that. Nice one. ;-)

"fixed" in version 1.2.3


Show place markers when a could can not be calculated

Show place markers when a could can not be calculated (so the user can potentially move the markers to try a new route)

done


Design document detailing how we should restructure test suite.

Goal

Greater maintainability (less tests, easier to understand tests)
Easier to understand, and therefore a type of "documentation"
Easier to contribute to (developer proposition)
Faster to run (efficient fixtures, parallelization)

Integration tests

CDC MongoDB
Queries in SQLite, PostgreSQL, DuckDB
Dask jobs
Server
Atlas vector-search

Unittests
DB

Connect to DB
Connect various types of back-ends to DB
Pass credentials to DB
Auto-configure DB with superduper
Build DB with build_datalayer

Data

Apply all types of queries with MongoDB
Apply all types of queries with Ibis
Download images when inserting data
Store big-data blobs in a hybrid way

Components

Add and initialize all types of components
Delete all components
Display information about all components

Models

Predict on data with model
Fit/ train and save a model
Apply model as a listener
Apply models which are dependent on each other
Apply models which are dependent on each across tables/ collections
Use database to predict on a model with a context
Apply models, flatten outputs, and store somewhere else

Vector-Search

Test all types of indexes (in_memory/ lance)

Queries

Execute read/ insert/ update/ delete queries
Execute like (vector-search queries)

Ext

Save all types of models
Predict with all types of models
Fit with all types of models
Use/ apply all types of encoders

Fixtures
We should have far fewer fixtures and re-use almost all fixtures.

A random-data fixture
A VectorIndex fixture (includes Model, Listener, Encoder) for almost everything
Another single Model fixture (for dependent models and training).
Each of these applied to MongoDB and SQL

The plan is to:

implement the fixtures, and take stock, checking these "represent" everything
implement the tests feature-by-feature, trying to test each aspect of the code the minimal necessary number of times

Priority would be to complete integration tests

@blythed
Unit tests:
Rather than description functionality
we can do unit tests with class units, i.e
we can start with testing each class for testing as part of unit tests!
starting from the most important ones.

@thejumpman2323 the issue with that is that there are many duplicated tests and checks.
E.g. db.add(VectorIndex) tests everything downstream. Do we really then need to retest Model.predict?

I propose:

Keep the flat structure currently used by the integration tests
Apply something more like this to the unit tests

|_material
|_unittest
|  |_test_db.py
|  |_test_...
|
|. |_models
|  |_data_in_db
|
|_

@thejumpman2323 the issue with that is that there are many duplicated tests and checks.
E.g. db.add(VectorIndex) tests everything downstream. Do we really then need to retest Model.predict?

I think we should mock some functions to cut down on duplicate tests, based on what we're aiming to test.
For example:
we can mock the Model.predict if we don't want to test it in db.add(VectorIndex)

I think we can start by testing each class first, writing unit tests for each core class. Then move on to all the classes, and finally to some special test case scenarios, with the following priorities:

Write test cases for the core classes
Write test cases for all classes
Write unit tests for use cases and functionalities

What do you think? @blythed @thejumpman2323

@jieguangzhou yes, I like the idea to not need to test the full code, to cleanly separate things.
For example if I do:
db.add(VectorIndex)

about 50% of the entire code is called.

Hi,

We should start the test suite with create a super database instance, which contains an encoder, model, vector index, listener and so on.

We should use this super database instance across the testing without creating a new one as much as possible.

We should create a base component tester which tests all components against standard test i.e on_create, on_start, etc

We should start with extending our integration tests first.

we should test important functions of DB instance.

once done with integration test we should test all components extensively.

One done with components, we should check if all major classes are tested, we can start with vector_search module, backends, etc.

Lastly, we should make sure we have 90% coverage atleast

@blythed @jieguangzhou


ENH: add some missing unit testing

Codecov Report

Merging #6 (f6ea398) into master (b45f97e) will increase coverage by 34.60%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##           master       #6       +/-   ##
===========================================
+ Coverage   48.60%   83.21%   +34.60%
===========================================
  Files          81       61       -20
  Lines        2695     1883      -812
===========================================
+ Hits         1310     1567      +257
+ Misses       1385      316     -1069

Impacted Files
Coverage Δ

...ns/annotations/attributes/conditions_attributes.py
80.00% <0.00%> (-3.34%)
:arrow_down:

...ions/annotations/attributes/personal_attributes.py
81.81% <0.00%> (-2.80%)
:arrow_down:

...d/foundations/annotations/attributes/attributes.py
83.33% <0.00%> (-2.39%)
:arrow_down:

gradgpad/foundations/annotations/annotations.py
69.04% <0.00%> (-1.41%)
:arrow_down:

gradgpad/foundations/annotations/annotation.py
88.23% <0.00%> (-0.66%)
:arrow_down:

gradgpad/foundations/metrics/metric.py
92.30% <0.00%> (-0.55%)
:arrow_down:

...oundations/metrics/indepth_error_rates_analysis.py
99.03% <0.00%> (-0.01%)
:arrow_down:

gradgpad/__init__.py

..._research/cli/calculate_demographic_bias_metric.py

...earch/cli/calculate_demographic_bpcer_bar_chart.py

... and 27 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b45f97e...f6ea398. Read the comment docs.