Xurrent (4me) Integration Guide
Overview
The Xurrent (4me) integration enables synchronization of Configuration Items (CIs) from KILLIT CMDB to Xurrent's ITSM platform. This integration uses Xurrent's GraphQL API to create, update, and manage CIs and their relationships.
Table of Contents
Configuration
Prerequisites
- Xurrent Account: You need an active Xurrent account with API access
- API Token: Generate an API token from your Xurrent account with the following scopes:
configuration_items:readconfiguration_items:writeproducts:readteams:read
- Account ID: Your Xurrent account identifier
- Default Support Team: A valid Support Team ID in Xurrent
- Product Mappings: CI Types must be mapped to Xurrent Product IDs
Configuration Steps
-
Navigate to Integration Settings
- Go to CMDB → Integrations → Xurrent Configuration
-
Enter Connection Details
Service URL: Select your Xurrent environment
- Production - Global: https://graphql.xurrent.com
- Production - Australia: https://graphql.au.xurrent.com
- Production - UK: https://graphql.uk.xurrent.com
- Production - Switzerland: https://graphql.ch.xurrent.com
- Production - US: https://graphql.us.xurrent.com
- QA - Global: https://graphql.xurrent.qa
- Demo: https://graphql.xurrent-demo.com
API Token: Your Xurrent API token
Account ID: Your Xurrent account ID
Source Identifier: KILLIT-DISCOVERY (default)
Default Support Team ID: Required - the ID of your default support team
Default Product ID: Optional - fallback product ID if no mapping exists -
Test Connection
- Click "Test Connection" to verify your credentials
-
Configure Product Mappings
- Each CI Type must be mapped to a Xurrent Product ID
- Use the Product Mapping section to:
- Select a CI Type (e.g., Server, Network Device)
- Enter or search for a Xurrent Product ID
- Click "Add Mapping"
- Product mappings are required for successful sync
-
Save Configuration
- Click "Save Configuration" to store your settings
What Gets Synced
Configuration Items (CIs)
The following CI data is synchronized to Xurrent:
-
Basic CI Information
- Name
- Description
- Status (mapped to Xurrent status values)
- Serial Number (if available)
- System ID (unique identifier as
killit-{CI_ID})
-
Classification
- Product (based on CI Type mapping)
- Support Team
- Source (KILLIT-DISCOVERY)
-
Custom Fields
- All custom field values from KILLIT are synced
- Fields are mapped by field ID
-
Relationships
- CI relationships are synced with appropriate relationship types:
- Depends On → software_dependency
- Runs On → parent
- Used By → child
- Uses → parent
- Consists Of → child
- Component Of → parent
- Connected To → network_connection
- Installed On → parent
- CI relationships are synced with appropriate relationship types:
Supported CI Types
Any CI Type can be synced, but must have a product mapping configured. Common types include:
- Servers (Physical and Virtual)
- Network Devices
- Software Instances
- Storage Systems
- Databases
When Does It Sync
Manual Sync
Currently, the integration operates on a manual sync basis:
-
Export via UI
- Navigate to CMDB → Integrations → Xurrent Export
- Select CI Type to export (or "All")
- Choose batch size (default: 50)
- Click "Export to Xurrent"
-
Sync Triggers
- No automatic sync is currently implemented
- CIs are marked with
needsXurrentSyncflag when changes occur - Manual export processes all flagged CIs
Sync Process
-
Marking for Sync
- CIs are automatically flagged for sync when:
- Created
- Updated
- Relationships change
- CIs are automatically flagged for sync when:
-
Export Process
- Queries all CIs with
needsXurrentSync = true - Processes in batches (configurable, default 50)
- For each CI:
- Checks if CI exists in Xurrent (by name)
- Creates new CI or updates existing
- Syncs relationships after CI is created/updated
- Marks CI as synced (
needsXurrentSync = false)
- Queries all CIs with
Data Mapping
Status Mapping
KILLIT Status → Xurrent Status:
active → in_production
inactive → archived
maintenance → undergoing_maintenance
standby → standby_for_continuity
removed → removed
(default) → in_production
Field Mapping
| KILLIT Field | Xurrent Field | Notes |
|---|---|---|
| name | name | Required |
| name | label | Defaults to name |
| description | remarks | Optional |
| customFields.serial_number | serialNr | If available |
| _id | systemID | As killit-{ID} |
| status | status | Mapped values |
| type → productMapping | productId | Required mapping |
| (configured) | supportTeamId | From config |
| relationships | ciRelations | Mapped types |
Product Mapping Requirements
Each CI Type must be mapped to a Xurrent Product:
- Server → Xurrent Server Product ID
- Network Device → Xurrent Network Product ID
- Software → Xurrent Software Product ID
Without a product mapping, CIs cannot be exported.
Architecture
Components
-
Backend Service (
xurrentService.js)- Handles GraphQL API communication
- Manages configuration
- Processes CI exports
- Maps data between systems
-
Controller (
xurrentController.js)- REST API endpoints
- Request validation
- Response formatting
-
Frontend Components
XurrentIntegrationConfig.tsx: Configuration UIXurrentIntegrationExport.tsx: Export management UIBasicProductMapping.tsx: Product mapping interface
-
Data Model (
xurrentConfig.js)- Stores integration configuration
- Product mappings
- Sync status
API Endpoints
GET /api/integrations/xurrent/config - Get configuration
POST /api/integrations/xurrent/config - Save configuration
POST /api/integrations/xurrent/test-connection - Test connection
POST /api/integrations/xurrent/export - Export CIs
GET /api/integrations/xurrent/export-status/:jobId - Check export status
POST /api/integrations/xurrent/product-details - Get product info
GraphQL Operations
-
Find CI
query FindCI($nameval: String!) {
configurationItems(filter: { name: { values: [$nameval] } }) {
nodes { id, name, sourceID, status }
}
} -
Create CI
mutation CreateConfigurationItem($input: ConfigurationItemCreateInput!) {
configurationItemCreate(input: $input) {
configurationItem { id, name, status }
errors { path, message }
}
} -
Update CI
mutation UpdateConfigurationItem($input: ConfigurationItemUpdateInput!) {
configurationItemUpdate(input: $input) {
configurationItem { id, name, status }
errors { path, message }
}
}
Troubleshooting
Common Issues
-
"Missing required field productId"
- Cause: No product mapping for CI Type
- Solution: Configure product mapping in integration settings
-
"Missing required field supportTeamId"
- Cause: No default support team configured
- Solution: Set Default Support Team ID in configuration
-
"Missing required scope"
- Cause: API token lacks necessary permissions
- Solution: Generate new token with required scopes
-
"GraphQL errors: "message":"Not Found""
- Cause: Invalid Product ID or Support Team ID
- Solution: Verify IDs exist in Xurrent
Debug Mode
Enable debug logging:
// Set environment variables
MOCK_XURRENT=true // Enable mock mode for testing
DEBUG=true // Enable detailed logging
Verification Steps
-
Check Configuration
// In backend console
const config = await xurrentService.getConfig();
console.log(config); -
Test Single CI Export
// Export with dry run
const result = await xurrentService.exportCIs({
batchSize: 1,
dryRun: true,
ciType: 'Server'
}); -
Verify Product Mappings
- Ensure all CI Types have valid Xurrent Product IDs
- Test product lookup in Xurrent to verify IDs
Logs
Check logs for detailed information:
- Backend logs:
backend/logs/combined.log - Look for entries with "Xurrent" or "GraphQL"
Best Practices
-
Start Small
- Test with a few CIs first
- Use dry run mode to preview changes
-
Product Mapping
- Map all CI Types before bulk export
- Verify Product IDs in Xurrent first
-
Batch Processing
- Use appropriate batch sizes (10-50)
- Monitor API rate limits
-
Relationship Sync
- Ensure related CIs exist in Xurrent first
- Relationships require both source and target to exist
-
Regular Sync
- Schedule regular manual exports
- Monitor for CIs pending sync
Future Enhancements
-
Automatic Sync
- Webhook-based real-time sync
- Scheduled sync jobs
-
Bi-directional Sync
- Import CIs from Xurrent
- Sync changes from Xurrent back to KILLIT
-
Advanced Mappings
- Custom field mappings
- Conditional logic for field values
-
Sync History
- Track sync operations
- Audit trail for changes
Support
For issues or questions:
- Check the troubleshooting section
- Review backend logs
- Contact system administrator
- Refer to Xurrent API documentation: https://developer.xurrent.com/