Atlassian Chargeback Dashboard

Serverless application for tracking and allocating Atlassian license costs across TP ICAP business units

What It Does

Purpose

Automatically identifies all Atlassian Jira and Confluence licensed users across TP ICAP, matches them to HR data (division, department, cost centre), and presents an interactive dashboard for license cost allocation and chargeback reporting.

Key Capabilities

  • Real-time billable user tracking across Jira & Confluence
  • HR matching by email + UPN for cost centre allocation
  • External user detection (GMEX, Liquidnet, subsidiaries)
  • Interactive D3 bubble chart with drill-down
  • CSV export at every level
  • Automated daily refresh (8am, 12pm, 4pm)

Architecture

┌─────────────────────────────────────────────────────────────────────┐
│  DATA COLLECTION (Your Machine — Scheduled Task, every 4 hours)    │
└──────────────────────────┬──────────────────────────────────────────┘
                           │
          ┌────────────────┼────────────────┐
          ▼                ▼                ▼
  ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐
  │  Atlassian   │  │  Quarterback │  │  Atlassian Site  │
  │  Org Admin   │  │  HR API      │  │  Group Members   │
  │  API         │  │              │  │  API             │
  └──────┬───────┘  └──────┬───────┘  └────────┬─────────┘
         │                 │                     │
         │  9,000 org      │  6,776 HR           │  External users
         │  users          │  records            │  (GMEX, etc.)
         ▼                 ▼                     ▼
  ┌─────────────────────────────────────────────────────────────────┐
  │  Refresh_Data.ps1 — Match, Merge, Build JSON                   │
  └──────────────────────────┬──────────────────────────────────────┘
                           │
                    POST /upload
                    (API Key auth)
                           │
┌──────────────────────────┼──────────────────────────────────────────┐
│  AWS (eu-west-1)         ▼                                         │
│         ┌────────────────────────────┐                             │
│         │  API Gateway (HTTP API)    │                             │
│         │  h7larzbbb6                │                             │
│         └────────────┬───────────────┘                             │
│                      ▼                                             │
│         ┌────────────────────────────┐    ┌───────────────────┐    │
│         │  Lambda                    │───▶│  S3 Bucket        │    │
│         │  chargeback-dashboard      │◀───│  tpicap-chargeback │    │
│         │  Node.js 20               │    │  -data             │    │
│         └────────────────────────────┘    └───────────────────┘    │
│                                                                    │
└────────────────────────────────────────────────────────────────────┘
                           │
                    GET / (HTML)
                    GET /chargeback (JSON)
                           │
                           ▼
                  ┌──────────────────┐
                  │  Browser          │
                  │  D3 Bubble Chart  │
                  │  + Drill-down     │
                  └──────────────────┘

Dashboard Features

Visualisation

  • D3 packed bubble chart — Divisions → Departments → Users
  • Product filter toggles: All, Billable, Jira, Confluence, Both, No License, Unmatched
  • Division & department summary tables with distribution bars
  • Breadcrumb navigation
  • Tooltips with user counts and percentages

Data & Export

  • Global user search across all divisions
  • Sortable user tables with per-column search
  • CSV export: all data, current view, division, department, search results, summary, unmatched
  • Unmatched users with reason classification (service account, external user, no HR record)
  • Refresh button to reload latest data

AWS Resources

ResourceNamePurpose
Lambdachargeback-dashboardServes dashboard HTML, JSON data, and accepts uploads. Node.js 20, 512MB, 120s timeout
API Gatewaychargeback-api (h7larzbbb6)HTTP API. Routes: GET / (HTML), GET /chargeback (JSON), POST /upload (data ingest). Custom domain configured
Custom Domainatlassian-chargeback.dev.sail.tpicapcloud.comACM cert + Route 53 alias in dev.sail.tpicapcloud.com hosted zone
S3tpicap-chargeback-dataStores chargeback-data.json and dashboard.html
IAM Rolechargeback-devops-lambda-roleS3 read/write + Lambda execution + CloudWatch logs

Schedule & Cost

Automated Refresh

  • Windows Task Scheduler on local machine
  • Runs daily at 8am, 12pm, 4pm
  • Uses PowerShell 7 (pwsh) — required for HR API compatibility
  • Uploads via API Gateway — no AWS SSO session needed
  • HR API cache fallback if Quarterback is unavailable

Monthly AWS Cost

Lambda~$0.00 (free tier)
API Gateway~$0.00 (free tier)
S3~$0.01
Secrets Manager~$0.80 (2 secrets, reference only)
CloudWatch Logs~$0.01
Total< $1/month

Access

🔗
Dashboard URL
https://atlassian-chargeback.dev.sail.tpicapcloud.com