Files
openrabbit/docs/enterprise.md
2025-12-21 13:42:30 +01:00

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 processed
  • ai_review_requests_success - Successful requests
  • ai_review_requests_failed - Failed requests
  • ai_review_llm_calls_total - Total LLM API calls
  • ai_review_llm_tokens_total - Total tokens consumed
  • ai_review_comments_posted - Comments posted
  • ai_review_security_findings - Security issues found

Gauges:

  • ai_review_active_requests - Currently processing

Histograms:

  • ai_review_request_duration_seconds - Request latency
  • ai_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 contents
  • repo:write - Create branches (if needed)
  • issue:read - Read issues and PRs
  • issue: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:

  1. Use self-hosted Ollama
  2. Disable external LLM providers
  3. Review audit log retention policies