The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/pkg/api
Sofia Papagiannaki 8aae7be4e5
API: Enable serving Swagger UI by default and add docs and guidelines (#63489)
2 years ago
..
apierrors Chore: Fix status codes for nested folders (#59087) 3 years ago
avatar Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
datasource backend/datasources: move datasources models into the datasources service package (#51267) 3 years ago
dtos Cookies: Provide a mechanism for per user control over cookies (#61566) 2 years ago
frontendlogging Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
pluginproxy Datasources: Add user_agent header customization for outgoing HTTP requests (#63769) 2 years ago
response Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
routing Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
static API: Extract OpenAPI specification from source code using go-swagger (#40528) 3 years ago
README.md API: Enable serving Swagger UI by default and add docs and guidelines (#63489) 2 years ago
accesscontrol.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
admin.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
admin_encryption.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
admin_provisioning.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
admin_provisioning_test.go RBAC: Rewrite provisioning rbac tests (#61752) 2 years ago
admin_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
admin_users.go Chore: Delete password and search from models package (#62482) 2 years ago
admin_users_test.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
alerting.go Chore: rename Id to ID in alert notification models (#62868) 2 years ago
annotations.go Rename Id to ID for annotation models (#62886) 2 years ago
annotations_test.go Rename Id to ID for annotation models (#62886) 2 years ago
api.go API: Enable serving Swagger UI by default and add docs and guidelines (#63489) 2 years ago
apikey.go Rename Id to ID for annotation models (#62886) 2 years ago
basic_auth.go Macaron: remove custom Request type (#37874) 4 years ago
basic_auth_test.go Macaron: remove custom Request type (#37874) 4 years ago
comments.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
common_test.go Authn: Anon session service (#63052) 2 years ago
dashboard.go fix(dashboard version service): add DashboardUID to query and responses (#60800) 2 years ago
dashboard_permission.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
dashboard_permission_test.go Chore: Move folder store interface, implementation and test under pkg/services/folder (#62586) 2 years ago
dashboard_snapshot.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
dashboard_snapshot_test.go chore: move dashboard_acl models into dashboard service (#62151) 2 years ago
dashboard_test.go Plugins: Remove stream handler from plugins DTO (#63812) 2 years ago
dataproxy.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
datasources.go Chore: Remove Result field from datasources (#63048) 2 years ago
datasources_test.go Chore: Remove Result field from datasources (#63048) 2 years ago
fakes.go NavTree: Make it possible to configure where in nav tree plugins live (#55484) 3 years ago
folder.go Chore: Move library elements models to library elements service (#62507) 2 years ago
folder_permission.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
folder_permission_test.go Chore: Move folder store interface, implementation and test under pkg/services/folder (#62586) 2 years ago
folder_test.go Chore: Replace short UID generation with more standard UUIDs (#62731) 2 years ago
frontend_logging.go Chore: Add deprecation warnings for Sentry (#60165) 2 years ago
frontend_logging_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
frontend_metrics.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
frontendsettings.go Profiling: Enable flame graph & Phlare/Parca data sources for all users (#63488) 2 years ago
frontendsettings_test.go Plugins: Fix plugins CDN not working when plugins are not in domain's root path (#63202) 2 years ago
grafana_com_proxy.go API: don't re-add /api suffix to grafana.com API URL (#62280) 2 years ago
health.go Chore: Remove Store interface and use db.DB instead (#60160) 2 years ago
health_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
http_server.go K8S: cleanup and consolidate feature toggles (#63212) 2 years ago
http_server_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
index.go Cookies: Provide a mechanism for per user control over cookies (#61566) 2 years ago
login.go Settings: Remove global variables for auth settings (#63795) 2 years ago
login_oauth.go AuthN: Add oauth clients and perform oauth authentication with authn.Service (#62072) 2 years ago
login_oauth_test.go Cookies: Provide a mechanism for per user control over cookies (#61566) 2 years ago
login_test.go Settings: Remove global variables for auth settings (#63795) 2 years ago
metrics.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
metrics_test.go Chore: Change fmt.Errorf to errors.New when there is no formatting required (#58600) 3 years ago
openapi3.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
org.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
org_invite.go Settings: Remove global variables for auth settings (#63795) 2 years ago
org_invite_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
org_test.go RBAC: remove access control mock from org quota tests (#61574) 2 years ago
org_users.go AccessControl: Clear user permission cache for update org user role (#62745) 2 years ago
org_users_test.go Users: Fix org user always getting org id = 1 on auto assign false (#63708) 2 years ago
password.go Settings: Remove global variables for auth settings (#63795) 2 years ago
playlist.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
playlist_play.go Chore: Update oapi-codegen library (#62962) 2 years ago
plugin_dashboards.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
plugin_dashboards_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
plugin_metrics.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
plugin_metrics_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
plugin_proxy.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
plugin_proxy_test.go Plugins: Handle app plugin proxy routes per request (#51835) 3 years ago
plugin_resource.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
plugin_resource_test.go Plugins: Add simple plugin sources service (#63814) 2 years ago
plugins.go Profiling: Enable flame graph & Phlare/Parca data sources for all users (#63488) 2 years ago
plugins_test.go Plugins: Fix plugins CDN not working when plugins are not in domain's root path (#63202) 2 years ago
preferences.go Cookies: Provide a mechanism for per user control over cookies (#61566) 2 years ago
preferences_test.go Chore: Remove Result from dashboard models (#61997) 2 years ago
quota.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
quota_test.go Chore: Upgrade golangci-lint to v1.51.2 (#63630) 2 years ago
render.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
search.go Chore: Move search model from models package to search service (#62215) 2 years ago
search_test.go RBAC: Rewrite search and plugin list rbac test (#63483) 2 years ago
short_url.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
short_url_test.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
signup.go Orgs: Remove auto assign globals (#63754) 2 years ago
swagger.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
swagger_responses.go Chore: Move swagger definitions to the handlers (#52643) 3 years ago
swagger_tags.json Chore: Move swagger definitions to the handlers (#52643) 3 years ago
team.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
team_members.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
team_members_test.go Support bundles: Refactor registry into separate service (#62945) 2 years ago
team_test.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
user.go Settings: Remove global variables for auth settings (#63795) 2 years ago
user_test.go Support bundles: Refactor registry into separate service (#62945) 2 years ago
user_token.go Chore: Fix goimports grouping in pkg/api (#62419) 2 years ago
user_token_test.go Chore: Move ReqContext to contexthandler service (#62102) 2 years ago
utils.go Fix: Email and username trimming and invitation validation (#58442) 3 years ago

README.md

OpenAPI specifications

Since version 8.4, HTTP API details are specified using OpenAPI v2. Starting from version 9.1, there is also an OpenAPI v3 specification (generated by the v2 one using this script).

OpenAPI annotations

The OpenAPI v2 specification is generated automatically from the annotated Go code using go-swagger which scans the source code for annotation rules. Refer to this getting started guide for getting familiar with the toolkit.

Developers modifying the HTTP API endpoints need to make sure to add the necessary annotations so that their changes are reflected into the generated specifications.

Example of endpoint annotation

The following route defines a PATCH endpoint under the /serviceaccounts/{serviceAccountId} path with tag service_accounts (used for grouping together several routes) and operation ID updateServiceAccount (used for uniquely identifying routes and associate parameters and response with them).


// swagger:route PATCH /serviceaccounts/{serviceAccountId} service_accounts updateServiceAccount
//
// # Update service account
//
// Required permissions (See note in the [introduction](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api) for an explanation):
// action: `serviceaccounts:write` scope: `serviceaccounts:id:1` (single service account)
//
// Responses:
// 200: updateServiceAccountResponse
// 400: badRequestError
// 401: unauthorisedError
// 403: forbiddenError
// 404: notFoundError
// 500: internalServerError

The go-swagger can discover such annotations by scanning any code imported by pkg/server but by convention we place the endpoint annotations above the endpoint definition.

Example of endpoint parameters

The following struct defines the route parameters for the updateServiceAccount endpoint. The route expects:

  • a path parameter denoting the service account identifier and
  • a body parameter with the new values for the specific service account

// swagger:parameters updateServiceAccount
type UpdateServiceAccountParams struct {
	// in:path
	ServiceAccountId int64 `json:"serviceAccountId"`
	// in:body
	Body serviceaccounts.UpdateServiceAccountForm
}

Example of endpoint response

The following struct defines the response for the updateServiceAccount endpoint in case of a successful 200 response.


// swagger:response updateServiceAccountResponse
type UpdateServiceAccountResponse struct {
	// in:body
	Body struct {
		Message        string                                    `json:"message"`
		ID             int64                                     `json:"id"`
		Name           string                                    `json:"name"`
		ServiceAccount *serviceaccounts.ServiceAccountProfileDTO `json:"serviceaccount"`
	}
}

OpenAPI generation

Developers can re-create the OpenAPI v2 and v3 specifications using the following command:


make clean-api-spec && make openapi3-gen

They can observe its output into the public/api-merged.json and public/openapi3.json files.

Finally, they can browser and try out both the OpenAPI v2 and v3 via the Swagger UI editor (served by the grafana server) by navigating to /swagger-ui and /openapi3 respectivally.