Giter Site home page Giter Site logo

rtcstats-server's People

Contributors

dependabot[bot] avatar fippo avatar ggarber avatar juandebravo avatar swisspol avatar thepatrick avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rtcstats-server's Issues

minFrameWidth is -1

I saw a minGoogFrameHeightReceived of -1 -- that is bogus obviously and should be filtered.

undefined in getstats

               "undefined" : "2016-06-03T20:45:52.297Z",

This oddly looks as if the timestamp is set wrong

infinity values

PC_0 FEATURE statsMeanReceivingBitrate => Infinity
PC_0 FEATURE statsMeanSendingBitrate => Infinity

Ability to start/end session outside opening/closing tab

We would love for there to be a way to start/end a session outside of opening and closing the tab. This is for example useful if you have a lot of back to back calls, and don't open a new browser window for every call. And if the user forgets to close the tab, we can end the session programatically and dump it to rtcstats at the logical end of the call, rather than closing the tab.

delta storage

getStats is currently stored as a full report. It would be much more efficient to store the same delta value that is transmitted.

location features

quite similar to what Eric did with distance to datacenter... roughly:

var maxmind = require('maxmind');

var cityLookup = maxmind.open('./GeoLite2-City.mmdb');
var city = cityLookup.get('2.150.33.235');
console.log(city.location);
console.log(city.country.iso_code);
console.log(city.continent.code);

which gives us location (lon/lat), county, continent and timezone

needs a better plan for ssrc-stat extraction

extracting stats for a ssrc needs a better plan.

Basically:

  • extract local streams from addStream, remote streams from onaddstream
  • extract audio/video track
  • extract ssrc stats for track

setup instructions

are missing. Making a list here.

  • what is the primary key of the dynamodb table? 'Item'?
  • how is export to redshift done
  • what needs to be configured for passport?

more ws woes

/home/ubuntu/rtcstats-server/node_modules/ws/lib/Receiver.js:386
    default: srcBuffer.copy(dstBuffer, dstOffset, 0, length); break;
                       ^

RangeError: out of range index
    at RangeError (native)
    at fastCopy (/home/ubuntu/rtcstats-server/node_modules/ws/lib/Receiver.js:386:24)
    at Receiver.add (/home/ubuntu/rtcstats-server/node_modules/ws/lib/Receiver.js:86:3)
    at Socket.realHandler (/home/ubuntu/rtcstats-server/node_modules/ws/lib/WebSocket.js:800:20)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:177:18)
    at Socket.Readable.push (_stream_readable.js:135:10)
    at TCP.onread (net.js:542:20)

seems to be websockets/ws#778 even though that is using ws 1.x whereas we are still stuck on 0.8

work with spec-stats

we're mostly relying on the google stats, we should be working with spec-stats more. One day...

changing dynamodb table names on the fly.

the size of our dynamodb table makes exports to redshift very hard. Also, we re-export the whole DB every time.

What we should do instead is to generate the tablename based on the current data. That assumes that the tables are created in advance but that is doable.

Tables can also be archived to S3 when they are no longer needed for read access.

WDYT @ggarber?

ice restarts need consideration

I just saw a case where there was no remote relay candidate before the failure. There was one after the ice restart but that was counted as hadremoterelaycandidate => true which lead me to investigate this as "what the heck" instead of shrugging it off as "oh yeah, no remote relay. not gonna work"

scale it

the current model is to keep stuff in memory until the client closes the connection. That won't scale...

chrome 51 broke stuff

I was looking into the audiosendgoogrttmean feature and it has disappeared in Chrome >= 52. This is because https://bugs.chromium.org/p/webrtc/issues/detail?id=3377 has been fixed.

Those stats still appear but apparently not in the first report. For video this seems to be different?!
This means they're undefined and bad things happen in https://github.com/opentok/rtcstats-server/blob/develop/features.js#L1583-L1584

Solution is probably to filter undefined and then calculate instead of throwing away things if the first entry is undefined

detect micro-glitches

i've had a horrible call experience today (which turned out to be related to a broken battery and running low on that). Basically it glitched very, very often.

This is detectable in getStats. If packetsReceived or bytesReceived for a track stay the same despite a 1s difference in time that is a good indicator.

inconsistent internal use of .timestamp

sometimes its a unix timestamp, sometimes its a Date object.
The solution is probably to make .timestamp a unix timestamp everywhere and have .time as the equivalent date object.

write peerconnections to different files

currently, all data associated with a session is written to a single file. Splitting this up into one file for session metadata and another file for each peerconnection would allow processing a peerconnection once its done and not when the client closes the page.
Increases realtimeness and hopefully also reduces disk usage.

dont obfuscate relay addresses in getStats

               "Cand-+zj+Zh1T" : {
                  "id" : "Cand-+zj+Zh1T",
                  "type" : "remotecandidate",
                  "portNumber" : 50144,
                  "priority" : 25108479,
                  "transport" : "udp",
                  "timestamp" : 1465744899781,
                  "candidateType" : "relayed",
                  "ipAddress" : "0.0.0.0"
               },

see #61 for why we don't need to obfuscate an ip we own.

retroactively run features

basically as follows:

  • select connection ids which don't have that feature in redshift
  • fetch data from s3
  • run feature
  • update dynamodb item

crashes in zlib.js

the major remaining crash is in zlib.js line 623 which is this code:

      var newReq = self._handle.write(flushFlag,
                                      chunk,
                                      inOff,
                                      availInBefore,
                                      self._buffer,
                                      self._offset,
                                      self._chunkSize);

self._handle is null:

zlib.js:623
      var newReq = self._handle.write(flushFlag,
                               ^

TypeError: Cannot read property 'write' of null
    at Zlib.callback (zlib.js:623:32)

It is in the process that handles websockets so I suspect the websocket closes in the middle of things. Sounds like a bug in node-core...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.