Skip to content

UIReportReader Microservice

Overview

The UIReportReader microservice provides a secure API for generating and retrieving various types of reports for the Publisher platform's user interface. It serves as the backend service for dashboard reporting, analytics, and data visualization components in the Publisher UI.

Business Purpose

This service enables users to access real-time and historical reporting data through a secure, authenticated API. It supports multiple report types including billing reports, campaign snapshots, account history, and various analytics reports that power the Publisher platform's dashboard and reporting features.

Architecture

Service Type

  • Deployment: Kubernetes containerized microservice
  • Trigger: HTTP-triggered Azure Function
  • Runtime: Node.js
  • Authentication: JWT-based with role-based access control

Key Components

  1. Handler: Main request processor and report orchestrator
  2. Actions: Individual report generators for different report types
  3. Auth Module: JWT authentication and authorization system
  4. Helpers: Utility functions for blob storage and data processing

Data Flow

graph TD
    A[HTTP Request] --> B[Authentication]
    B --> C[Authorization Check]
    C --> D[Handler Processing]
    D --> E[Action Selection]
    E --> F[SQL Query Generation]
    F --> G[Snowflake Database]
    G --> H[Report Generation]
    H --> I[Event Hub Publishing]
    I --> J[Response Cleanup]
    J --> K[HTTP Response]

    B --> L[JWT Verification]
    C --> M[Role Authorization]
    C --> N[Publisher Authorization]

Dependencies

External Services

  • Azure Cosmos DB: Publisher database for vendor and campaign data
  • Snowflake: Data warehouse for report queries
  • Azure Event Hub: Report event publishing
  • Azure Blob Storage: Report file storage

NPM Dependencies

  • @azure/cosmos: Cosmos DB client
  • jsonwebtoken: JWT token handling
  • moment: Date/time manipulation
  • lodash: Utility functions
  • async: Asynchronous flow control
  • idgen: ID generation

Configuration

Environment-Specific Configs

  • config.js: Development configuration
  • config.int.js: Integration environment
  • config.prod.js: Production environment

Key Configuration Parameters

  • logLevel: Logging verbosity
  • sasToken: Snowflake SAS token for blob access
  • jwtSecret: JWT verification secret
  • Event Hub: Report event hub configuration

API Endpoints

POST /

Generates reports based on the specified action and parameters.

Authentication: Required (Bearer token) Authorization: Roles: admin, user

Request Body:

{
  "action": "GenerateReport|BillingReport|AccountHistory|...",
  "vendorId": "publisher_id",
  "startDate": "2024-01-01",
  "endDate": "2024-01-31",
  "groupBys": ["PUBLISHER", "CAMPAIGN"],
  "campaigns": ["campaign1", "campaign2"],
  "products": ["product1", "product2"],
  "industries": ["industry1"],
  "experienceTypes": ["type1"]
}

Response:

{
  "unloadSql": "SQL query (if verbose=true)",
  "publisherkey": "publisher_id",
  "reportData": { /* report results */ }
}

Report Types

Available Reports

  1. GenerateReport: Standard reporting with customizable grouping
  2. GenerateReportInbound: Inbound traffic reporting
  3. BillingReport: Financial and billing data
  4. AccountHistory: Account activity history
  5. RejectionReasons: Campaign rejection analysis
  6. CampaignSnapshotReport: Campaign performance snapshots
  7. AdvertiserSnapshotReport: Advertiser performance data
  8. StatesSnapshotReport: Geographic performance data
  9. ExchangeSnapshotReport: Exchange performance metrics
  10. VendorScoreSnapshotReport: Vendor scoring analytics
  11. AgeSnapshotReport: Age demographic analysis

Report Parameters

  • Date Range: startDate, endDate
  • Filtering: campaigns, products, industries, experienceTypes
  • Grouping: Configurable group-by clauses
  • Publisher Scope: Vendor-specific or global (admin only)

Authentication & Authorization

JWT Authentication

  • Bearer token required in Authorization header
  • Token verification using configured JWT secret
  • Claims extraction for user context

Role-Based Access Control

  • admin: Full access to all reports and publishers
  • user: Limited access based on publisher scope

Publisher Authorization

  • Users restricted to their assigned publisher organization
  • Global access (*) allowed for admin users
  • Vendor scope validation through Cosmos DB

Data Processing

SQL Query Generation

  • Dynamic SQL generation based on report parameters
  • Parameterized queries for security
  • Support for complex filtering and grouping

Blob Storage Integration

  • Configurable blob file naming patterns
  • SAS token authentication for Snowflake access
  • Support for date-based partitioning

Response Processing

  • SQL query removal in non-verbose mode
  • Sensitive data filtering
  • JSON response optimization

Event Publishing

Report Events

  • Published to 'report' Event Hub
  • Contains report metadata and execution details
  • Includes user context and request parameters

Event Structure

{
  "query": "executed_sql_query",
  "reportSource": {
    "serviceName": "UIReportReader",
    "serviceVersion": "version",
    "sourceType": "UI Report"
  },
  "reportConfig": {
    "publisherkey": "publisher_id",
    "reportId": "DynamicUIReport",
    "reportName": "report_type",
    "deliver": false
  },
  "request": {
    "uiRequest": true,
    "body": { /* request body */ },
    "user": "user_name"
  }
}

Error Handling

Authentication Errors

  • Invalid or missing Bearer token
  • JWT verification failures
  • Expired tokens

Authorization Errors

  • Insufficient role permissions
  • Publisher scope violations
  • Invalid vendor access

Processing Errors

  • Invalid report parameters
  • Database connection failures
  • SQL execution errors

Development

Local Setup

  1. Install dependencies: npm install
  2. Configure JWT secret and database connections
  3. Set up Snowflake and Cosmos DB credentials
  4. Run locally using Azure Functions Core Tools

Testing

  • Test file: test.js
  • Manual testing capabilities for individual reports
  • Authentication testing utilities

Build Process

  • Webpack configuration for bundling
  • Terser plugin for code minification
  • Copy plugin for static assets

Deployment

Kubernetes Configuration

  • Containerized deployment
  • Health check endpoints: /live and /ready
  • Environment-specific function.json configurations

Environment Variables

  • JWT secrets and signing keys
  • Database connection strings
  • Snowflake credentials and SAS tokens
  • Event Hub connection strings

Security Considerations

Token Security

  • JWT tokens with expiration
  • Secure secret management
  • Role-based access enforcement

Data Protection

  • Publisher data isolation
  • SQL injection prevention
  • Sensitive data filtering in responses

Audit Trail

  • Request logging and monitoring
  • User activity tracking
  • Report generation auditing

This service integrates with: - Publisher UI: Primary consumer of report APIs - ReportGenerator: Downstream report processing - DocumentCRUD: Campaign and vendor data source - Authentication Services: User identity and roles

Troubleshooting

Common Issues

  1. Authentication Failures: Check JWT secret configuration
  2. Authorization Errors: Verify user roles and publisher assignments
  3. Report Generation Failures: Check Snowflake connectivity and SQL syntax
  4. Performance Issues: Monitor query complexity and data volume

Monitoring Points

  • Authentication success/failure rates
  • Report generation latency
  • Database query performance
  • Event publishing success rates