4.4 KiB
4.4 KiB
Enterprise Features
Advanced features for enterprise deployments.
Audit Logging
All AI actions are logged for compliance and debugging.
Configuration
enterprise:
audit_log: true
audit_path: "/var/log/ai-review/"
Log Format
Logs are stored as JSONL (JSON Lines) with daily rotation:
/var/log/ai-review/audit-2024-01-15.jsonl
Each line is a JSON object:
{
"timestamp": "2024-01-15T10:30:45.123Z",
"action": "review_pr",
"agent": "PRAgent",
"repository": "org/repo",
"success": true,
"details": {
"pr_number": 123,
"severity": "MEDIUM",
"issues_found": 3
}
}
Actions Logged
| Action | Description |
|---|---|
review_pr |
PR review completed |
triage_issue |
Issue triaged |
llm_call |
LLM API call made |
comment_posted |
Comment created/updated |
labels_applied |
Labels added |
security_scan |
Security scan completed |
Querying Logs
from enterprise import get_audit_logger
logger = get_audit_logger()
# Get all logs for a date range
logs = logger.get_logs(
start_date="2024-01-01",
end_date="2024-01-31",
action="review_pr",
repository="org/repo",
)
# Generate summary report
report = logger.generate_report(
start_date="2024-01-01",
end_date="2024-01-31",
)
print(f"Total events: {report['total_events']}")
print(f"Success rate: {report['success_rate']:.1%}")
Metrics & Observability
Track performance and usage metrics.
Configuration
enterprise:
metrics_enabled: true
Available Metrics
Counters:
ai_review_requests_total- Total requests processedai_review_requests_success- Successful requestsai_review_requests_failed- Failed requestsai_review_llm_calls_total- Total LLM API callsai_review_llm_tokens_total- Total tokens consumedai_review_comments_posted- Comments postedai_review_security_findings- Security issues found
Gauges:
ai_review_active_requests- Currently processing
Histograms:
ai_review_request_duration_seconds- Request latencyai_review_llm_duration_seconds- LLM call latency
Getting Metrics
from enterprise import get_metrics
metrics = get_metrics()
# Get summary
summary = metrics.get_summary()
print(f"Total requests: {summary['requests']['total']}")
print(f"Success rate: {summary['requests']['success_rate']:.1%}")
print(f"Avg latency: {summary['latency']['avg_ms']:.0f}ms")
print(f"P95 latency: {summary['latency']['p95_ms']:.0f}ms")
print(f"LLM tokens used: {summary['llm']['tokens']}")
# Export Prometheus format
prometheus_output = metrics.export_prometheus()
Prometheus Integration
Expose metrics endpoint:
from flask import Flask
from enterprise import get_metrics
app = Flask(__name__)
@app.route("/metrics")
def metrics():
return get_metrics().export_prometheus()
Rate Limiting
Prevent API overload and manage costs.
Configuration
enterprise:
rate_limit:
requests_per_minute: 30
max_concurrent: 4
Built-in Rate Limiting
The BaseAgent class includes automatic rate limiting:
class BaseAgent:
def __init__(self):
self._min_request_interval = 1.0 # seconds
def _rate_limit(self):
elapsed = time.time() - self._last_request_time
if elapsed < self._min_request_interval:
time.sleep(self._min_request_interval - elapsed)
Queue Management
The dispatcher handles concurrent execution:
dispatcher = Dispatcher(max_workers=4)
For high-volume environments, use async dispatch:
future = dispatcher.dispatch_async(event_type, event_data, owner, repo)
# Continue with other work
result = future.result() # Block when needed
Security Considerations
Token Permissions
Minimum required permissions for AI_REVIEW_TOKEN:
repo:read- Read repository contentsrepo:write- Create branches (if needed)issue:read- Read issues and PRsissue:write- Create comments, labels
Network Isolation
For air-gapped environments, use Ollama:
provider: ollama
# Internal network address
# Set via environment: OLLAMA_HOST=http://ollama.internal:11434
Data Privacy
By default:
- Code is sent to LLM provider for analysis
- Review comments are stored in Gitea
- Audit logs are stored locally
For sensitive codebases:
- Use self-hosted Ollama
- Disable external LLM providers
- Review audit log retention policies