A React-based Forge application for monitoring external service health checks. This is the main user interface that runs within Atlassian Jira and provides a comprehensive dashboard for managing health check services.
This Forge application serves as the primary interface for the Health Monitor system, allowing users to:
- View all registered health check services
- Monitor real-time status of external services
- Register new services through the custom backend
- Track service availability and performance
- Real-time status display for all services
- Automatic refresh every 30 seconds
- Visual indicators for service health (ALIVE/DOWN)
- Detailed service information and timestamps
- Add New Services: Register external health check endpoints
- Real-time Updates: Live status updates from the backend
- User Information: Display service ownership and details
- Error Handling: Comprehensive error states and messages
- Runs on Atlassian Policy: Fully compliant with Atlassian requirements
- Cryptographic Signatures: Ed25519 signature verification for backend authentication
- Tenant Isolation: Proper data separation per tenant
- No Egress: All processing within Atlassian infrastructure
- Node.js 22+
- Forge CLI installed and configured
- Access to Atlassian Cloud instance
-
Install Dependencies
npm install
-
Build for Production
npm run build
-
Start Development Server
For local development with Forge tunnel access:
npm run start
-
Start Development Server
npm run start
-
Start Forge Tunnel
forge tunnel
-
Access Application
- Open the tunnel URL in your browser
- Or access through your Jira instance
src/
├── components/ # React components
│ ├── Header.tsx # Main header with actions
│ ├── RecordsList.tsx # Health check records list
│ ├── RecordCard.tsx # Individual service card
│ └── index.ts # Component exports
├── hooks/ # Custom React hooks
│ ├── useRecords.ts # Records management hook
│ └── index.ts # Hook exports
├── utils/ # Utility functions
│ ├── registration.ts # Service registration logic
│ └── index.ts # Utility exports
├── types.ts # TypeScript definitions
├── constants.ts # Styling and configuration
├── App.tsx # Main application component
└── index.tsx # Application entry point
App
├── Header
│ ├── Service Registration Button
│ ├── Refresh Button
│ └── Status Information
└── RecordsList
└── RecordCard (for each service)
├── Service URL
├── User Information
├── Status Badge
└── Timestamps
- Initialization: Load context and trigger URL from Forge
- Records Loading: Fetch health check records from Forge storage
- Auto-refresh: Update records every 30 seconds
- Service Registration: Redirect to custom backend for new services
- Status Updates: Display real-time health check results
The application requires the following Forge variables to be set:
# Set backend URL for service registration
forge variables set BACKEND_URL https://your-backend-service.com- Development: Uses Forge tunnel for local development
- Production: Deployed to Atlassian Cloud
- Backend Integration: Communicates with custom backend server
The application uses several Forge resolvers:
getTriggerUrlAndBackendUrl: Get trigger URL and backend URLgetRecords: Fetch all health check recordsgetSignature: Get cryptographic signature for registration
- Service Registration: Redirects to custom backend with signed state
- Health Check Data: Receives updates via Forge triggers
- State Management: Handles base64-encoded state data
- Signature Generation: Forge generates Ed25519 signature for UUID (30-minute validity)
- State Creation: Registration state includes signature and other required data
- Backend Validation: Backend verifies signature using stored public key
- Service Registration: Only valid signatures allow service registration
- Ongoing Updates: All subsequent requests are signed and verified
- Atlassian Design System: Consistent with Atlassian products
- Color Palette: Professional blue and gray tones
- Typography: Clear hierarchy and readability
- Spacing: Consistent spacing scale
- Mobile-first: Optimized for all screen sizes
- Touch-friendly: Large buttons and touch targets
- Flexible Layout: Adapts to different viewport sizes
npm run start- Start development servernpm run build- Build for productionnpm run dev- Development with hot reload
- TypeScript: Full type safety
- Component Architecture: Modular, reusable components
- Custom Hooks: Encapsulated business logic
- Error Handling: Comprehensive error states
-
Build Application
npm run build
-
Deploy to Forge
forge deploy
-
Install in Jira
forge install
- Performance: Optimized bundle size and loading
- Security: Secure communication with backend
- Monitoring: Error tracking and logging
- Updates: Automatic refresh and status updates
- Ed25519 Signatures: Backend authentication using digital signatures
- UUID-based Signatures: Forge generates and signs UUID for 30-minute validity
- Public Key Verification: Backend validates signatures using stored public keys
- Signature Lifecycle: 30-minute signature expiration for security
- State Encryption: Registration state data is base64 encoded
- Secure Communication: HTTPS-only communication
- Input Validation: Client-side validation for all inputs
- XSS Prevention: Proper data sanitization
- Runs on Atlassian: Fully compliant with Atlassian policies
- No Data Egress: All processing within Atlassian infrastructure
- Tenant Isolation: Proper data separation
- Audit Trail: Comprehensive logging and monitoring
-
Backend URL Not Configured
- Set the
BACKEND_URLForge variable - Ensure the backend server is running and accessible
- Set the
-
Records Not Loading
- Check Forge resolver implementation
- Verify database connectivity
- Check browser console for errors
-
Service Registration Fails
- Verify backend server is running
- Check HTTPS configuration
- Ensure proper tunnel setup
-
Build Errors
- Check Node.js version (requires 22+)
- Clear node_modules and reinstall
- Verify TypeScript configuration
MIT License - see LICENSE file for details.