Giter VIP home page Giter VIP logo

insightsengine's Introduction

Insights Dashboard Sample

Tokbox is now known as Vonage

Dashboard Sample which makes use of OpenTok Insights GraphQL API

Preview

Insights Dashboard Sample Preview

Local Installation

  1. Clone the repository.

  2. If you are using nvm, run nvm use to use the version of Node from the .nvmrc file.

  3. Install dependencies: npm install.

  4. Copy .env.template to .env and edit the environment variables.

  5. Run the server and the client app: npm start. This will run both the server (server.js) and the client app (react-scripts).

Open http://localhost:3000 in your browser.

Configuration options

Configuration can be done using environment variables. You can create an .env file for easier config.

Environment Variable Names and Description:

  • REACT_APP_INSIGHTS_URL (Required): The URL for the OpenTok Insights API server.
  • REACT_APP_API_KEY (Required): Your OpenTok API Key.
  • API_SECRET (Required): Your OpenTok API Secret.
  • SERVER_PORT (Required): The port number for your server to run on.
  • REACT_APP_SERVER_URL (Required): The URL for your server app.
  • APP_CLIENT_URL (Required): The URL for your client app.

Notice that all the environment variables used by the client start with REACT_APP_. This ensures that only those are accessible by the client, protecting your API secret.

Charts - Query samples

Usage by Day

Usage by Day

Query to Insights API (Sample)

{
  project(projectId: ${YOUR_API_KEY}) {
    projectData(
      start: ${moment().subtract(10, 'days')},
      interval: DAILY
    ) {
      resources {
        intervalStart,
        intervalEnd,
        usage {
          streamedPublishedMinutes,
          streamedSubscribedMinutes
        }
      }
    }
  }
}

SDK Distribution

SDK Distribution

Query to Insights API (Sample)

{
  project(projectId: ${YOUR_API_KEY}) {
    projectData(
      start: ${moment().subtract(10, 'days')},
      groupBy: SDK_TYPE,
      sdkType: [JS, ANDROID, IOS]
    ) {
      resources {
        sdkType,
        usage {
          streamedSubscribedMinutes
        }
      }
    }
  }
}

Participant Pricing Model Usage

Participant Pricing Model Usage

Query to Insights API (Sample)

Here is the generic query to Insights API to get specified tier related insights:

{
      project(projectId: ${apiKey}) {
        projectData(
          start: ${moment(startDate)},
          end:  ${moment(endDate)},
          interval: DAILY
        ) {
          resources {
            intervalStart,
            intervalEnd,
            usage {
            participantMinutes{
                from1To2Publishers
                from3To6Publishers
                from7To8Publishers
                from9To10Publishers
                from11To35Publishers
                from36To40Publishers
                from41PlusPublishers
            }
          }
        }
      }
    }
}      

However, you can add or remove more tiers according to your rate plan by adjusting the ppmDisplaySettings property in the src/charcts/UsageByParticipantTier.js file:

const ppmDisplaySettings = [
 {
    label: '1 - 2 publishers',
    backgroundColor: 'rgba(6, 186, 119, 0.4)',
    key: 'from1To2Publishers'
  },
  {
    label: '3 - 6 publishers',
    backgroundColor: 'rgba(153, 65, 255, 0.4)',
    key: 'from3To6Publishers'
  }
];

This examples is used to generate a GraphQL query similar to the sample query shown above and populate the stacked area chart.

Failures by Browser

Failures by Browser

Query to Insights API (Sample)

{
  project(projectId: ${YOUR_API_KEY}) {
    projectData(
      start: ${moment().subtract(10, 'days')},
      groupBy: BROWSER_NAME,
      browserName: [CHROME, FIREFOX, IE]
    ) {
      resources {
        browserName,
        errors {
          guidConnect {
            failures
          },
          guidPublish {
            failures
          },
          guidSubscribe {
            failures
          }
        }
      }
    }
  }
}

Bitrate by Country

Bitrate by Country

Query to Insights API (Sample)

{
  project(projectId: ${YOUR_API_KEY}) {
    projectData(
      start: ${moment().subtract(10, 'days')},
      groupBy: COUNTRY,
      country: [AR, BR, ES, FR, MX, US]
    ) {
      resources {
        country,
        quality {
          subscriber {
            videoBitrateAvg
          }
        }
      }
    }
  }
}

Publisher video bitrate for a meeting

Publisher video bitrate for a meeting

Query to Insights API (Sample)

This query will return all your session IDs from the last 10 days.
{
  project(projectId: ${YOUR_API_KEY}) {
    sessionData {
      sessionSummaries(start: ${moment().subtract(10, 'days')}) {
        totalCount
        resources {
          sessionId
        }
      }
    }
  }
}
You can then get the stream statistics (such as the video bitrate) for for publishers and subscribers in a session:
{
  project(projectId: ${YOUR_API_KEY}) {
    sessionData {
      sessions(sessionIds: ["${YOUR_SESSION_ID}"]) {
        resources {
          publisherMinutes
          meetings {
            resources {
              publishers {
                totalCount
                resources {
                  stream {
                    streamId
                  }
                  streamStatsCollection {
                    resources {
                      videoBitrateKbps
                      createdAt
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Publisher and Subscriber minutes by Session

Publisher and Subscriber minutes by Session

Query to Insights API (Sample)

This query will return pages (50 results each) of your session IDs from the last 10 days:
{
  project(projectId: ${YOUR_API_KEY}) {
    sessionData {
      sessionSummaries(
        start: ${moment().subtract(10, 'days')}
        endCursor: "${END_CURSOR}"
      ) {
        totalCount
        pageInfo {
          endCursor
        }
        resources {
          sessionId
        }
      }
    }
  }
}

Note that you use the endCursor value of the returned pageInfo data as the input endCursor parameter to obtain the next page of data. For more information, see Using Pagination in Queries.

You can then get the total publisher and subscriber minutes for a single session as follows:
{
  project(projectId: ${YOUR_API_KEY}) {
    sessionData {
      sessions(sessionIds: ["${YOUR_SESSION_ID}"]) {
        resources {
          sessionId
          publisherMinutes
          subscriberMinutes
          meetings {
            totalCount
          }
        }
      }
    }
  }
}
Additionally, you can get the publisherMinutes and subscriberMinutes of each one of the meetings in the session.
{
  project(projectId: ${YOUR_API_KEY}) {
    sessionData {
      sessions(sessionIds: ["${YOUR_SESSION_ID}"]) {
        resources {
          meetings {
            resources {
              meetingId
              publisherMinutes
              subscriberMinutes
            }
          }
        }
      }
    }
  }
}

Experience Composer Usage Data

Query to Insights API (Sample)

This query returns the daily total minutes that Experience Composer publishes to a video session (independent of an archiver or broadcast composer), Experience Composer publishes to a video session being archived, and Experience Composer publishes to a video session being sent to a live-streaming broadcast:
{
  project(projectId: ${YOUR_API_KEY}) {
    projectData(
      start: ${moment(startDate)},
      end: ${moment(endDate)},
      interval: DAILY
    ) {
      resources {
        intervalStart,
        intervalEnd,
        usage {
          experienceComposer,
          experienceComposerArchive,
          experienceComposerBroadcast
        }
      }
    }
  }
}

Development and Contributing

Interested in contributing? We ❤️ pull requests! See the Contribution guidelines.

Getting Help

We love to hear from you so if you have questions, comments or find a bug in the project, let us know! You can either:

Further Reading

insightsengine's People

Contributors

ggoldens avatar rhainer avatar dependabot[bot] avatar michaeljolley avatar marcioaffonso avatar jeffswartz avatar marinaserranomontes avatar emilianop11 avatar mbiederman12 avatar

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.