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.
204 lines
7.5 KiB
204 lines
7.5 KiB
//
|
|
// DISCLAIMER
|
|
//
|
|
// Copyright 2017 ArangoDB GmbH, Cologne, Germany
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
|
//
|
|
// Author Ewout Prangsma
|
|
//
|
|
|
|
package driver
|
|
|
|
import "context"
|
|
|
|
// ClientServerAdmin provides access to server administrations functions of an arangodb database server
|
|
// or an entire cluster of arangodb servers.
|
|
type ClientServerAdmin interface {
|
|
// ServerMode returns the current mode in which the server/cluster is operating.
|
|
// This call needs ArangoDB 3.3 and up.
|
|
ServerMode(ctx context.Context) (ServerMode, error)
|
|
// SetServerMode changes the current mode in which the server/cluster is operating.
|
|
// This call needs a client that uses JWT authentication.
|
|
// This call needs ArangoDB 3.3 and up.
|
|
SetServerMode(ctx context.Context, mode ServerMode) error
|
|
|
|
// Shutdown a specific server, optionally removing it from its cluster.
|
|
Shutdown(ctx context.Context, removeFromCluster bool) error
|
|
|
|
// Metrics returns the metrics of the server in Prometheus format.
|
|
// List of metrics: https://www.arangodb.com/docs/devel/http/administration-and-monitoring-metrics.html
|
|
// You can parse it using Prometheus client:
|
|
/*
|
|
var parser expfmt.TextParser
|
|
metricsProm, err := parser.TextToMetricFamilies(strings.NewReader(string(metrics)))
|
|
*/
|
|
Metrics(ctx context.Context) ([]byte, error)
|
|
|
|
// MetricsForSingleServer returns the metrics of the specific server in Prometheus format.
|
|
// This parameter 'serverID' is only meaningful on Coordinators.
|
|
// List of metrics: https://www.arangodb.com/docs/devel/http/administration-and-monitoring-metrics.html
|
|
// You can parse it using Prometheus client:
|
|
/*
|
|
var parser expfmt.TextParser
|
|
metricsProm, err := parser.TextToMetricFamilies(strings.NewReader(string(metrics)))
|
|
*/
|
|
MetricsForSingleServer(ctx context.Context, serverID string) ([]byte, error)
|
|
|
|
// Deprecated: Use Metrics instead.
|
|
// Statistics queries statistics from a specific server
|
|
Statistics(ctx context.Context) (ServerStatistics, error)
|
|
|
|
// ShutdownV2 shuts down a specific coordinator, optionally removing it from the cluster with a graceful manner.
|
|
ShutdownV2(ctx context.Context, removeFromCluster, graceful bool) error
|
|
|
|
// ShutdownInfoV2 queries information about shutdown progress.
|
|
ShutdownInfoV2(ctx context.Context) (ShutdownInfo, error)
|
|
|
|
// Logs retrieve logs from server in ArangoDB 3.8.0+ format
|
|
Logs(ctx context.Context) (ServerLogs, error)
|
|
}
|
|
|
|
type ServerLogs struct {
|
|
Total int `json:"total"`
|
|
Messages []ServerLogMessage `json:"messages,omitempty"`
|
|
}
|
|
|
|
type ServerLogMessage struct {
|
|
ID int `json:"id"`
|
|
Topic string `json:"topic"`
|
|
Level string `json:"level"`
|
|
Date string `json:"date"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
type ServerMode string
|
|
|
|
// ServerStatistics contains statistical data about the server as a whole.
|
|
type ServerStatistics struct {
|
|
Time float64 `json:"time"`
|
|
Enabled bool `json:"enabled"`
|
|
System SystemStats `json:"system"`
|
|
Client ClientStats `json:"client"`
|
|
ClientUser ClientStats `json:"clientUser,omitempty"`
|
|
HTTP HTTPStats `json:"http"`
|
|
Server ServerStats `json:"server"`
|
|
ArangoError
|
|
}
|
|
|
|
// SystemStats contains statistical data about the system, this is part of
|
|
// ServerStatistics.
|
|
type SystemStats struct {
|
|
MinorPageFaults int64 `json:"minorPageFaults"`
|
|
MajorPageFaults int64 `json:"majorPageFaults"`
|
|
UserTime float64 `json:"userTime"`
|
|
SystemTime float64 `json:"systemTime"`
|
|
NumberOfThreads int64 `json:"numberOfThreads"`
|
|
ResidentSize int64 `json:"residentSize"`
|
|
ResidentSizePercent float64 `json:"residentSizePercent"`
|
|
VirtualSize int64 `json:"virtualSize"`
|
|
}
|
|
|
|
// Stats is used for various time-related statistics.
|
|
type Stats struct {
|
|
Sum float64 `json:"sum"`
|
|
Count int64 `json:"count"`
|
|
Counts []int64 `json:"counts"`
|
|
}
|
|
|
|
type ClientStats struct {
|
|
HTTPConnections int64 `json:"httpConnections"`
|
|
ConnectionTime Stats `json:"connectionTime"`
|
|
TotalTime Stats `json:"totalTime"`
|
|
RequestTime Stats `json:"requestTime"`
|
|
QueueTime Stats `json:"queueTime"`
|
|
IoTime Stats `json:"ioTime"`
|
|
BytesSent Stats `json:"bytesSent"`
|
|
BytesReceived Stats `json:"bytesReceived"`
|
|
}
|
|
|
|
// HTTPStats contains statistics about the HTTP traffic.
|
|
type HTTPStats struct {
|
|
RequestsTotal int64 `json:"requestsTotal"`
|
|
RequestsAsync int64 `json:"requestsAsync"`
|
|
RequestsGet int64 `json:"requestsGet"`
|
|
RequestsHead int64 `json:"requestsHead"`
|
|
RequestsPost int64 `json:"requestsPost"`
|
|
RequestsPut int64 `json:"requestsPut"`
|
|
RequestsPatch int64 `json:"requestsPatch"`
|
|
RequestsDelete int64 `json:"requestsDelete"`
|
|
RequestsOptions int64 `json:"requestsOptions"`
|
|
RequestsOther int64 `json:"requestsOther"`
|
|
RequestsSuperuser int64 `json:"requestsSuperuser,omitempty"`
|
|
RequestsUser int64 `json:"requestsUser,omitempty"`
|
|
}
|
|
|
|
// TransactionStats contains statistics about transactions.
|
|
type TransactionStats struct {
|
|
Started int64 `json:"started"`
|
|
Aborted int64 `json:"aborted"`
|
|
Committed int64 `json:"committed"`
|
|
IntermediateCommits int64 `json:"intermediateCommits"`
|
|
ReadOnly int64 `json:"readOnly,omitempty"`
|
|
DirtyReadOnly int64 `json:"dirtyReadOnly,omitempty"`
|
|
}
|
|
|
|
// MemoryStats contains statistics about memory usage.
|
|
type MemoryStats struct {
|
|
ContextID int64 `json:"contextId"`
|
|
TMax float64 `json:"tMax"`
|
|
CountOfTimes int64 `json:"countOfTimes"`
|
|
HeapMax int64 `json:"heapMax"`
|
|
HeapMin int64 `json:"heapMin"`
|
|
Invocations int64 `json:"invocations,omitempty"`
|
|
}
|
|
|
|
// V8ContextStats contains statistics about V8 contexts.
|
|
type V8ContextStats struct {
|
|
Available int64 `json:"available"`
|
|
Busy int64 `json:"busy"`
|
|
Dirty int64 `json:"dirty"`
|
|
Free int64 `json:"free"`
|
|
Min int64 `json:"min,omitempty"`
|
|
Max int64 `json:"max"`
|
|
Memory []MemoryStats `json:"memory"`
|
|
}
|
|
|
|
// ThreadsStats contains statistics about threads.
|
|
type ThreadStats struct {
|
|
SchedulerThreads int64 `json:"scheduler-threads"`
|
|
Blocked int64 `json:"blocked"`
|
|
Queued int64 `json:"queued"`
|
|
InProgress int64 `json:"in-progress"`
|
|
DirectExec int64 `json:"direct-exec"`
|
|
}
|
|
|
|
// ServerStats contains statistics about the server.
|
|
type ServerStats struct {
|
|
Uptime float64 `json:"uptime"`
|
|
PhysicalMemory int64 `json:"physicalMemory"`
|
|
Transactions TransactionStats `json:"transactions"`
|
|
V8Context V8ContextStats `json:"v8Context"`
|
|
Threads ThreadStats `json:"threads"`
|
|
}
|
|
|
|
const (
|
|
// ServerModeDefault is the normal mode of the database in which read and write requests
|
|
// are allowed.
|
|
ServerModeDefault ServerMode = "default"
|
|
// ServerModeReadOnly is the mode in which all modifications to th database are blocked.
|
|
// Behavior is the same as user that has read-only access to all databases & collections.
|
|
ServerModeReadOnly ServerMode = "readonly"
|
|
)
|
|
|