Pulsar Reporting

What's Pulsar Reporting?

Pulsar Reporting Framework is an extensible data visualization and reporting framework designed to glean real-time insights from Pulsar Pipeline.

Users can easily create reports using a visual editor, and a rich set of widgets. Pulsar Reporting Framework enables users to quickly create multi-dimensional, interactive reports with drill-down and slice-and-dice capabilities. It includes a robust data query engine that can operate with different types of data metric stores such as Druid and other data sources.


The raw events and session events from Pulsar Pipeline are flowing to Kafka using Pulsar Kafka channel. Then the Druid cluster ingests the raw events and sessions from Kafka topics into two tables, one for sessions and one for events. Both tables are indexed in one second granularity to enable realtime reporting capability. Pulsar Reporting API provides an abstract layer to access the tables, and the Reporting UI gets the data from the API to build different charts.


Pulsar Reporting UI

Pulsar Reporting UI provides real-time visualization of analytics data store built on Druid, and has a web interface for analytics using modern front-end technology. Pulsar Reporting UI is built on AngularJS for flexibility and scalability, and it leverages several other open-source products to provide common functions, such as nvd3 for most of the chart visualization and bootstrap 3 for UI look-and-feel.

Real-time and self-service capabilities

  • - Snapshot in one single place to understand what your users are doing on the site now.
  • - Ability to respond to our user behaviours within seconds
  • - Easy and quick to generate customized dashboards
  • - Rich charting widgets with line, bar, histogram, pie, stack, datatable, etc.


AngularJS based UI framework

  • - Easy to integrate as a bower dependency
  • - More than 10 directives to build customized reports
  • - Configurable and extensible
  • - Documented with ngdocs


Bootstrap 3 based user interface

  • - Modern look and feel
  • - Responsive design - cross device compatibility
  • - Out of the box dashboard templates
  • - Pre-packaged CSS for quick start

Pulsar Reporting API

Pulsar Reporting API has a robust data query engine that can be extended to support many different types of data sources, and provides dynamic data source management and powerful authorization and authentication to easily manage all resources

Analytics API: support both SQL and structured JSON queries.

Dynamic data source management: easily integrate with OLAP engines and data sources

Security and permission: powerful authorization and authentication

  Get Session metrics using SQL API:
  Endpoint: http://<API_Server>/prapi/v2/sql
  Method: POST
  Body: {"sql": "SELECT (count(session) - sum(retvisitor)) * 1.0 / count(session) newSessionRate, sum(sessionDuration) * 1000 totalSessionDurations, count(session) sessions, sum(sessionDuration) totalSessions, sum(totalpagect) totalPages, country, trafficSource FROM pulsar_session WHERE site=0 and country='usa' GROUP BY country, trafficSource ORDER BY sum(totalpagect) ASC limit 20", "intervals": "2015-10-11 03:00:32/2015-10-18 01:00:32", "granularity": "day"}

  Structured JSON API:REST
  Endpoint: http://<API_Server>/prapi/v2/realtime
  Method: POST
  Body: {"metrics": ["pageviews"], "dimensions": ["trafficsource"], "filter": "site=0"   }

  Add a druid datasource:
  Endpoint: http://<API_Server>/prapi/v2/datasources
  Method: POST
  Body: {"name":"", "displayName":"druidTest", "endpoint":"http://<API_Server>/druid/v2","type":"druid","properties":"{ }"}

  Add users to a group
  Endpoint: http://<API_Server>/prapi/v2/groups/{groupName}/users
  Payload: ["user1","user2",…]

  Delete users from a group
  Endpoint: http://<API_Server>/prapi/v2/groups/{groupName}/users?batch=username1,username2

  Add rights to a group
  Endpoint: http://<API_Server>/prapi/v2/groups/{groupName}/rights
  Payload: [{"rightName":"datasource1_MANAGE", "rightType": "1"}]

  Delete rights from a group
  Endpoint: http://<API_Server>/prapi/v2/groups/{groupName}/rights?batch=rightName1,rightName2