Releases: newrelic-experimental/gitlab
2.2.2
What's Changed
Security
- Bump
requests2.32.5 → 2.33.0 (Dependabot CVE fix) by @dependabot in #67
Documentation
- Add
GLAB_API_WORKERS,GLAB_JOB_WORKERS,GLAB_EXPORT_BATCH_SIZEto the New Relic Metrics Exporter configuration table - Bump Docker image references to 2.2.2
Docker Images
docker.io/dpacheconr/gitlab-exporter:2.2.2docker.io/dpacheconr/gitlab-metrics-exporter:2.2.2
Full Changelog: v2.2.1...v2.2.2
2.2.1
2.2.1 — OTEL Reliability, Async Performance & Attribute Promotion
Bug Fixes
- OTEL data loss on exit: All OTEL providers (traces, logs, metrics) are now explicitly shut down before the process exits, ensuring batched telemetry is fully flushed and not silently dropped
- OTEL attribute limit checks: Fixed incorrect log-record attribute limit checks; added coverage for value-length truncation
- OTEL attribute truncation warnings: Emit a warning with the list of dropped keys when attributes are truncated
- Missing import: Fixed
ImportErrorforemit_collection_summaryinmain.py - Environments always emitted: Environments are now exported regardless of pipeline activity in the window
last_activity_afterfilter removed: Eliminated incorrect API filter that caused projects without recent pipeline activity to be silently skippedGLAB_EXPORT_ALL_PROJECTSdefault corrected: Default is nowtrue(export all projects as a snapshot), matching documented intent- urllib3 connection pool: Pool size is now set to match the worker count; added 429 (rate-limit) retry logic
- Debug output: Header content no longer appears in debug logs — only presence (
<set>/None) is indicated
Features
GLAB_ATTRIBUTES_TO_KEEP: New variable to promote specific attributes to resource level, guaranteeing they are always sent to New Relic regardless of log-record attribute limits. System defaults (id,project_id,pipeline_id,status, etc.) are always promoted; use this to add custom fieldsGLAB_EXPORT_ALL_PROJECTS: Opt-in/opt-out control over historical vs windowed project exports- OTEL queue monitoring: Active queue depth monitoring during large exports; warnings emitted when queue approaches capacity
- Run summary tracking: Exported vs skipped project counts are tracked and logged at the end of each run
Performance
- Blocking API calls moved off the event loop: All python-gitlab
list()andget()calls now run in thread-pool executors, fully unblocking the asyncio event loop - Batched project processing: Projects processed in configurable batches (
GLAB_EXPORT_BATCH_SIZE, default 100) with OTEL queue drain between batches — prevents queue overflow on large instances - Skip pipeline-dependent resources early: Deployments, environments (via pipelines), and releases are skipped when no pipelines exist in the time window
get_jobsper-page tuning + regex pre-compilation: Reduced API round-trips and eliminated repeated regex compilation
Configuration
| Variable | Change |
|---|---|
GLAB_ATTRIBUTES_TO_KEEP |
New — promote attributes to resource level |
GLAB_API_WORKERS |
New — thread pool size for API list() calls |
GLAB_JOB_WORKERS |
New — thread pool size for per-pipeline job fetches |
GLAB_EXPORT_BATCH_SIZE |
New — projects per batch before OTEL queue drain |
GLAB_SUMMARY_ESTATE_COUNTS |
Removed — replaced by built-in run summary |
Documentation
- README updated with all new variables, attribute promotion tiers, large-scale deployment guidance, and OTEL shutdown/queue monitoring
.env.examplefully refreshed with BLRP tuning, concurrency settings, and inline comments- Test count updated: 322 → 339 tests
Docker Images
docker.io/dpacheconr/gitlab-exporter:2.2.1docker.io/dpacheconr/gitlab-metrics-exporter:2.2.1
2.2.0
Some logs were being read from GitLab but never exported
Now properly exporting all job logs with otel_logger.info()
Strip trailing newlines that prevent proper message parsing
Remove ISO timestamp + log level prefix from GitLab logs
Regex pattern: r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[.\d]*Z?\s+[\dA-Za-z]+\s+'
Handles both numeric (010) and alphanumeric (00O) log levels
Messages now parseable by New Relic and other log consumers
Filter None values completely to prevent NoneType validation errors
Handle complex types: lists with None, dicts, other objects
Validate attributes at multiple pipeline stages:
Resource creation (skip unset env vars)
Per-log filtering (remove None, empty strings, "None" strings) * Pre-export final pass (ensure absolutely no None values)
Only allow valid OTEL types: bool, str, bytes, int, float
Convert safe types to strings, skip problematic types
Upgraded dependencies
OpenTelemetry: 1.21.0 -> 1.39.1 (latest stable, 2 years of fixes)
structlog: 23.2.0 -> 25.5.0
python-gitlab: 4.2.0 -> 4.7.0
regex, pyrfc3339, schedule, pandas, requests all updated
Improves stability and compatibility
Full Changelog: 2.1.0...2.2.0
2.1.0
What's Changed
Release v2.1.0 - Configurable Project Export
New Features:
- Add GLAB_EXPORT_ALL_PROJECTS configuration option (default: true)
- Project metadata now exported as complete snapshot by default
- Configurable to maintain legacy time-filtered behavior if needed
Improvements:
- Fix: Projects without recent activity now appear on dashboards
- Fix: Initial deployment now exports all project data
- Documentation: Add Group Access Token requirements (Owner role for runners)
- Documentation: Add troubleshooting for missing project and runner data
Configuration:
- GLAB_EXPORT_ALL_PROJECTS=true (default): Export all projects as snapshot
- GLAB_EXPORT_ALL_PROJECTS=false (legacy): Only export recently active projects
Docker Images (DockerHub):
- docker.io/dpacheconr/gitlab-exporter:2.1.0
- docker.io/dpacheconr/gitlab-metrics-exporter:2.1.0
Backward Compatibility:
- No breaking changes
- Default behavior improves functionality
- Legacy behavior available via GLAB_EXPORT_ALL_PROJECTS=false"
Full Changelog: 2.0.1...2.1.0
2.0.2
What's Changed
- Update README.md by @dpacheconr in #54
- Fixes critical error: 'timestamp does not conform to RFC 3339' for pipelines with invalid or null finished_at values
Full Changelog: 2.0.1...2.0.2
2.0.1
2.0.0
What's Changed
BREAKING CHANGES:
- Complete project restructure with new modular architecture
- Renamed directories from hyphenated to underscore format (new-relic-* to new_relic_*)
- Removed legacy base image approach in favor of shared components
- Updated Docker image names and entry points for consistency
MAJOR FEATURES:
-
Modular Architecture Redesign
-
Introduced shared components library for common functionality
-
Created processor-based architecture with specialized handlers:
- BaseProcessor: Common processing interface
- JobProcessor: Individual job processing and tracing
- PipelineProcessor: Pipeline-level orchestration
- BridgeProcessor: Bridge job handling and downstream triggers
- DownstreamProcessor: Multi-project pipeline support
-
Separated exporters into dedicated modules with clear responsibilities
-
Enhanced Bridge and Downstream Pipeline Support
-
Full support for GitLab bridge jobs and downstream pipeline triggers
-
Comprehensive bridge processing with proper parent-child relationships
-
Multi-project pipeline tracing across organizational boundaries
-
Bridge jobs can be excluded using GLAB_EXCLUDE_JOBS configuration
-
Implemented GLAB_USE_NAMESPACE_SLUG feature
-
Centralized Configuration Management
-
Type-safe configuration system with dataclasses and validation
-
Automatic New Relic region detection (US/EU) based on API key format
-
Environment variable validation with descriptive error messages
-
Backward compatibility with deprecation warnings for smooth migration
-
Health monitoring and configuration validation endpoints
-
Structured Logging System
-
Replaced all print statements with structured JSON logging
-
Performance and debugging improvements
-
Comprehensive Test Suite
-
Integration tests for GitLab and New Relic APIs
-
Performance testing and benchmarking
-
Error handling and edge case validation
-
Configuration management testing
-
Processor-specific test suites
-
OTEL attribute filtering and helpers testing
TECHNICAL IMPROVEMENTS:
-
OpenTelemetry Enhancements
-
Improved attribute parsing for nested objects and arrays
-
Enhanced span status handling and instrumentation
-
Optimized resource detection and attribute management
-
Data Processing Improvements
-
Enhanced JSON array flattening for complex GitLab data structures
-
Improved attribute filtering and sanitization
-
Better handling of nested pipeline data and relationships
-
Optimized data transformation pipelines
-
Error Handling and Resilience
-
Comprehensive exception handling with custom exception classes
-
Graceful degradation for API failures and network issues
-
Improved retry logic and rate limiting
-
Better error reporting and debugging capabilities
-
Performance Optimizations
-
Reduced logging verbosity with debug-level operational details
-
Optimized API calls and data processing workflows
-
Improved memory usage and resource management
-
Enhanced caching and data deduplication
INFRASTRUCTURE CHANGES:
- Docker and Deployment
- Updated Dockerfiles with proper PYTHONPATH configuration
- Improved container entry points and health checks
- Enhanced docker-compose.yaml with corrected service definitions
MIGRATION NOTES:
- Update Docker image references to new 2.0.0 tag
- Bridge processing is now enabled by default
Full Changelog: 1.0.15...2.0.0
1.0.18
Release 1.0.18
Updated README documentation for clarity and accuracy.
Removed duplicate and outdated sections.
No code changes; documentation only.
Changed log message attribute from message to log for New Relic compatibility.
Applied PEP8 formatting and code cleanup for better readability and maintainability.
No changes to core functionality except for log attribute update.
Full Changelog: 1.0.17...1.0.18
1.0.16
What's Changed
- Fix stage reporting bug #42 by @keifhausin in #43
New Contributors
- @keifhausin made their first contribution in #43
Full Changelog: 1.0.15...1.0.16
1.0.15
Full Changelog: 1.0.14...1.0.15