Full Mattermost server source with integrated Community Enterprise features. Includes vendor directory for offline/air-gapped builds. Structure: - enterprise-impl/: Enterprise feature implementations - enterprise-community/: Init files that register implementations - enterprise/: Bridge imports (community_imports.go) - vendor/: All dependencies for offline builds Build (online): go build ./cmd/mattermost Build (offline/air-gapped): go build -mod=vendor ./cmd/mattermost 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
318 lines
13 KiB
Go
318 lines
13 KiB
Go
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
// The OpenSearch Contributors require contributions made to
|
|
// this file be licensed under the Apache-2.0 license or a
|
|
// compatible open source license.
|
|
|
|
package opensearchapi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/opensearch-project/opensearch-go/v4"
|
|
)
|
|
|
|
// IndicesStatsReq represents possible options for the index shrink request
|
|
type IndicesStatsReq struct {
|
|
Indices []string
|
|
Metrics []string
|
|
|
|
Header http.Header
|
|
Params IndicesStatsParams
|
|
}
|
|
|
|
// GetRequest returns the *http.Request that gets executed by the client
|
|
func (r IndicesStatsReq) GetRequest() (*http.Request, error) {
|
|
indices := strings.Join(r.Indices, ",")
|
|
metrics := strings.Join(r.Metrics, ",")
|
|
|
|
var path strings.Builder
|
|
path.Grow(9 + len(indices) + len(metrics))
|
|
if len(indices) > 0 {
|
|
path.WriteString("/")
|
|
path.WriteString(indices)
|
|
}
|
|
path.WriteString("/_stats")
|
|
if len(metrics) > 0 {
|
|
path.WriteString("/")
|
|
path.WriteString(metrics)
|
|
}
|
|
return opensearch.BuildRequest(
|
|
"GET",
|
|
path.String(),
|
|
nil,
|
|
r.Params.get(),
|
|
r.Header,
|
|
)
|
|
}
|
|
|
|
// IndicesStatsResp represents the returned struct of the index shrink response
|
|
type IndicesStatsResp struct {
|
|
Shards IndicesStatsShards `json:"_shards"`
|
|
All IndicesStatsAll `json:"_all"`
|
|
Indices IndicesStatsIndices `json:"indices"`
|
|
response *opensearch.Response
|
|
}
|
|
|
|
// Inspect returns the Inspect type containing the raw *opensearch.Reponse
|
|
func (r IndicesStatsResp) Inspect() Inspect {
|
|
return Inspect{Response: r.response}
|
|
}
|
|
|
|
// IndicesStatsShards is a sub type of IndicesStatsResp containing information about how many shards got requested
|
|
type IndicesStatsShards struct {
|
|
Total int `json:"total"`
|
|
Successful int `json:"successful"`
|
|
Failed int `json:"failed"`
|
|
Failures []FailuresShard `json:"failures"`
|
|
}
|
|
|
|
// IndicesStatsDocs is a sub type of IndicesStatsInfo containing stats about the index documents
|
|
type IndicesStatsDocs struct {
|
|
Count int `json:"count"`
|
|
Deleted int `json:"deleted"`
|
|
}
|
|
|
|
// IndicesStatsStore is a sub type of IndicesStatsInfo containing stats about index storage
|
|
type IndicesStatsStore struct {
|
|
SizeInBytes int64 `json:"size_in_bytes"`
|
|
ReservedInBytes int `json:"reserved_in_bytes"`
|
|
}
|
|
|
|
// IndicesStatsIndexing is a sub type of IndicesStatsInfo containing stats about document indexing
|
|
type IndicesStatsIndexing struct {
|
|
IndexTotal int `json:"index_total"`
|
|
IndexTimeInMillis int `json:"index_time_in_millis"`
|
|
IndexCurrent int `json:"index_current"`
|
|
IndexFailed int `json:"index_failed"`
|
|
DeleteTotal int `json:"delete_total"`
|
|
DeleteTimeInMillis int `json:"delete_time_in_millis"`
|
|
DeleteCurrent int `json:"delete_current"`
|
|
NoopUpdateTotal int `json:"noop_update_total"`
|
|
IsThrottled bool `json:"is_throttled"`
|
|
ThrottleTimeInMillis int `json:"throttle_time_in_millis"`
|
|
DocStatus map[string]int `json:"doc_status"`
|
|
}
|
|
|
|
// IndicesStatsGet is a sub type of IndicesStatsInfo containing stats about index get
|
|
type IndicesStatsGet struct {
|
|
Total int `json:"total"`
|
|
TimeInMillis int `json:"time_in_millis"`
|
|
ExistsTotal int `json:"exists_total"`
|
|
ExistsTimeInMillis int `json:"exists_time_in_millis"`
|
|
MissingTotal int `json:"missing_total"`
|
|
MissingTimeInMillis int `json:"missing_time_in_millis"`
|
|
Current int `json:"current"`
|
|
GetTime string `json:"getTime"`
|
|
}
|
|
|
|
// IndicesStatsSearch is a sub type of IndicesStatsInfo containing stats about index search
|
|
type IndicesStatsSearch struct {
|
|
OpenContexts int `json:"open_contexts"`
|
|
QueryTotal int `json:"query_total"`
|
|
QueryTimeInMillis int `json:"query_time_in_millis"`
|
|
QueryCurrent int `json:"query_current"`
|
|
ConcurrentQueryTotal int `json:"concurrent_query_total"`
|
|
ConcurrentQueryTimeInMillis int `json:"concurrent_query_time_in_millis"`
|
|
ConcurrentQueryCurrent int `json:"concurrent_query_current"`
|
|
ConcurrentAVGSliceCount float32 `json:"concurrent_avg_slice_count"`
|
|
FetchTotal int `json:"fetch_total"`
|
|
FetchTimeInMillis int `json:"fetch_time_in_millis"`
|
|
FetchCurrent int `json:"fetch_current"`
|
|
ScrollTotal int `json:"scroll_total"`
|
|
ScrollTimeInMillis int `json:"scroll_time_in_millis"`
|
|
ScrollCurrent int `json:"scroll_current"`
|
|
PointInTimeTotal int `json:"point_in_time_total"`
|
|
PointInTimeTimeInMillis int `json:"point_in_time_time_in_millis"`
|
|
PointInTimeCurrent int `json:"point_in_time_current"`
|
|
SuggestTotal int `json:"suggest_total"`
|
|
SuggestTimeInMillis int `json:"suggest_time_in_millis"`
|
|
SuggestCurrent int `json:"suggest_current"`
|
|
IdleReactivateCountTotal int `json:"search_idle_reactivate_count_total"`
|
|
}
|
|
|
|
// IndicesStatsMerges is a sub type of IndicesStatsInfo containing stats about index merges
|
|
type IndicesStatsMerges struct {
|
|
Current int `json:"current"`
|
|
CurrentDocs int `json:"current_docs"`
|
|
CurrentSizeInBytes int `json:"current_size_in_bytes"`
|
|
Total int `json:"total"`
|
|
TotalTimeInMillis int `json:"total_time_in_millis"`
|
|
TotalDocs int `json:"total_docs"`
|
|
TotalSizeInBytes int64 `json:"total_size_in_bytes"`
|
|
TotalStoppedTimeInMillis int `json:"total_stopped_time_in_millis"`
|
|
TotalThrottledTimeInMillis int `json:"total_throttled_time_in_millis"`
|
|
TotalAutoThrottleInBytes int `json:"total_auto_throttle_in_bytes"`
|
|
UnreferencedFileCleanupsPerformed int `json:"unreferenced_file_cleanups_performed"`
|
|
}
|
|
|
|
// IndicesStatsRefresh is a sub type of IndicesStatsInfo containing stats about index refresh
|
|
type IndicesStatsRefresh struct {
|
|
Total int `json:"total"`
|
|
TotalTimeInMillis int `json:"total_time_in_millis"`
|
|
ExternalTotal int `json:"external_total"`
|
|
ExternalTotalTimeInMillis int `json:"external_total_time_in_millis"`
|
|
Listeners int `json:"listeners"`
|
|
}
|
|
|
|
// IndicesStatsFlush is a sub type of IndicesStatsInfo containing stats about index flush
|
|
type IndicesStatsFlush struct {
|
|
Total int `json:"total"`
|
|
Periodic int `json:"periodic"`
|
|
TotalTimeInMillis int `json:"total_time_in_millis"`
|
|
}
|
|
|
|
// IndicesStatsWarmer is a sub type of IndicesStatsInfo containing stats about index warmer
|
|
type IndicesStatsWarmer struct {
|
|
Current int `json:"current"`
|
|
Total int `json:"total"`
|
|
TotalTimeInMillis int `json:"total_time_in_millis"`
|
|
}
|
|
|
|
// IndicesStatsQueryCache is a sub type of IndicesStatsInfo containing stats about index query cache
|
|
type IndicesStatsQueryCache struct {
|
|
MemorySizeInBytes int `json:"memory_size_in_bytes"`
|
|
TotalCount int `json:"total_count"`
|
|
HitCount int `json:"hit_count"`
|
|
MissCount int `json:"miss_count"`
|
|
CacheSize int `json:"cache_size"`
|
|
CacheCount int `json:"cache_count"`
|
|
Evictions int `json:"evictions"`
|
|
}
|
|
|
|
// IndicesStatsFielddata is a sub type of IndicesStatsInfo containing stats about index fielddata
|
|
type IndicesStatsFielddata struct {
|
|
MemorySizeInBytes int `json:"memory_size_in_bytes"`
|
|
Evictions int `json:"evictions"`
|
|
}
|
|
|
|
// IndicesStatsCompletion is a sub type of IndicesStatsInfo containing stats about index completion
|
|
type IndicesStatsCompletion struct {
|
|
SizeInBytes int `json:"size_in_bytes"`
|
|
}
|
|
|
|
// IndicesStatsSegments is a sub type of IndicesStatsInfo containing stats about index segments
|
|
type IndicesStatsSegments struct {
|
|
Count int `json:"count"`
|
|
MemoryInBytes int `json:"memory_in_bytes"`
|
|
TermsMemoryInBytes int `json:"terms_memory_in_bytes"`
|
|
StoredFieldsMemoryInBytes int `json:"stored_fields_memory_in_bytes"`
|
|
TermVectorsMemoryInBytes int `json:"term_vectors_memory_in_bytes"`
|
|
NormsMemoryInBytes int `json:"norms_memory_in_bytes"`
|
|
PointsMemoryInBytes int `json:"points_memory_in_bytes"`
|
|
DocValuesMemoryInBytes int `json:"doc_values_memory_in_bytes"`
|
|
IndexWriterMemoryInBytes int `json:"index_writer_memory_in_bytes"`
|
|
VersionMapMemoryInBytes int `json:"version_map_memory_in_bytes"`
|
|
FixedBitSetMemoryInBytes int `json:"fixed_bit_set_memory_in_bytes"`
|
|
MaxUnsafeAutoIDTimestamp int64 `json:"max_unsafe_auto_id_timestamp"`
|
|
RemoteStore struct {
|
|
Upload struct {
|
|
TotalUploadSize struct {
|
|
StartedBytes int `json:"started_bytes"`
|
|
SucceededBytes int `json:"succeeded_bytes"`
|
|
FailedBytes int `json:"failed_bytes"`
|
|
} `json:"total_upload_size"`
|
|
RefreshSizeLag struct {
|
|
TotalBytes int `json:"total_bytes"`
|
|
MaxBytes int `json:"max_bytes"`
|
|
} `json:"refresh_size_lag"`
|
|
MaxRefreshTimeLagInMillis int `json:"max_refresh_time_lag_in_millis"`
|
|
TotalTimeSpentInMillis int `json:"total_time_spent_in_millis"`
|
|
Pressure struct {
|
|
TotalRejections int `json:"total_rejections"`
|
|
} `json:"pressure"`
|
|
} `json:"upload"`
|
|
Download struct {
|
|
TotalDownloadSize struct {
|
|
StartedBytes int `json:"started_bytes"`
|
|
SucceededBytes int `json:"succeeded_bytes"`
|
|
FailedBytes int `json:"failed_bytes"`
|
|
} `json:"total_download_size"`
|
|
TotalTimeSpentInMillis int `json:"total_time_spent_in_millis"`
|
|
} `json:"download"`
|
|
} `json:"remote_store"`
|
|
SegmentReplication struct {
|
|
// Type is json.RawMessage due to difference in opensearch versions from string to int
|
|
MaxBytesBehind json.RawMessage `json:"max_bytes_behind"`
|
|
TotalBytesBehind json.RawMessage `json:"total_bytes_behind"`
|
|
MaxReplicationLag json.RawMessage `json:"max_replication_lag"`
|
|
} `json:"segment_replication"`
|
|
FileSizes json.RawMessage `json:"file_sizes"`
|
|
}
|
|
|
|
// IndicesStatsTranslog is a sub type of IndicesStatsInfo containing stats about index translog
|
|
type IndicesStatsTranslog struct {
|
|
Operations int `json:"operations"`
|
|
SizeInBytes int `json:"size_in_bytes"`
|
|
UncommittedOperations int `json:"uncommitted_operations"`
|
|
UncommittedSizeInBytes int `json:"uncommitted_size_in_bytes"`
|
|
EarliestLastModifiedAge int `json:"earliest_last_modified_age"`
|
|
RemoteStore struct {
|
|
Upload struct {
|
|
TotalUploads struct {
|
|
Started int `json:"started"`
|
|
Failed int `json:"failed"`
|
|
Succeeded int `json:"succeeded"`
|
|
} `json:"total_uploads"`
|
|
TotalUploadSize struct {
|
|
StartedBytes int `json:"started_bytes"`
|
|
FailedBytes int `json:"failed_bytes"`
|
|
SucceededBytes int `json:"succeeded_bytes"`
|
|
} `json:"total_upload_size"`
|
|
} `json:"upload"`
|
|
} `json:"remote_store"`
|
|
}
|
|
|
|
// IndicesStatsRequestCache is a sub type of IndicesStatsInfo containing stats about index request cache
|
|
type IndicesStatsRequestCache struct {
|
|
MemorySizeInBytes int `json:"memory_size_in_bytes"`
|
|
Evictions int `json:"evictions"`
|
|
HitCount int `json:"hit_count"`
|
|
MissCount int `json:"miss_count"`
|
|
}
|
|
|
|
// IndicesStatsRecovery is a sub type of IndicesStatsInfo containing stats about index recovery
|
|
type IndicesStatsRecovery struct {
|
|
CurrentAsSource int `json:"current_as_source"`
|
|
CurrentAsTarget int `json:"current_as_target"`
|
|
ThrottleTimeInMillis int `json:"throttle_time_in_millis"`
|
|
}
|
|
|
|
// IndicesStatsInfo is a sub type of IndicesStatsAll, IndicesStatsDetails aggregating all document stats
|
|
type IndicesStatsInfo struct {
|
|
Docs IndicesStatsDocs `json:"docs"`
|
|
Store IndicesStatsStore `json:"store"`
|
|
Indexing IndicesStatsIndexing `json:"indexing"`
|
|
Get IndicesStatsGet `json:"get"`
|
|
Search IndicesStatsSearch `json:"search"`
|
|
Merges IndicesStatsMerges `json:"merges"`
|
|
Refresh IndicesStatsRefresh `json:"refresh"`
|
|
Flush IndicesStatsFlush `json:"flush"`
|
|
Warmer IndicesStatsWarmer `json:"warmer"`
|
|
QueryCache IndicesStatsQueryCache `json:"query_cache"`
|
|
Fielddata IndicesStatsFielddata `json:"fielddata"`
|
|
Completion IndicesStatsCompletion `json:"completion"`
|
|
Segments IndicesStatsSegments `json:"segments"`
|
|
Translog IndicesStatsTranslog `json:"translog"`
|
|
RequestCache IndicesStatsRequestCache `json:"request_cache"`
|
|
Recovery IndicesStatsRecovery `json:"recovery"`
|
|
}
|
|
|
|
// IndicesStatsAll is a sub type of IndicesStatsResp containing information about docs stats from all indices
|
|
type IndicesStatsAll struct {
|
|
Primaries IndicesStatsInfo `json:"primaries"`
|
|
Total IndicesStatsInfo `json:"total"`
|
|
}
|
|
|
|
// IndicesStatsDetails is a sub type of IndicesStatsIndices containing the information about the index uuid and index stats
|
|
type IndicesStatsDetails struct {
|
|
UUID string `json:"uuid"`
|
|
Primaries IndicesStatsInfo `json:"primaries"`
|
|
Total IndicesStatsInfo `json:"total"`
|
|
}
|
|
|
|
// IndicesStatsIndices is a sub type of IndicesStatsResp containing information about docs stats from specific indices
|
|
type IndicesStatsIndices map[string]IndicesStatsDetails
|