mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-20 18:11:27 -07:00
164 lines
3.4 KiB
Markdown
164 lines
3.4 KiB
Markdown
## API Reference
|
|
|
|
### GraphQL Analytics API
|
|
|
|
**Endpoint**: `https://api.cloudflare.com/client/v4/graphql`
|
|
|
|
**Query Workers Metrics**:
|
|
```graphql
|
|
query {
|
|
viewer {
|
|
accounts(filter: { accountTag: $accountId }) {
|
|
workersInvocationsAdaptive(
|
|
limit: 100
|
|
filter: {
|
|
datetime_geq: "2025-01-01T00:00:00Z"
|
|
datetime_leq: "2025-01-31T23:59:59Z"
|
|
scriptName: "my-worker"
|
|
}
|
|
) {
|
|
sum {
|
|
requests
|
|
errors
|
|
subrequests
|
|
}
|
|
quantiles {
|
|
cpuTimeP50
|
|
cpuTimeP99
|
|
wallTimeP50
|
|
wallTimeP99
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Analytics Engine SQL API
|
|
|
|
**Endpoint**: `https://api.cloudflare.com/client/v4/accounts/{account_id}/analytics_engine/sql`
|
|
|
|
**Authentication**: `Authorization: Bearer <API_TOKEN>` (Account Analytics Read permission)
|
|
|
|
**Common Queries**:
|
|
|
|
```sql
|
|
-- List all datasets
|
|
SHOW TABLES;
|
|
|
|
-- Time-series aggregation (5-minute buckets)
|
|
SELECT
|
|
intDiv(toUInt32(timestamp), 300) * 300 AS time_bucket,
|
|
blob1 AS endpoint,
|
|
SUM(_sample_interval) AS total_requests,
|
|
AVG(double1) AS avg_response_time_ms
|
|
FROM api_metrics
|
|
WHERE timestamp >= NOW() - INTERVAL '24' HOUR
|
|
GROUP BY time_bucket, endpoint
|
|
ORDER BY time_bucket DESC;
|
|
|
|
-- Top customers by usage
|
|
SELECT
|
|
index1 AS customer_id,
|
|
SUM(_sample_interval * double1) AS total_api_calls,
|
|
AVG(double2) AS avg_response_time_ms
|
|
FROM api_usage
|
|
WHERE timestamp >= NOW() - INTERVAL '7' DAY
|
|
GROUP BY customer_id
|
|
ORDER BY total_api_calls DESC
|
|
LIMIT 100;
|
|
|
|
-- Error rate analysis
|
|
SELECT
|
|
blob1 AS error_type,
|
|
COUNT(*) AS occurrences,
|
|
MAX(timestamp) AS last_seen
|
|
FROM error_tracking
|
|
WHERE timestamp >= NOW() - INTERVAL '1' HOUR
|
|
GROUP BY error_type
|
|
ORDER BY occurrences DESC;
|
|
```
|
|
|
|
### Console Logging API
|
|
|
|
**Methods**:
|
|
```typescript
|
|
// Standard methods (all appear in Workers Logs)
|
|
console.log('info message');
|
|
console.info('info message');
|
|
console.warn('warning message');
|
|
console.error('error message');
|
|
console.debug('debug message');
|
|
|
|
// Structured logging (recommended)
|
|
console.log({
|
|
level: 'info',
|
|
user_id: '123',
|
|
action: 'checkout',
|
|
amount: 99.99,
|
|
currency: 'USD'
|
|
});
|
|
```
|
|
|
|
**Log Levels**: All console methods produce logs; use structured fields for filtering:
|
|
```typescript
|
|
console.log({
|
|
level: 'error',
|
|
message: 'Payment failed',
|
|
error_code: 'CARD_DECLINED'
|
|
});
|
|
```
|
|
|
|
### Analytics Engine Binding Types
|
|
|
|
```typescript
|
|
interface AnalyticsEngineDataset {
|
|
writeDataPoint(event: AnalyticsEngineDataPoint): void;
|
|
}
|
|
|
|
interface AnalyticsEngineDataPoint {
|
|
// Indexed strings (use for filtering/grouping)
|
|
indexes?: string[];
|
|
|
|
// Non-indexed strings (metadata, IDs, URLs)
|
|
blobs?: string[];
|
|
|
|
// Numeric values (counts, durations, amounts)
|
|
doubles?: number[];
|
|
}
|
|
```
|
|
|
|
**Field Limits**:
|
|
- Max 20 indexes
|
|
- Max 20 blobs
|
|
- Max 20 doubles
|
|
- Max 25 `writeDataPoint` calls per request
|
|
|
|
### Tail Consumer Event Type
|
|
|
|
```typescript
|
|
interface TraceItem {
|
|
event: TraceEvent;
|
|
logs: TraceLog[];
|
|
exceptions: TraceException[];
|
|
scriptName?: string;
|
|
}
|
|
|
|
interface TraceEvent {
|
|
outcome: 'ok' | 'exception' | 'exceededCpu' | 'exceededMemory' | 'unknown';
|
|
cpuTime: number; // microseconds
|
|
wallTime: number; // microseconds
|
|
}
|
|
|
|
interface TraceLog {
|
|
timestamp: number;
|
|
level: 'log' | 'info' | 'debug' | 'warn' | 'error';
|
|
message: any; // string or structured object
|
|
}
|
|
|
|
interface TraceException {
|
|
name: string;
|
|
message: string;
|
|
timestamp: number;
|
|
}
|
|
``` |