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>
277 lines
9.8 KiB
Go
277 lines
9.8 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"
|
|
)
|
|
|
|
// ClusterStatsReq represents possible options for the /_cluster/stats request
|
|
type ClusterStatsReq struct {
|
|
NodeFilters []string
|
|
|
|
Header http.Header
|
|
Params ClusterStatsParams
|
|
}
|
|
|
|
// GetRequest returns the *http.Request that gets executed by the client
|
|
func (r ClusterStatsReq) GetRequest() (*http.Request, error) {
|
|
filters := strings.Join(r.NodeFilters, ",")
|
|
|
|
var path strings.Builder
|
|
path.Grow(22 + len(filters))
|
|
path.WriteString("/_cluster/stats")
|
|
if len(filters) > 0 {
|
|
path.WriteString("/nodes/")
|
|
path.WriteString(filters)
|
|
}
|
|
|
|
return opensearch.BuildRequest(
|
|
"GET",
|
|
path.String(),
|
|
nil,
|
|
r.Params.get(),
|
|
r.Header,
|
|
)
|
|
}
|
|
|
|
// ClusterStatsResp represents the returned struct of the ClusterStatsReq response
|
|
type ClusterStatsResp struct {
|
|
NodesInfo struct {
|
|
Total int `json:"total"`
|
|
Successful int `json:"successful"`
|
|
Failed int `json:"failed"`
|
|
Failures []FailuresCause `json:"failures"`
|
|
} `json:"_nodes"`
|
|
ClusterName string `json:"cluster_name"`
|
|
ClusterUUID string `json:"cluster_uuid"`
|
|
Timestamp int64 `json:"timestamp"`
|
|
Status string `json:"status"`
|
|
Indices ClusterStatsIndices `json:"indices"`
|
|
Nodes ClusterStatsNodes `json:"nodes"`
|
|
response *opensearch.Response
|
|
}
|
|
|
|
// Inspect returns the Inspect type containing the raw *opensearch.Reponse
|
|
func (r ClusterStatsResp) Inspect() Inspect {
|
|
return Inspect{Response: r.response}
|
|
}
|
|
|
|
// ClusterStatsIndices is a sub type of ClusterStatsResp containing cluster information about indices
|
|
type ClusterStatsIndices struct {
|
|
Count int `json:"count"`
|
|
Shards struct {
|
|
Total int `json:"total"`
|
|
Primaries int `json:"primaries"`
|
|
Replication float64 `json:"replication"`
|
|
Index struct {
|
|
Shards struct {
|
|
Min float64 `json:"min"`
|
|
Max float64 `json:"max"`
|
|
Avg float64 `json:"avg"`
|
|
} `json:"shards"`
|
|
Primaries struct {
|
|
Min float64 `json:"min"`
|
|
Max float64 `json:"max"`
|
|
Avg float64 `json:"avg"`
|
|
} `json:"primaries"`
|
|
Replication struct {
|
|
Min float64 `json:"min"`
|
|
Max float64 `json:"max"`
|
|
Avg float64 `json:"avg"`
|
|
} `json:"replication"`
|
|
} `json:"index"`
|
|
} `json:"shards"`
|
|
Docs struct {
|
|
Count int64 `json:"count"`
|
|
Deleted int `json:"deleted"`
|
|
} `json:"docs"`
|
|
Store struct {
|
|
SizeInBytes int64 `json:"size_in_bytes"`
|
|
ReservedInBytes int `json:"reserved_in_bytes"`
|
|
} `json:"store"`
|
|
Fielddata struct {
|
|
MemorySizeInBytes int `json:"memory_size_in_bytes"`
|
|
Evictions int `json:"evictions"`
|
|
} `json:"fielddata"`
|
|
QueryCache 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"`
|
|
} `json:"query_cache"`
|
|
Completion struct {
|
|
SizeInBytes int `json:"size_in_bytes"`
|
|
} `json:"completion"`
|
|
Segments 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 int64 `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"`
|
|
} `json:"segments"`
|
|
Mappings struct {
|
|
FieldTypes []struct {
|
|
Name string `json:"name"`
|
|
Count int `json:"count"`
|
|
IndexCount int `json:"index_count"`
|
|
} `json:"field_types"`
|
|
} `json:"mappings"`
|
|
Analysis struct {
|
|
CharFilterTypes []json.RawMessage `json:"char_filter_types"`
|
|
TokenizerTypes []json.RawMessage `json:"tokenizer_types"`
|
|
FilterTypes []json.RawMessage `json:"filter_types"`
|
|
AnalyzerTypes []json.RawMessage `json:"analyzer_types"`
|
|
BuiltInCharFilters []json.RawMessage `json:"built_in_char_filters"`
|
|
BuiltInTokenizers []json.RawMessage `json:"built_in_tokenizers"`
|
|
BuiltInFilters []json.RawMessage `json:"built_in_filters"`
|
|
BuiltInAnalyzers []json.RawMessage `json:"built_in_analyzers"`
|
|
} `json:"analysis"`
|
|
RepositoryCleanup struct {
|
|
RepositoryCleanup []json.RawMessage `json:"repository_cleanup"`
|
|
} `json:"repository_cleanup"`
|
|
}
|
|
|
|
// ClusterStatsNodes is a sub type of ClusterStatsResp containing information about node stats
|
|
type ClusterStatsNodes struct {
|
|
Count struct {
|
|
Total int `json:"total"`
|
|
ClusterManager int `json:"cluster_manager"`
|
|
CoordinatingOnly int `json:"coordinating_only"`
|
|
Data int `json:"data"`
|
|
Ingest int `json:"ingest"`
|
|
Master int `json:"master"`
|
|
RemoteClusterClient int `json:"remote_cluster_client"`
|
|
Search int `json:"search"`
|
|
} `json:"count"`
|
|
Versions []string `json:"versions"`
|
|
Os struct {
|
|
AvailableProcessors int `json:"available_processors"`
|
|
AllocatedProcessors int `json:"allocated_processors"`
|
|
Names []struct {
|
|
Name string `json:"name"`
|
|
Count int `json:"count"`
|
|
} `json:"names"`
|
|
PrettyNames []struct {
|
|
PrettyName string `json:"pretty_name"`
|
|
Count int `json:"count"`
|
|
} `json:"pretty_names"`
|
|
Mem struct {
|
|
TotalInBytes int64 `json:"total_in_bytes"`
|
|
FreeInBytes int64 `json:"free_in_bytes"`
|
|
UsedInBytes int64 `json:"used_in_bytes"`
|
|
FreePercent int `json:"free_percent"`
|
|
UsedPercent int `json:"used_percent"`
|
|
} `json:"mem"`
|
|
} `json:"os"`
|
|
Process struct {
|
|
CPU struct {
|
|
Percent int `json:"percent"`
|
|
} `json:"cpu"`
|
|
OpenFileDescriptors struct {
|
|
Min int `json:"min"`
|
|
Max int `json:"max"`
|
|
Avg int `json:"avg"`
|
|
} `json:"open_file_descriptors"`
|
|
} `json:"process"`
|
|
Jvm struct {
|
|
MaxUptimeInMillis int64 `json:"max_uptime_in_millis"`
|
|
Versions []struct {
|
|
Version string `json:"version"`
|
|
VMName string `json:"vm_name"`
|
|
VMVersion string `json:"vm_version"`
|
|
VMVendor string `json:"vm_vendor"`
|
|
BundledJdk bool `json:"bundled_jdk"`
|
|
UsingBundledJdk bool `json:"using_bundled_jdk"`
|
|
Count int `json:"count"`
|
|
} `json:"versions"`
|
|
Mem struct {
|
|
HeapUsedInBytes int64 `json:"heap_used_in_bytes"`
|
|
HeapMaxInBytes int64 `json:"heap_max_in_bytes"`
|
|
} `json:"mem"`
|
|
Threads int `json:"threads"`
|
|
} `json:"jvm"`
|
|
Fs struct {
|
|
TotalInBytes int64 `json:"total_in_bytes"`
|
|
FreeInBytes int64 `json:"free_in_bytes"`
|
|
AvailableInBytes int64 `json:"available_in_bytes"`
|
|
CacheReservedInBytes int `json:"cache_reserved_in_bytes"`
|
|
} `json:"fs"`
|
|
Plugins []struct {
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
OpensearchVersion string `json:"opensearch_version"`
|
|
JavaVersion string `json:"java_version"`
|
|
Description string `json:"description"`
|
|
Classname string `json:"classname"`
|
|
CustomFoldername *string `json:"custom_foldername"`
|
|
ExtendedPlugins []string `json:"extended_plugins"`
|
|
OptionalExtendedPlugins []string `json:"optional_extended_plugins"`
|
|
HasNativeController bool `json:"has_native_controller"`
|
|
} `json:"plugins"`
|
|
NetworkTypes struct {
|
|
TransportTypes map[string]int `json:"transport_types"`
|
|
HTTPTypes map[string]int `json:"http_types"`
|
|
} `json:"network_types"`
|
|
DiscoveryTypes map[string]int `json:"discovery_types"`
|
|
PackagingTypes []struct {
|
|
Type string `json:"type"`
|
|
Count int `json:"count"`
|
|
} `json:"packaging_types"`
|
|
Ingest struct {
|
|
NumberOfPipelines int `json:"number_of_pipelines"`
|
|
ProcessorStats json.RawMessage `json:"processor_stats"`
|
|
} `json:"ingest"`
|
|
}
|