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

//
// 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"
)