mirror of
https://github.com/karust/openserp.git
synced 2026-08-05 16:53:54 +08:00
916 lines
27 KiB
YAML
916 lines
27 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: OpenSERP API
|
|
version: 0.6.3
|
|
description: >
|
|
OpenSERP provides dedicated and multi-engine search endpoints for Google, Yandex,
|
|
Baidu, Bing, and DuckDuckGo. Responses are normalized into a shared schema and
|
|
include runtime metadata via response headers.
|
|
license:
|
|
name: MIT
|
|
url: https://opensource.org/licenses/MIT
|
|
servers:
|
|
- url: http://127.0.0.1:7000
|
|
description: Local default server
|
|
security: []
|
|
tags:
|
|
- name: Search
|
|
description: Dedicated per-engine search endpoints
|
|
- name: Mega
|
|
description: Cross-engine aggregated search endpoints
|
|
- name: Health
|
|
description: Health and readiness endpoints
|
|
- name: Stats
|
|
description: Runtime statistics endpoints
|
|
- name: Docs
|
|
description: OpenAPI and Swagger UI endpoints
|
|
paths:
|
|
/{engine}/search:
|
|
get:
|
|
tags: [Search]
|
|
operationId: searchWeb
|
|
summary: Search web results from a specific engine
|
|
description: >
|
|
Engine path values are `google`, `yandex`, `baidu`, `bing`, and `duck` (`duck` maps
|
|
to DuckDuckGo internally).
|
|
parameters:
|
|
- $ref: "#/components/parameters/EnginePath"
|
|
- $ref: "#/components/parameters/TextQuery"
|
|
- $ref: "#/components/parameters/LangQuery"
|
|
- $ref: "#/components/parameters/DateQuery"
|
|
- $ref: "#/components/parameters/FileQuery"
|
|
- $ref: "#/components/parameters/SiteQuery"
|
|
- $ref: "#/components/parameters/LimitQuery"
|
|
- $ref: "#/components/parameters/StartQuery"
|
|
- $ref: "#/components/parameters/FilterQuery"
|
|
- $ref: "#/components/parameters/AnswersQuery"
|
|
- $ref: "#/components/parameters/UseProxyHeader"
|
|
responses:
|
|
"200":
|
|
description: Search results
|
|
headers:
|
|
X-Cache:
|
|
$ref: "#/components/headers/XCache"
|
|
X-Fallback-Engine:
|
|
$ref: "#/components/headers/XFallbackEngine"
|
|
X-Proxy-Mode:
|
|
$ref: "#/components/headers/XProxyMode"
|
|
X-Proxy-Tag:
|
|
$ref: "#/components/headers/XProxyTag"
|
|
X-Proxy-Used:
|
|
$ref: "#/components/headers/XProxyUsed"
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/SearchResult"
|
|
examples:
|
|
default:
|
|
value:
|
|
- rank: 1
|
|
url: https://go.dev/doc/
|
|
title: The Go Programming Language
|
|
description: Official Go language documentation.
|
|
ad: false
|
|
"503":
|
|
$ref: "#/components/responses/ServiceUnavailableError"
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
"500":
|
|
$ref: "#/components/responses/InternalServerError"
|
|
/{engine}/image:
|
|
get:
|
|
tags: [Search]
|
|
operationId: searchImages
|
|
summary: Search image results from a specific engine
|
|
parameters:
|
|
- $ref: "#/components/parameters/EnginePath"
|
|
- $ref: "#/components/parameters/TextQuery"
|
|
- $ref: "#/components/parameters/LangQuery"
|
|
- $ref: "#/components/parameters/DateQuery"
|
|
- $ref: "#/components/parameters/FileQuery"
|
|
- $ref: "#/components/parameters/SiteQuery"
|
|
- $ref: "#/components/parameters/LimitQuery"
|
|
- $ref: "#/components/parameters/StartQuery"
|
|
- $ref: "#/components/parameters/FilterQuery"
|
|
- $ref: "#/components/parameters/AnswersQuery"
|
|
- $ref: "#/components/parameters/UseProxyHeader"
|
|
responses:
|
|
"200":
|
|
description: Image search results
|
|
headers:
|
|
X-Cache:
|
|
$ref: "#/components/headers/XCache"
|
|
X-Fallback-Engine:
|
|
$ref: "#/components/headers/XFallbackEngine"
|
|
X-Proxy-Mode:
|
|
$ref: "#/components/headers/XProxyMode"
|
|
X-Proxy-Tag:
|
|
$ref: "#/components/headers/XProxyTag"
|
|
X-Proxy-Used:
|
|
$ref: "#/components/headers/XProxyUsed"
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/SearchResult"
|
|
examples:
|
|
default:
|
|
value:
|
|
- rank: 1
|
|
url: https://upload.wikimedia.org/example/golang.png
|
|
title: Golang logo image
|
|
description: Example image result
|
|
ad: false
|
|
"503":
|
|
$ref: "#/components/responses/ServiceUnavailableError"
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
"500":
|
|
$ref: "#/components/responses/InternalServerError"
|
|
/mega/search:
|
|
get:
|
|
tags: [Mega]
|
|
operationId: megaSearch
|
|
summary: Search across multiple engines in parallel
|
|
parameters:
|
|
- $ref: "#/components/parameters/TextQuery"
|
|
- $ref: "#/components/parameters/LangQuery"
|
|
- $ref: "#/components/parameters/DateQuery"
|
|
- $ref: "#/components/parameters/FileQuery"
|
|
- $ref: "#/components/parameters/SiteQuery"
|
|
- $ref: "#/components/parameters/LimitQuery"
|
|
- $ref: "#/components/parameters/StartQuery"
|
|
- $ref: "#/components/parameters/FilterQuery"
|
|
- $ref: "#/components/parameters/AnswersQuery"
|
|
- $ref: "#/components/parameters/EnginesQuery"
|
|
- $ref: "#/components/parameters/UseProxyHeader"
|
|
responses:
|
|
"200":
|
|
description: Aggregated and de-duplicated results
|
|
headers:
|
|
X-Cache:
|
|
$ref: "#/components/headers/XCache"
|
|
X-Proxy-Mode:
|
|
$ref: "#/components/headers/XProxyMode"
|
|
X-Proxy-Tag:
|
|
$ref: "#/components/headers/XProxyTag"
|
|
X-Proxy-Used:
|
|
$ref: "#/components/headers/XProxyUsed"
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/MegaSearchResult"
|
|
examples:
|
|
default:
|
|
value:
|
|
- rank: 1
|
|
url: https://go.dev/doc/
|
|
title: The Go Programming Language
|
|
description: Official documentation.
|
|
ad: false
|
|
engine: google
|
|
- rank: 2
|
|
url: https://pkg.go.dev/
|
|
title: Go Packages
|
|
description: Go package documentation.
|
|
ad: false
|
|
engine: bing
|
|
"400":
|
|
$ref: "#/components/responses/BadRequestError"
|
|
"500":
|
|
$ref: "#/components/responses/InternalServerError"
|
|
/mega/image:
|
|
get:
|
|
tags: [Mega]
|
|
operationId: megaImageSearch
|
|
summary: Image search across multiple engines in parallel
|
|
parameters:
|
|
- $ref: "#/components/parameters/TextQuery"
|
|
- $ref: "#/components/parameters/LangQuery"
|
|
- $ref: "#/components/parameters/DateQuery"
|
|
- $ref: "#/components/parameters/FileQuery"
|
|
- $ref: "#/components/parameters/SiteQuery"
|
|
- $ref: "#/components/parameters/LimitQuery"
|
|
- $ref: "#/components/parameters/StartQuery"
|
|
- $ref: "#/components/parameters/FilterQuery"
|
|
- $ref: "#/components/parameters/AnswersQuery"
|
|
- $ref: "#/components/parameters/EnginesQuery"
|
|
- $ref: "#/components/parameters/UseProxyHeader"
|
|
responses:
|
|
"200":
|
|
description: Aggregated and de-duplicated image results
|
|
headers:
|
|
X-Cache:
|
|
$ref: "#/components/headers/XCache"
|
|
X-Proxy-Mode:
|
|
$ref: "#/components/headers/XProxyMode"
|
|
X-Proxy-Tag:
|
|
$ref: "#/components/headers/XProxyTag"
|
|
X-Proxy-Used:
|
|
$ref: "#/components/headers/XProxyUsed"
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/MegaSearchResult"
|
|
examples:
|
|
default:
|
|
value:
|
|
- rank: 1
|
|
url: https://upload.wikimedia.org/example/gopher.png
|
|
title: Go Gopher
|
|
description: Example image
|
|
ad: false
|
|
engine: duckduckgo
|
|
"400":
|
|
$ref: "#/components/responses/BadRequestError"
|
|
"500":
|
|
$ref: "#/components/responses/InternalServerError"
|
|
/mega/engines:
|
|
get:
|
|
tags: [Mega]
|
|
operationId: listMegaEngines
|
|
summary: List available engines and runtime state
|
|
responses:
|
|
"200":
|
|
description: Engine list
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/MegaEnginesResponse"
|
|
examples:
|
|
default:
|
|
value:
|
|
total: 5
|
|
engines:
|
|
- name: google
|
|
initialized: true
|
|
circuit_state: closed
|
|
- name: bing
|
|
initialized: true
|
|
circuit_state: closed
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/health:
|
|
get:
|
|
tags: [Health]
|
|
operationId: healthCheck
|
|
summary: Service health status
|
|
responses:
|
|
"200":
|
|
description: Healthy or degraded service
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/HealthStatus"
|
|
examples:
|
|
healthy:
|
|
value:
|
|
status: healthy
|
|
uptime: 1h2m3s
|
|
engines:
|
|
- name: google
|
|
initialized: true
|
|
status: ready
|
|
system:
|
|
goroutines: 32
|
|
memory_mb: 128
|
|
go_version: go1.24.6
|
|
"503":
|
|
description: Unhealthy service
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/HealthStatus"
|
|
examples:
|
|
unhealthy:
|
|
value:
|
|
status: unhealthy
|
|
uptime: 12m10s
|
|
engines:
|
|
- name: google
|
|
initialized: false
|
|
status: not_initialized
|
|
system:
|
|
goroutines: 14
|
|
memory_mb: 96
|
|
go_version: go1.24.6
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/ready:
|
|
get:
|
|
tags: [Health]
|
|
operationId: readinessCheck
|
|
summary: Service readiness status
|
|
responses:
|
|
"200":
|
|
description: Instance is ready to receive traffic
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ReadinessStatus"
|
|
examples:
|
|
ready:
|
|
value:
|
|
status: ready
|
|
"503":
|
|
description: Instance is draining and should not receive new traffic
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ReadinessStatus"
|
|
examples:
|
|
draining:
|
|
value:
|
|
status: draining
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/stats:
|
|
get:
|
|
tags: [Stats]
|
|
operationId: getStats
|
|
summary: Combined cache, proxy, and circuit-breaker stats
|
|
responses:
|
|
"200":
|
|
description: Runtime statistics
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/StatsResponse"
|
|
examples:
|
|
default:
|
|
value:
|
|
cache:
|
|
status: true
|
|
entries: 10
|
|
hits: 200
|
|
misses: 15
|
|
bypasses: 4
|
|
evictions: 0
|
|
ttl_seconds: 60
|
|
max_size: 1000
|
|
proxy:
|
|
configured_count: 2
|
|
healthy_count: 2
|
|
unhealthy_count: 0
|
|
tags:
|
|
default:
|
|
configured: 2
|
|
healthy: 2
|
|
entries:
|
|
- proxy: http://proxy1:8080
|
|
tags: [default]
|
|
healthy: true
|
|
failures: 0
|
|
disabled: false
|
|
engines:
|
|
google:
|
|
tag: default
|
|
selected_proxy: pooled
|
|
circuit_breakers:
|
|
- engine: google
|
|
state: closed
|
|
failure_count: 0
|
|
last_changed: 2026-04-15T08:00:00Z
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/stats/cache:
|
|
get:
|
|
tags: [Stats]
|
|
operationId: getCacheStats
|
|
summary: Cache statistics only
|
|
responses:
|
|
"200":
|
|
description: Cache status
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CacheStats"
|
|
examples:
|
|
enabled:
|
|
value:
|
|
status: true
|
|
entries: 1
|
|
hits: 1
|
|
misses: 2
|
|
bypasses: 1
|
|
evictions: 0
|
|
ttl_seconds: 60
|
|
max_size: 1000
|
|
disabled:
|
|
value:
|
|
status: false
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/stats/proxy:
|
|
get:
|
|
tags: [Stats]
|
|
operationId: getProxyStats
|
|
summary: Proxy pool and per-engine proxy policy statistics
|
|
responses:
|
|
"200":
|
|
description: Proxy stats payload
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ProxyStats"
|
|
examples:
|
|
default:
|
|
value:
|
|
configured_count: 1
|
|
healthy_count: 1
|
|
unhealthy_count: 0
|
|
tags:
|
|
us:
|
|
configured: 1
|
|
healthy: 1
|
|
entries:
|
|
- proxy: http://proxy-us:8080
|
|
tags: [us]
|
|
healthy: true
|
|
failures: 0
|
|
disabled: false
|
|
engines:
|
|
google:
|
|
tag: us
|
|
selected_proxy: pooled
|
|
yandex:
|
|
selected_proxy: direct
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/stats/cb:
|
|
get:
|
|
tags: [Stats]
|
|
operationId: getCircuitBreakerStats
|
|
summary: Circuit breaker state per engine
|
|
responses:
|
|
"200":
|
|
description: Circuit breaker stats payload
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/CircuitBreakerStatsResponse"
|
|
examples:
|
|
default:
|
|
value:
|
|
circuit_breakers:
|
|
- engine: google
|
|
state: open
|
|
failure_count: 5
|
|
last_changed: 2026-04-15T08:00:00Z
|
|
retry_in: 43
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/openapi.yaml:
|
|
get:
|
|
tags: [Docs]
|
|
operationId: getOpenAPISpec
|
|
summary: Get raw OpenAPI YAML
|
|
responses:
|
|
"200":
|
|
description: OpenAPI YAML
|
|
content:
|
|
application/yaml:
|
|
schema:
|
|
type: string
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
/docs:
|
|
get:
|
|
tags: [Docs]
|
|
operationId: getSwaggerUI
|
|
summary: Swagger UI for interactive API docs
|
|
responses:
|
|
"200":
|
|
description: HTML page loading Swagger UI from CDN
|
|
content:
|
|
text/html:
|
|
schema:
|
|
type: string
|
|
"404":
|
|
$ref: "#/components/responses/NotFoundError"
|
|
components:
|
|
parameters:
|
|
EnginePath:
|
|
name: engine
|
|
in: path
|
|
required: true
|
|
description: Search engine endpoint alias (`duck` is DuckDuckGo).
|
|
schema:
|
|
type: string
|
|
enum: [google, yandex, baidu, bing, duck]
|
|
TextQuery:
|
|
name: text
|
|
in: query
|
|
required: false
|
|
description: >
|
|
Search query text. At least one of `text`, `site`, or `file` must be non-empty.
|
|
schema:
|
|
type: string
|
|
example: golang
|
|
LangQuery:
|
|
name: lang
|
|
in: query
|
|
required: false
|
|
description: Language code (engine-specific behavior).
|
|
schema:
|
|
type: string
|
|
example: EN
|
|
DateQuery:
|
|
name: date
|
|
in: query
|
|
required: false
|
|
description: Date interval in `YYYYMMDD..YYYYMMDD` format.
|
|
schema:
|
|
type: string
|
|
pattern: "^[0-9]{8}\\.\\.[0-9]{8}$"
|
|
example: 20250101..20250131
|
|
FileQuery:
|
|
name: file
|
|
in: query
|
|
required: false
|
|
description: File extension filter (for engines that support it).
|
|
schema:
|
|
type: string
|
|
example: PDF
|
|
SiteQuery:
|
|
name: site
|
|
in: query
|
|
required: false
|
|
description: Site/domain filter.
|
|
schema:
|
|
type: string
|
|
example: github.com
|
|
LimitQuery:
|
|
name: limit
|
|
in: query
|
|
required: false
|
|
description: Maximum results to return.
|
|
schema:
|
|
type: integer
|
|
default: 25
|
|
example: 10
|
|
StartQuery:
|
|
name: start
|
|
in: query
|
|
required: false
|
|
description: Pagination offset (must be >= 0).
|
|
schema:
|
|
type: integer
|
|
minimum: 0
|
|
default: 0
|
|
example: 20
|
|
FilterQuery:
|
|
name: filter
|
|
in: query
|
|
required: false
|
|
description: Duplicate filtering flag (primarily used by Google parser behavior).
|
|
schema:
|
|
type: boolean
|
|
default: true
|
|
example: true
|
|
AnswersQuery:
|
|
name: answers
|
|
in: query
|
|
required: false
|
|
description: Include answer box style results when supported.
|
|
schema:
|
|
type: boolean
|
|
default: false
|
|
example: false
|
|
EnginesQuery:
|
|
name: engines
|
|
in: query
|
|
required: false
|
|
description: >
|
|
Comma-separated engine list for mega endpoints. If omitted, all available engines are used.
|
|
schema:
|
|
type: string
|
|
example: google,bing,duckduckgo
|
|
UseProxyHeader:
|
|
name: X-Use-Proxy
|
|
in: header
|
|
required: false
|
|
description: >
|
|
Request-scoped proxy override. Use `direct` to disable proxy for the request or
|
|
pass a proxy tag name (for example `us`) to force a tagged proxy pool.
|
|
schema:
|
|
type: string
|
|
examples:
|
|
direct:
|
|
value: direct
|
|
tag:
|
|
value: us
|
|
headers:
|
|
XCache:
|
|
description: Cache status when cache is enabled (`HIT`, `MISS`, `BYPASS`).
|
|
schema:
|
|
type: string
|
|
XFallbackEngine:
|
|
description: Engine name used when dedicated endpoint fallback served the response.
|
|
schema:
|
|
type: string
|
|
XProxyMode:
|
|
description: Effective proxy mode for the request (`off` or `tag_pool`).
|
|
schema:
|
|
type: string
|
|
enum: [off, tag_pool]
|
|
XProxyTag:
|
|
description: Effective proxy tag when `X-Proxy-Mode=tag_pool`.
|
|
schema:
|
|
type: string
|
|
XProxyUsed:
|
|
description: Effective proxy target used (`direct`, masked proxy, `pooled`, `multiple`, `mixed`).
|
|
schema:
|
|
type: string
|
|
responses:
|
|
BadRequestError:
|
|
description: Invalid request parameters
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ErrorResponse"
|
|
examples:
|
|
invalidEngines:
|
|
value:
|
|
error: bad_request
|
|
code: 400
|
|
message: No valid search engines specified
|
|
ServiceUnavailableError:
|
|
description: Search failed and no result could be produced
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ErrorResponse"
|
|
examples:
|
|
primaryFailed:
|
|
value:
|
|
error: service_unavailable
|
|
code: 503
|
|
message: all search engines failed
|
|
NotFoundError:
|
|
description: Endpoint not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ErrorResponse"
|
|
examples:
|
|
notFound:
|
|
value:
|
|
error: not_found
|
|
code: 404
|
|
message: Cannot GET /unknown
|
|
InternalServerError:
|
|
description: Internal error while parsing/handling request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: "#/components/schemas/ErrorResponse"
|
|
examples:
|
|
parseError:
|
|
value:
|
|
error: server_error
|
|
code: 500
|
|
message: invalid syntax
|
|
schemas:
|
|
SearchResult:
|
|
type: object
|
|
required: [rank, url, title, description, ad]
|
|
properties:
|
|
rank:
|
|
type: integer
|
|
example: 1
|
|
url:
|
|
type: string
|
|
example: https://go.dev/doc/
|
|
title:
|
|
type: string
|
|
example: The Go Programming Language
|
|
description:
|
|
type: string
|
|
example: Official Go language documentation.
|
|
ad:
|
|
type: boolean
|
|
example: false
|
|
MegaSearchResult:
|
|
allOf:
|
|
- $ref: "#/components/schemas/SearchResult"
|
|
- type: object
|
|
required: [engine]
|
|
properties:
|
|
engine:
|
|
type: string
|
|
example: google
|
|
ErrorResponse:
|
|
type: object
|
|
required: [error, code]
|
|
properties:
|
|
error:
|
|
type: string
|
|
example: service_unavailable
|
|
code:
|
|
type: integer
|
|
example: 503
|
|
message:
|
|
type: string
|
|
example: all search engines failed
|
|
EngineHealth:
|
|
type: object
|
|
required: [name, initialized, status]
|
|
properties:
|
|
name:
|
|
type: string
|
|
example: google
|
|
initialized:
|
|
type: boolean
|
|
example: true
|
|
status:
|
|
type: string
|
|
enum: [ready, not_initialized, circuit_open]
|
|
example: ready
|
|
HealthStatus:
|
|
type: object
|
|
required: [status, uptime, engines, system]
|
|
properties:
|
|
status:
|
|
type: string
|
|
enum: [healthy, degraded, unhealthy]
|
|
uptime:
|
|
type: string
|
|
example: 1h12m3s
|
|
engines:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/EngineHealth"
|
|
system:
|
|
type: object
|
|
additionalProperties: true
|
|
properties:
|
|
goroutines:
|
|
type: integer
|
|
memory_mb:
|
|
type: integer
|
|
go_version:
|
|
type: string
|
|
ReadinessStatus:
|
|
type: object
|
|
required: [status]
|
|
properties:
|
|
status:
|
|
type: string
|
|
enum: [ready, draining]
|
|
CacheStatsEnabled:
|
|
type: object
|
|
required: [status, entries, hits, misses, bypasses, evictions, ttl_seconds, max_size]
|
|
properties:
|
|
status:
|
|
type: boolean
|
|
enum: [true]
|
|
entries:
|
|
type: integer
|
|
hits:
|
|
type: integer
|
|
misses:
|
|
type: integer
|
|
bypasses:
|
|
type: integer
|
|
evictions:
|
|
type: integer
|
|
ttl_seconds:
|
|
type: integer
|
|
max_size:
|
|
type: integer
|
|
CacheStatsDisabled:
|
|
type: object
|
|
required: [status]
|
|
properties:
|
|
status:
|
|
type: boolean
|
|
enum: [false]
|
|
CacheStats:
|
|
oneOf:
|
|
- $ref: "#/components/schemas/CacheStatsEnabled"
|
|
- $ref: "#/components/schemas/CacheStatsDisabled"
|
|
ProxyTagSummary:
|
|
type: object
|
|
required: [configured, healthy]
|
|
properties:
|
|
configured:
|
|
type: integer
|
|
healthy:
|
|
type: integer
|
|
ProxyStatsEntry:
|
|
type: object
|
|
required: [proxy, tags, healthy, failures, disabled]
|
|
properties:
|
|
proxy:
|
|
type: string
|
|
example: http://proxy-us:8080
|
|
tags:
|
|
type: array
|
|
items:
|
|
type: string
|
|
healthy:
|
|
type: boolean
|
|
failures:
|
|
type: integer
|
|
disabled:
|
|
type: boolean
|
|
ProxyEngineStats:
|
|
type: object
|
|
required: [selected_proxy]
|
|
properties:
|
|
tag:
|
|
type: string
|
|
selected_proxy:
|
|
type: string
|
|
example: direct
|
|
ProxyStats:
|
|
type: object
|
|
required: [configured_count, healthy_count, unhealthy_count, tags, entries]
|
|
properties:
|
|
configured_count:
|
|
type: integer
|
|
healthy_count:
|
|
type: integer
|
|
unhealthy_count:
|
|
type: integer
|
|
tags:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: "#/components/schemas/ProxyTagSummary"
|
|
entries:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/ProxyStatsEntry"
|
|
engines:
|
|
type: object
|
|
additionalProperties:
|
|
$ref: "#/components/schemas/ProxyEngineStats"
|
|
CircuitBreakerStat:
|
|
type: object
|
|
required: [engine, state, failure_count, last_changed]
|
|
properties:
|
|
engine:
|
|
type: string
|
|
example: google
|
|
state:
|
|
type: string
|
|
enum: [closed, open, half-open]
|
|
failure_count:
|
|
type: integer
|
|
last_changed:
|
|
type: string
|
|
format: date-time
|
|
retry_in:
|
|
type: integer
|
|
description: Seconds until next half-open attempt (present when state is open).
|
|
CircuitBreakerStatsResponse:
|
|
type: object
|
|
required: [circuit_breakers]
|
|
properties:
|
|
circuit_breakers:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/CircuitBreakerStat"
|
|
StatsResponse:
|
|
type: object
|
|
required: [cache, proxy, circuit_breakers]
|
|
properties:
|
|
cache:
|
|
$ref: "#/components/schemas/CacheStats"
|
|
proxy:
|
|
$ref: "#/components/schemas/ProxyStats"
|
|
circuit_breakers:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/CircuitBreakerStat"
|
|
MegaEngineInfo:
|
|
type: object
|
|
required: [name, initialized]
|
|
properties:
|
|
name:
|
|
type: string
|
|
example: google
|
|
initialized:
|
|
type: boolean
|
|
circuit_state:
|
|
type: string
|
|
enum: [closed, open, half-open]
|
|
MegaEnginesResponse:
|
|
type: object
|
|
required: [engines, total]
|
|
properties:
|
|
engines:
|
|
type: array
|
|
items:
|
|
$ref: "#/components/schemas/MegaEngineInfo"
|
|
total:
|
|
type: integer
|