mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-11 20:44:55 +00:00
5dbf36f356
* Issue search support elasticsearch * Fix lint * Add indexer name on app.ini * add a warnning on SearchIssuesByKeyword * improve code
748 lines
26 KiB
Go
748 lines
26 KiB
Go
// Copyright 2012-present Oliver Eilhard. All rights reserved.
|
|
// Use of this source code is governed by a MIT-license.
|
|
// See http://olivere.mit-license.org/license.txt for details.
|
|
|
|
package elastic
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
|
|
"github.com/olivere/elastic/v7/uritemplates"
|
|
)
|
|
|
|
// NodesStatsService returns node statistics.
|
|
// See http://www.elastic.co/guide/en/elasticsearch/reference/7.0/cluster-nodes-stats.html
|
|
// for details.
|
|
type NodesStatsService struct {
|
|
client *Client
|
|
|
|
pretty *bool // pretty format the returned JSON response
|
|
human *bool // return human readable values for statistics
|
|
errorTrace *bool // include the stack trace of returned errors
|
|
filterPath []string // list of filters used to reduce the response
|
|
headers http.Header // custom request-level HTTP headers
|
|
|
|
metric []string
|
|
indexMetric []string
|
|
nodeId []string
|
|
completionFields []string
|
|
fielddataFields []string
|
|
fields []string
|
|
groups *bool
|
|
level string
|
|
timeout string
|
|
types []string
|
|
}
|
|
|
|
// NewNodesStatsService creates a new NodesStatsService.
|
|
func NewNodesStatsService(client *Client) *NodesStatsService {
|
|
return &NodesStatsService{
|
|
client: client,
|
|
}
|
|
}
|
|
|
|
// Pretty tells Elasticsearch whether to return a formatted JSON response.
|
|
func (s *NodesStatsService) Pretty(pretty bool) *NodesStatsService {
|
|
s.pretty = &pretty
|
|
return s
|
|
}
|
|
|
|
// Human specifies whether human readable values should be returned in
|
|
// the JSON response, e.g. "7.5mb".
|
|
func (s *NodesStatsService) Human(human bool) *NodesStatsService {
|
|
s.human = &human
|
|
return s
|
|
}
|
|
|
|
// ErrorTrace specifies whether to include the stack trace of returned errors.
|
|
func (s *NodesStatsService) ErrorTrace(errorTrace bool) *NodesStatsService {
|
|
s.errorTrace = &errorTrace
|
|
return s
|
|
}
|
|
|
|
// FilterPath specifies a list of filters used to reduce the response.
|
|
func (s *NodesStatsService) FilterPath(filterPath ...string) *NodesStatsService {
|
|
s.filterPath = filterPath
|
|
return s
|
|
}
|
|
|
|
// Header adds a header to the request.
|
|
func (s *NodesStatsService) Header(name string, value string) *NodesStatsService {
|
|
if s.headers == nil {
|
|
s.headers = http.Header{}
|
|
}
|
|
s.headers.Add(name, value)
|
|
return s
|
|
}
|
|
|
|
// Headers specifies the headers of the request.
|
|
func (s *NodesStatsService) Headers(headers http.Header) *NodesStatsService {
|
|
s.headers = headers
|
|
return s
|
|
}
|
|
|
|
// Metric limits the information returned to the specified metrics.
|
|
func (s *NodesStatsService) Metric(metric ...string) *NodesStatsService {
|
|
s.metric = append(s.metric, metric...)
|
|
return s
|
|
}
|
|
|
|
// IndexMetric limits the information returned for `indices` metric
|
|
// to the specific index metrics. Isn't used if `indices` (or `all`)
|
|
// metric isn't specified..
|
|
func (s *NodesStatsService) IndexMetric(indexMetric ...string) *NodesStatsService {
|
|
s.indexMetric = append(s.indexMetric, indexMetric...)
|
|
return s
|
|
}
|
|
|
|
// NodeId is a list of node IDs or names to limit the returned information;
|
|
// use `_local` to return information from the node you're connecting to,
|
|
// leave empty to get information from all nodes.
|
|
func (s *NodesStatsService) NodeId(nodeId ...string) *NodesStatsService {
|
|
s.nodeId = append(s.nodeId, nodeId...)
|
|
return s
|
|
}
|
|
|
|
// CompletionFields is a list of fields for `fielddata` and `suggest`
|
|
// index metric (supports wildcards).
|
|
func (s *NodesStatsService) CompletionFields(completionFields ...string) *NodesStatsService {
|
|
s.completionFields = append(s.completionFields, completionFields...)
|
|
return s
|
|
}
|
|
|
|
// FielddataFields is a list of fields for `fielddata` index metric (supports wildcards).
|
|
func (s *NodesStatsService) FielddataFields(fielddataFields ...string) *NodesStatsService {
|
|
s.fielddataFields = append(s.fielddataFields, fielddataFields...)
|
|
return s
|
|
}
|
|
|
|
// Fields is a list of fields for `fielddata` and `completion` index metric (supports wildcards).
|
|
func (s *NodesStatsService) Fields(fields ...string) *NodesStatsService {
|
|
s.fields = append(s.fields, fields...)
|
|
return s
|
|
}
|
|
|
|
// Groups is a list of search groups for `search` index metric.
|
|
func (s *NodesStatsService) Groups(groups bool) *NodesStatsService {
|
|
s.groups = &groups
|
|
return s
|
|
}
|
|
|
|
// Level specifies whether to return indices stats aggregated at node, index or shard level.
|
|
func (s *NodesStatsService) Level(level string) *NodesStatsService {
|
|
s.level = level
|
|
return s
|
|
}
|
|
|
|
// Timeout specifies an explicit operation timeout.
|
|
func (s *NodesStatsService) Timeout(timeout string) *NodesStatsService {
|
|
s.timeout = timeout
|
|
return s
|
|
}
|
|
|
|
// Types a list of document types for the `indexing` index metric.
|
|
func (s *NodesStatsService) Types(types ...string) *NodesStatsService {
|
|
s.types = append(s.types, types...)
|
|
return s
|
|
}
|
|
|
|
// buildURL builds the URL for the operation.
|
|
func (s *NodesStatsService) buildURL() (string, url.Values, error) {
|
|
var err error
|
|
var path string
|
|
|
|
if len(s.nodeId) > 0 && len(s.metric) > 0 && len(s.indexMetric) > 0 {
|
|
path, err = uritemplates.Expand("/_nodes/{node_id}/stats/{metric}/{index_metric}", map[string]string{
|
|
"index_metric": strings.Join(s.indexMetric, ","),
|
|
"node_id": strings.Join(s.nodeId, ","),
|
|
"metric": strings.Join(s.metric, ","),
|
|
})
|
|
} else if len(s.nodeId) > 0 && len(s.metric) > 0 && len(s.indexMetric) == 0 {
|
|
path, err = uritemplates.Expand("/_nodes/{node_id}/stats/{metric}", map[string]string{
|
|
"node_id": strings.Join(s.nodeId, ","),
|
|
"metric": strings.Join(s.metric, ","),
|
|
})
|
|
} else if len(s.nodeId) > 0 && len(s.metric) == 0 && len(s.indexMetric) > 0 {
|
|
path, err = uritemplates.Expand("/_nodes/{node_id}/stats/_all/{index_metric}", map[string]string{
|
|
"index_metric": strings.Join(s.indexMetric, ","),
|
|
"node_id": strings.Join(s.nodeId, ","),
|
|
})
|
|
} else if len(s.nodeId) > 0 && len(s.metric) == 0 && len(s.indexMetric) == 0 {
|
|
path, err = uritemplates.Expand("/_nodes/{node_id}/stats", map[string]string{
|
|
"node_id": strings.Join(s.nodeId, ","),
|
|
})
|
|
} else if len(s.nodeId) == 0 && len(s.metric) > 0 && len(s.indexMetric) > 0 {
|
|
path, err = uritemplates.Expand("/_nodes/stats/{metric}/{index_metric}", map[string]string{
|
|
"index_metric": strings.Join(s.indexMetric, ","),
|
|
"metric": strings.Join(s.metric, ","),
|
|
})
|
|
} else if len(s.nodeId) == 0 && len(s.metric) > 0 && len(s.indexMetric) == 0 {
|
|
path, err = uritemplates.Expand("/_nodes/stats/{metric}", map[string]string{
|
|
"metric": strings.Join(s.metric, ","),
|
|
})
|
|
} else if len(s.nodeId) == 0 && len(s.metric) == 0 && len(s.indexMetric) > 0 {
|
|
path, err = uritemplates.Expand("/_nodes/stats/_all/{index_metric}", map[string]string{
|
|
"index_metric": strings.Join(s.indexMetric, ","),
|
|
})
|
|
} else { // if len(s.nodeId) == 0 && len(s.metric) == 0 && len(s.indexMetric) == 0 {
|
|
path = "/_nodes/stats"
|
|
}
|
|
if err != nil {
|
|
return "", url.Values{}, err
|
|
}
|
|
|
|
// Add query string parameters
|
|
params := url.Values{}
|
|
if v := s.pretty; v != nil {
|
|
params.Set("pretty", fmt.Sprint(*v))
|
|
}
|
|
if v := s.human; v != nil {
|
|
params.Set("human", fmt.Sprint(*v))
|
|
}
|
|
if v := s.errorTrace; v != nil {
|
|
params.Set("error_trace", fmt.Sprint(*v))
|
|
}
|
|
if len(s.filterPath) > 0 {
|
|
params.Set("filter_path", strings.Join(s.filterPath, ","))
|
|
}
|
|
if len(s.completionFields) > 0 {
|
|
params.Set("completion_fields", strings.Join(s.completionFields, ","))
|
|
}
|
|
if len(s.fielddataFields) > 0 {
|
|
params.Set("fielddata_fields", strings.Join(s.fielddataFields, ","))
|
|
}
|
|
if len(s.fields) > 0 {
|
|
params.Set("fields", strings.Join(s.fields, ","))
|
|
}
|
|
if s.groups != nil {
|
|
params.Set("groups", fmt.Sprintf("%v", *s.groups))
|
|
}
|
|
if s.level != "" {
|
|
params.Set("level", s.level)
|
|
}
|
|
if s.timeout != "" {
|
|
params.Set("timeout", s.timeout)
|
|
}
|
|
if len(s.types) > 0 {
|
|
params.Set("types", strings.Join(s.types, ","))
|
|
}
|
|
return path, params, nil
|
|
}
|
|
|
|
// Validate checks if the operation is valid.
|
|
func (s *NodesStatsService) Validate() error {
|
|
return nil
|
|
}
|
|
|
|
// Do executes the operation.
|
|
func (s *NodesStatsService) Do(ctx context.Context) (*NodesStatsResponse, error) {
|
|
// Check pre-conditions
|
|
if err := s.Validate(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Get URL for request
|
|
path, params, err := s.buildURL()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Get HTTP response
|
|
res, err := s.client.PerformRequest(ctx, PerformRequestOptions{
|
|
Method: "GET",
|
|
Path: path,
|
|
Params: params,
|
|
Headers: s.headers,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Return operation response
|
|
ret := new(NodesStatsResponse)
|
|
if err := json.Unmarshal(res.Body, ret); err != nil {
|
|
return nil, err
|
|
}
|
|
return ret, nil
|
|
}
|
|
|
|
// NodesStatsResponse is the response of NodesStatsService.Do.
|
|
type NodesStatsResponse struct {
|
|
ClusterName string `json:"cluster_name"`
|
|
Nodes map[string]*NodesStatsNode `json:"nodes"`
|
|
}
|
|
|
|
type NodesStatsNode struct {
|
|
// Timestamp when these stats we're gathered.
|
|
Timestamp int64 `json:"timestamp"`
|
|
// Name of the node, e.g. "Mister Fear"
|
|
Name string `json:"name"`
|
|
// TransportAddress, e.g. "127.0.0.1:9300"
|
|
TransportAddress string `json:"transport_address"`
|
|
// Host is the host name, e.g. "macbookair"
|
|
Host string `json:"host"`
|
|
// IP is an IP address, e.g. "192.168.1.2"
|
|
IP string `json:"ip"`
|
|
// Roles is a list of the roles of the node, e.g. master, data, ingest.
|
|
Roles []string `json:"roles"`
|
|
|
|
// Attributes of the node.
|
|
Attributes map[string]interface{} `json:"attributes"`
|
|
|
|
// Indices returns index information.
|
|
Indices *NodesStatsIndex `json:"indices"`
|
|
|
|
// OS information, e.g. CPU and memory.
|
|
OS *NodesStatsNodeOS `json:"os"`
|
|
|
|
// Process information, e.g. max file descriptors.
|
|
Process *NodesStatsNodeProcess `json:"process"`
|
|
|
|
// JVM information, e.g. VM version.
|
|
JVM *NodesStatsNodeJVM `json:"jvm"`
|
|
|
|
// ThreadPool information.
|
|
ThreadPool map[string]*NodesStatsNodeThreadPool `json:"thread_pool"`
|
|
|
|
// FS returns information about the filesystem.
|
|
FS *NodesStatsNodeFS `json:"fs"`
|
|
|
|
// Network information.
|
|
Transport *NodesStatsNodeTransport `json:"transport"`
|
|
|
|
// HTTP information.
|
|
HTTP *NodesStatsNodeHTTP `json:"http"`
|
|
|
|
// Breaker contains information about circuit breakers.
|
|
Breaker map[string]*NodesStatsBreaker `json:"breakers"`
|
|
|
|
// ScriptStats information.
|
|
ScriptStats *NodesStatsScriptStats `json:"script"`
|
|
|
|
// Discovery information.
|
|
Discovery *NodesStatsDiscovery `json:"discovery"`
|
|
|
|
// Ingest information
|
|
Ingest *NodesStatsIngest `json:"ingest"`
|
|
}
|
|
|
|
type NodesStatsIndex struct {
|
|
Docs *NodesStatsDocsStats `json:"docs"`
|
|
Store *NodesStatsStoreStats `json:"store"`
|
|
Indexing *NodesStatsIndexingStats `json:"indexing"`
|
|
Get *NodesStatsGetStats `json:"get"`
|
|
Search *NodesStatsSearchStats `json:"search"`
|
|
Merges *NodesStatsMergeStats `json:"merges"`
|
|
Refresh *NodesStatsRefreshStats `json:"refresh"`
|
|
Flush *NodesStatsFlushStats `json:"flush"`
|
|
Warmer *NodesStatsWarmerStats `json:"warmer"`
|
|
QueryCache *NodesStatsQueryCacheStats `json:"query_cache"`
|
|
Fielddata *NodesStatsFielddataStats `json:"fielddata"`
|
|
Percolate *NodesStatsPercolateStats `json:"percolate"`
|
|
Completion *NodesStatsCompletionStats `json:"completion"`
|
|
Segments *NodesStatsSegmentsStats `json:"segments"`
|
|
Translog *NodesStatsTranslogStats `json:"translog"`
|
|
Suggest *NodesStatsSuggestStats `json:"suggest"`
|
|
RequestCache *NodesStatsRequestCacheStats `json:"request_cache"`
|
|
Recovery NodesStatsRecoveryStats `json:"recovery"`
|
|
|
|
Indices map[string]*NodesStatsIndex `json:"indices"` // for level=indices
|
|
Shards map[string]*NodesStatsIndex `json:"shards"` // for level=shards
|
|
}
|
|
|
|
type NodesStatsDocsStats struct {
|
|
Count int64 `json:"count"`
|
|
Deleted int64 `json:"deleted"`
|
|
}
|
|
|
|
type NodesStatsStoreStats struct {
|
|
Size string `json:"size"`
|
|
SizeInBytes int64 `json:"size_in_bytes"`
|
|
}
|
|
|
|
type NodesStatsIndexingStats struct {
|
|
IndexTotal int64 `json:"index_total"`
|
|
IndexTime string `json:"index_time"`
|
|
IndexTimeInMillis int64 `json:"index_time_in_millis"`
|
|
IndexCurrent int64 `json:"index_current"`
|
|
IndexFailed int64 `json:"index_failed"`
|
|
DeleteTotal int64 `json:"delete_total"`
|
|
DeleteTime string `json:"delete_time"`
|
|
DeleteTimeInMillis int64 `json:"delete_time_in_millis"`
|
|
DeleteCurrent int64 `json:"delete_current"`
|
|
NoopUpdateTotal int64 `json:"noop_update_total"`
|
|
IsThrottled bool `json:"is_throttled"`
|
|
ThrottledTime string `json:"throttle_time"` // no typo, see https://github.com/elastic/elasticsearch/blob/ff99bc1d3f8a7ea72718872d214ec2097dfca276/server/src/main/java/org/elasticsearch/index/shard/IndexingStats.java#L244
|
|
ThrottledTimeInMillis int64 `json:"throttle_time_in_millis"`
|
|
|
|
Types map[string]*NodesStatsIndexingStats `json:"types"` // stats for individual types
|
|
}
|
|
|
|
type NodesStatsGetStats struct {
|
|
Total int64 `json:"total"`
|
|
Time string `json:"get_time"`
|
|
TimeInMillis int64 `json:"time_in_millis"`
|
|
Exists int64 `json:"exists"`
|
|
ExistsTime string `json:"exists_time"`
|
|
ExistsTimeInMillis int64 `json:"exists_in_millis"`
|
|
Missing int64 `json:"missing"`
|
|
MissingTime string `json:"missing_time"`
|
|
MissingTimeInMillis int64 `json:"missing_in_millis"`
|
|
Current int64 `json:"current"`
|
|
}
|
|
|
|
type NodesStatsSearchStats struct {
|
|
OpenContexts int64 `json:"open_contexts"`
|
|
QueryTotal int64 `json:"query_total"`
|
|
QueryTime string `json:"query_time"`
|
|
QueryTimeInMillis int64 `json:"query_time_in_millis"`
|
|
QueryCurrent int64 `json:"query_current"`
|
|
FetchTotal int64 `json:"fetch_total"`
|
|
FetchTime string `json:"fetch_time"`
|
|
FetchTimeInMillis int64 `json:"fetch_time_in_millis"`
|
|
FetchCurrent int64 `json:"fetch_current"`
|
|
ScrollTotal int64 `json:"scroll_total"`
|
|
ScrollTime string `json:"scroll_time"`
|
|
ScrollTimeInMillis int64 `json:"scroll_time_in_millis"`
|
|
ScrollCurrent int64 `json:"scroll_current"`
|
|
|
|
Groups map[string]*NodesStatsSearchStats `json:"groups"` // stats for individual groups
|
|
}
|
|
|
|
type NodesStatsMergeStats struct {
|
|
Current int64 `json:"current"`
|
|
CurrentDocs int64 `json:"current_docs"`
|
|
CurrentSize string `json:"current_size"`
|
|
CurrentSizeInBytes int64 `json:"current_size_in_bytes"`
|
|
Total int64 `json:"total"`
|
|
TotalTime string `json:"total_time"`
|
|
TotalTimeInMillis int64 `json:"total_time_in_millis"`
|
|
TotalDocs int64 `json:"total_docs"`
|
|
TotalSize string `json:"total_size"`
|
|
TotalSizeInBytes int64 `json:"total_size_in_bytes"`
|
|
TotalStoppedTime string `json:"total_stopped_time"`
|
|
TotalStoppedTimeInMillis int64 `json:"total_stopped_time_in_millis"`
|
|
TotalThrottledTime string `json:"total_throttled_time"`
|
|
TotalThrottledTimeInMillis int64 `json:"total_throttled_time_in_millis"`
|
|
TotalThrottleBytes string `json:"total_auto_throttle"`
|
|
TotalThrottleBytesInBytes int64 `json:"total_auto_throttle_in_bytes"`
|
|
}
|
|
|
|
type NodesStatsRefreshStats struct {
|
|
Total int64 `json:"total"`
|
|
TotalTime string `json:"total_time"`
|
|
TotalTimeInMillis int64 `json:"total_time_in_millis"`
|
|
}
|
|
|
|
type NodesStatsFlushStats struct {
|
|
Total int64 `json:"total"`
|
|
TotalTime string `json:"total_time"`
|
|
TotalTimeInMillis int64 `json:"total_time_in_millis"`
|
|
}
|
|
|
|
type NodesStatsWarmerStats struct {
|
|
Current int64 `json:"current"`
|
|
Total int64 `json:"total"`
|
|
TotalTime string `json:"total_time"`
|
|
TotalTimeInMillis int64 `json:"total_time_in_millis"`
|
|
}
|
|
|
|
type NodesStatsQueryCacheStats struct {
|
|
MemorySize string `json:"memory_size"`
|
|
MemorySizeInBytes int64 `json:"memory_size_in_bytes"`
|
|
TotalCount int64 `json:"total_count"`
|
|
HitCount int64 `json:"hit_count"`
|
|
MissCount int64 `json:"miss_count"`
|
|
CacheSize int64 `json:"cache_size"`
|
|
CacheCount int64 `json:"cache_count"`
|
|
Evictions int64 `json:"evictions"`
|
|
}
|
|
|
|
type NodesStatsFielddataStats struct {
|
|
MemorySize string `json:"memory_size"`
|
|
MemorySizeInBytes int64 `json:"memory_size_in_bytes"`
|
|
Evictions int64 `json:"evictions"`
|
|
Fields map[string]struct {
|
|
MemorySize string `json:"memory_size"`
|
|
MemorySizeInBytes int64 `json:"memory_size_in_bytes"`
|
|
} `json:"fields"`
|
|
}
|
|
|
|
type NodesStatsPercolateStats struct {
|
|
Total int64 `json:"total"`
|
|
Time string `json:"time"`
|
|
TimeInMillis int64 `json:"time_in_millis"`
|
|
Current int64 `json:"current"`
|
|
MemorySize string `json:"memory_size"`
|
|
MemorySizeInBytes int64 `json:"memory_size_in_bytes"`
|
|
Queries int64 `json:"queries"`
|
|
}
|
|
|
|
type NodesStatsCompletionStats struct {
|
|
Size string `json:"size"`
|
|
SizeInBytes int64 `json:"size_in_bytes"`
|
|
Fields map[string]struct {
|
|
Size string `json:"size"`
|
|
SizeInBytes int64 `json:"size_in_bytes"`
|
|
} `json:"fields"`
|
|
}
|
|
|
|
type NodesStatsSegmentsStats struct {
|
|
Count int64 `json:"count"`
|
|
Memory string `json:"memory"`
|
|
MemoryInBytes int64 `json:"memory_in_bytes"`
|
|
TermsMemory string `json:"terms_memory"`
|
|
TermsMemoryInBytes int64 `json:"terms_memory_in_bytes"`
|
|
StoredFieldsMemory string `json:"stored_fields_memory"`
|
|
StoredFieldsMemoryInBytes int64 `json:"stored_fields_memory_in_bytes"`
|
|
TermVectorsMemory string `json:"term_vectors_memory"`
|
|
TermVectorsMemoryInBytes int64 `json:"term_vectors_memory_in_bytes"`
|
|
NormsMemory string `json:"norms_memory"`
|
|
NormsMemoryInBytes int64 `json:"norms_memory_in_bytes"`
|
|
DocValuesMemory string `json:"doc_values_memory"`
|
|
DocValuesMemoryInBytes int64 `json:"doc_values_memory_in_bytes"`
|
|
IndexWriterMemory string `json:"index_writer_memory"`
|
|
IndexWriterMemoryInBytes int64 `json:"index_writer_memory_in_bytes"`
|
|
IndexWriterMaxMemory string `json:"index_writer_max_memory"`
|
|
IndexWriterMaxMemoryInBytes int64 `json:"index_writer_max_memory_in_bytes"`
|
|
VersionMapMemory string `json:"version_map_memory"`
|
|
VersionMapMemoryInBytes int64 `json:"version_map_memory_in_bytes"`
|
|
FixedBitSetMemory string `json:"fixed_bit_set"` // not a typo
|
|
FixedBitSetMemoryInBytes int64 `json:"fixed_bit_set_memory_in_bytes"`
|
|
}
|
|
|
|
type NodesStatsTranslogStats struct {
|
|
Operations int64 `json:"operations"`
|
|
Size string `json:"size"`
|
|
SizeInBytes int64 `json:"size_in_bytes"`
|
|
}
|
|
|
|
type NodesStatsSuggestStats struct {
|
|
Total int64 `json:"total"`
|
|
TotalTime string `json:"total_time"`
|
|
TotalTimeInMillis int64 `json:"total_time_in_millis"`
|
|
Current int64 `json:"current"`
|
|
}
|
|
|
|
type NodesStatsRequestCacheStats struct {
|
|
MemorySize string `json:"memory_size"`
|
|
MemorySizeInBytes int64 `json:"memory_size_in_bytes"`
|
|
Evictions int64 `json:"evictions"`
|
|
HitCount int64 `json:"hit_count"`
|
|
MissCount int64 `json:"miss_count"`
|
|
}
|
|
|
|
type NodesStatsRecoveryStats struct {
|
|
CurrentAsSource int `json:"current_as_source"`
|
|
CurrentAsTarget int `json:"current_as_target"`
|
|
}
|
|
|
|
type NodesStatsNodeOS struct {
|
|
Timestamp int64 `json:"timestamp"`
|
|
CPU *NodesStatsNodeOSCPU `json:"cpu"`
|
|
Mem *NodesStatsNodeOSMem `json:"mem"`
|
|
Swap *NodesStatsNodeOSSwap `json:"swap"`
|
|
}
|
|
|
|
type NodesStatsNodeOSCPU struct {
|
|
Percent int `json:"percent"`
|
|
LoadAverage map[string]float64 `json:"load_average"` // keys are: 1m, 5m, and 15m
|
|
}
|
|
|
|
type NodesStatsNodeOSMem struct {
|
|
Total string `json:"total"`
|
|
TotalInBytes int64 `json:"total_in_bytes"`
|
|
Free string `json:"free"`
|
|
FreeInBytes int64 `json:"free_in_bytes"`
|
|
Used string `json:"used"`
|
|
UsedInBytes int64 `json:"used_in_bytes"`
|
|
FreePercent int `json:"free_percent"`
|
|
UsedPercent int `json:"used_percent"`
|
|
}
|
|
|
|
type NodesStatsNodeOSSwap struct {
|
|
Total string `json:"total"`
|
|
TotalInBytes int64 `json:"total_in_bytes"`
|
|
Free string `json:"free"`
|
|
FreeInBytes int64 `json:"free_in_bytes"`
|
|
Used string `json:"used"`
|
|
UsedInBytes int64 `json:"used_in_bytes"`
|
|
}
|
|
|
|
type NodesStatsNodeProcess struct {
|
|
Timestamp int64 `json:"timestamp"`
|
|
OpenFileDescriptors int64 `json:"open_file_descriptors"`
|
|
MaxFileDescriptors int64 `json:"max_file_descriptors"`
|
|
CPU struct {
|
|
Percent int `json:"percent"`
|
|
Total string `json:"total"`
|
|
TotalInMillis int64 `json:"total_in_millis"`
|
|
} `json:"cpu"`
|
|
Mem struct {
|
|
TotalVirtual string `json:"total_virtual"`
|
|
TotalVirtualInBytes int64 `json:"total_virtual_in_bytes"`
|
|
} `json:"mem"`
|
|
}
|
|
|
|
type NodesStatsNodeJVM struct {
|
|
Timestamp int64 `json:"timestamp"`
|
|
Uptime string `json:"uptime"`
|
|
UptimeInMillis int64 `json:"uptime_in_millis"`
|
|
Mem *NodesStatsNodeJVMMem `json:"mem"`
|
|
Threads *NodesStatsNodeJVMThreads `json:"threads"`
|
|
GC *NodesStatsNodeJVMGC `json:"gc"`
|
|
BufferPools map[string]*NodesStatsNodeJVMBufferPool `json:"buffer_pools"`
|
|
Classes *NodesStatsNodeJVMClasses `json:"classes"`
|
|
}
|
|
|
|
type NodesStatsNodeJVMMem struct {
|
|
HeapUsed string `json:"heap_used"`
|
|
HeapUsedInBytes int64 `json:"heap_used_in_bytes"`
|
|
HeapUsedPercent int `json:"heap_used_percent"`
|
|
HeapCommitted string `json:"heap_committed"`
|
|
HeapCommittedInBytes int64 `json:"heap_committed_in_bytes"`
|
|
HeapMax string `json:"heap_max"`
|
|
HeapMaxInBytes int64 `json:"heap_max_in_bytes"`
|
|
NonHeapUsed string `json:"non_heap_used"`
|
|
NonHeapUsedInBytes int64 `json:"non_heap_used_in_bytes"`
|
|
NonHeapCommitted string `json:"non_heap_committed"`
|
|
NonHeapCommittedInBytes int64 `json:"non_heap_committed_in_bytes"`
|
|
Pools map[string]struct {
|
|
Used string `json:"used"`
|
|
UsedInBytes int64 `json:"used_in_bytes"`
|
|
Max string `json:"max"`
|
|
MaxInBytes int64 `json:"max_in_bytes"`
|
|
PeakUsed string `json:"peak_used"`
|
|
PeakUsedInBytes int64 `json:"peak_used_in_bytes"`
|
|
PeakMax string `json:"peak_max"`
|
|
PeakMaxInBytes int64 `json:"peak_max_in_bytes"`
|
|
} `json:"pools"`
|
|
}
|
|
|
|
type NodesStatsNodeJVMThreads struct {
|
|
Count int64 `json:"count"`
|
|
PeakCount int64 `json:"peak_count"`
|
|
}
|
|
|
|
type NodesStatsNodeJVMGC struct {
|
|
Collectors map[string]*NodesStatsNodeJVMGCCollector `json:"collectors"`
|
|
}
|
|
|
|
type NodesStatsNodeJVMGCCollector struct {
|
|
CollectionCount int64 `json:"collection_count"`
|
|
CollectionTime string `json:"collection_time"`
|
|
CollectionTimeInMillis int64 `json:"collection_time_in_millis"`
|
|
}
|
|
|
|
type NodesStatsNodeJVMBufferPool struct {
|
|
Count int64 `json:"count"`
|
|
TotalCapacity string `json:"total_capacity"`
|
|
TotalCapacityInBytes int64 `json:"total_capacity_in_bytes"`
|
|
}
|
|
|
|
type NodesStatsNodeJVMClasses struct {
|
|
CurrentLoadedCount int64 `json:"current_loaded_count"`
|
|
TotalLoadedCount int64 `json:"total_loaded_count"`
|
|
TotalUnloadedCount int64 `json:"total_unloaded_count"`
|
|
}
|
|
|
|
type NodesStatsNodeThreadPool struct {
|
|
Threads int `json:"threads"`
|
|
Queue int `json:"queue"`
|
|
Active int `json:"active"`
|
|
Rejected int64 `json:"rejected"`
|
|
Largest int `json:"largest"`
|
|
Completed int64 `json:"completed"`
|
|
}
|
|
|
|
type NodesStatsNodeFS struct {
|
|
Timestamp int64 `json:"timestamp"`
|
|
Total *NodesStatsNodeFSEntry `json:"total"`
|
|
Data []*NodesStatsNodeFSEntry `json:"data"`
|
|
IOStats *NodesStatsNodeFSIOStats `json:"io_stats"`
|
|
}
|
|
|
|
type NodesStatsNodeFSEntry struct {
|
|
Path string `json:"path"`
|
|
Mount string `json:"mount"`
|
|
Type string `json:"type"`
|
|
Total string `json:"total"`
|
|
TotalInBytes int64 `json:"total_in_bytes"`
|
|
Free string `json:"free"`
|
|
FreeInBytes int64 `json:"free_in_bytes"`
|
|
Available string `json:"available"`
|
|
AvailableInBytes int64 `json:"available_in_bytes"`
|
|
Spins string `json:"spins"`
|
|
}
|
|
|
|
type NodesStatsNodeFSIOStats struct {
|
|
Devices []*NodesStatsNodeFSIOStatsEntry `json:"devices"`
|
|
Total *NodesStatsNodeFSIOStatsEntry `json:"total"`
|
|
}
|
|
|
|
type NodesStatsNodeFSIOStatsEntry struct {
|
|
DeviceName string `json:"device_name"`
|
|
Operations int64 `json:"operations"`
|
|
ReadOperations int64 `json:"read_operations"`
|
|
WriteOperations int64 `json:"write_operations"`
|
|
ReadKilobytes int64 `json:"read_kilobytes"`
|
|
WriteKilobytes int64 `json:"write_kilobytes"`
|
|
}
|
|
|
|
type NodesStatsNodeTransport struct {
|
|
ServerOpen int `json:"server_open"`
|
|
RxCount int64 `json:"rx_count"`
|
|
RxSize string `json:"rx_size"`
|
|
RxSizeInBytes int64 `json:"rx_size_in_bytes"`
|
|
TxCount int64 `json:"tx_count"`
|
|
TxSize string `json:"tx_size"`
|
|
TxSizeInBytes int64 `json:"tx_size_in_bytes"`
|
|
}
|
|
|
|
type NodesStatsNodeHTTP struct {
|
|
CurrentOpen int `json:"current_open"`
|
|
TotalOpened int `json:"total_opened"`
|
|
}
|
|
|
|
type NodesStatsBreaker struct {
|
|
LimitSize string `json:"limit_size"`
|
|
LimitSizeInBytes int64 `json:"limit_size_in_bytes"`
|
|
EstimatedSize string `json:"estimated_size"`
|
|
EstimatedSizeInBytes int64 `json:"estimated_size_in_bytes"`
|
|
Overhead float64 `json:"overhead"`
|
|
Tripped int64 `json:"tripped"`
|
|
}
|
|
|
|
type NodesStatsScriptStats struct {
|
|
Compilations int64 `json:"compilations"`
|
|
CacheEvictions int64 `json:"cache_evictions"`
|
|
}
|
|
|
|
type NodesStatsDiscovery struct {
|
|
ClusterStateQueue *NodesStatsDiscoveryStats `json:"cluster_state_queue"`
|
|
}
|
|
|
|
type NodesStatsDiscoveryStats struct {
|
|
Total int64 `json:"total"`
|
|
Pending int64 `json:"pending"`
|
|
Committed int64 `json:"committed"`
|
|
}
|
|
|
|
type NodesStatsIngest struct {
|
|
Total *NodesStatsIngestStats `json:"total"`
|
|
Pipelines interface{} `json:"pipelines"`
|
|
}
|
|
|
|
type NodesStatsIngestStats struct {
|
|
Count int64 `json:"count"`
|
|
Time string `json:"time"`
|
|
TimeInMillis int64 `json:"time_in_millis"`
|
|
Current int64 `json:"current"`
|
|
Failed int64 `json:"failed"`
|
|
}
|