Giter Site home page Giter Site logo

rtcstats-server's Introduction

rtcstats-server

server for https://github.com/opentok/rtcstats

Load errors

select starttime, colname, col_length, type, err_reason
    from stl_load_errors
    order by starttime desc;

views on recent data

create or replace view recent as select * from features_new order by date desc limit 100000;

Sample queries

The queries directory contains nodejs script that will connect to redshift, run a large number of queries and output a HTML file to stdout.

Extracting features from a local dump file

  1. Move the dump file to the temp folder
  2. Run node extract name-of-the-file

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

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?

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

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

minFrameWidth is -1

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

scale it

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

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

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.

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.

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...

infinity values

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

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"

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.

work with spec-stats

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

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.

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.

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.

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?

undefined in getstats

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

This oddly looks as if the timestamp is set wrong

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

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

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.