internal/models/models.go (337 lines of code) (raw):

package models import ( "encoding/json" "errors" "strings" "time" ) type BuildDate struct { time.Time } func (b *BuildDate) UnmarshalJSON(dateBytes []byte) error { dateStr := strings.Trim(string(dateBytes), "\"") if dateStr == "null" { b.Time = time.Time{} return nil } t, err := time.Parse("2006-01-02T15:04:05Z07:00", dateStr) if err != nil { t, err = time.Parse("2006-01-02", dateStr) if err != nil { return err } } b.Time = t return nil } type ClusterInfo struct { Name string `json:"name"` ClusterName string `json:"cluster_name"` ClusterUUID string `json:"cluster_uuid"` Version struct { Number string `json:"number"` BuildType string `json:"build_type"` BuildHash string `json:"build_hash"` BuildFlavor string `json:"build_flavor"` BuildDate BuildDate `json:"build_date"` BuildSnapshot bool `json:"build_snapshot"` LuceneVersion string `json:"lucene_version"` MinimumWireCompatibilityVersion string `json:"minimum_wire_compatibility_version"` MinimumIndexCompatibilityVersion string `json:"minimum_index_compatibility_version"` } `json:"version"` Tagline string `json:"tagline"` } type User struct { Username string `json:"-"` FullName string `json:"full_name,omitempty"` Email string `json:"email,omitempty"` Roles []string `json:"roles"` Password *string `json:"password,omitempty"` PasswordHash *string `json:"password_hash,omitempty"` Metadata map[string]interface{} `json:"metadata,omitempty"` Enabled bool `json:"enabled"` } func (u *User) IsSystemUser() bool { if reserved := u.Metadata["_reserved"]; reserved != nil { isReserved, ok := reserved.(bool) return ok && isReserved } return false } type UserPassword struct { Password *string `json:"password,omitempty"` PasswordHash *string `json:"password_hash,omitempty"` } type Role struct { Name string `json:"-"` Description *string `json:"description,omitempty"` Applications []Application `json:"applications,omitempty"` Global map[string]interface{} `json:"global,omitempty"` Cluster []string `json:"cluster,omitempty"` Indices []IndexPerms `json:"indices,omitempty"` RemoteIndices []RemoteIndexPerms `json:"remote_indices,omitempty"` Metadata map[string]interface{} `json:"metadata,omitempty"` RusAs []string `json:"run_as,omitempty"` } type ApiKeyRoleDescriptor struct { Name string `json:"-"` Applications []Application `json:"applications,omitempty"` Global map[string]interface{} `json:"global,omitempty"` Cluster []string `json:"cluster,omitempty"` Indices []IndexPerms `json:"indices,omitempty"` RemoteIndices []RemoteIndexPerms `json:"remote_indices,omitempty"` Metadata map[string]interface{} `json:"metadata,omitempty"` RusAs []string `json:"run_as,omitempty"` Restriction *Restriction `json:"restriction,omitempty"` } type Restriction struct { Workflows []string `json:"workflows,omitempty"` } type RoleMapping struct { Name string `json:"-"` Enabled bool `json:"enabled"` Roles []string `json:"roles,omitempty"` RoleTemplates []map[string]interface{} `json:"role_templates,omitempty"` Rules map[string]interface{} `json:"rules"` Metadata interface{} `json:"metadata"` } type ApiKey struct { ID string `json:"-"` Name string `json:"name,omitempty"` RolesDescriptors map[string]ApiKeyRoleDescriptor `json:"role_descriptors,omitempty"` Expiration string `json:"expiration,omitempty"` Metadata map[string]interface{} `json:"metadata,omitempty"` } type ApiKeyCreateResponse struct { Id string `json:"id,omitempty"` Name string `json:"name"` Key string `json:"api_key,omitempty"` EncodedKey string `json:"encoded,omitempty"` } type ApiKeyResponse struct { ApiKey RolesDescriptors map[string]ApiKeyRoleDescriptor `json:"role_descriptors,omitempty"` Expiration int64 `json:"expiration,omitempty"` Id string `json:"id,omitempty"` Key string `json:"api_key,omitempty"` EncodedKey string `json:"encoded,omitempty"` Invalidated bool `json:"invalidated,omitempty"` } type IndexPerms struct { FieldSecurity *FieldSecurity `json:"field_security,omitempty"` Names []string `json:"names"` Privileges []string `json:"privileges"` Query *string `json:"query,omitempty"` AllowRestrictedIndices *bool `json:"allow_restricted_indices,omitempty"` } type RemoteIndexPerms struct { FieldSecurity *FieldSecurity `json:"field_security,omitempty"` Names []string `json:"names"` Clusters []string `json:"clusters"` Privileges []string `json:"privileges"` Query *string `json:"query,omitempty"` AllowRestrictedIndices *bool `json:"allow_restricted_indices,omitempty"` } type FieldSecurity struct { Grant []string `json:"grant,omitempty"` Except []string `json:"except,omitempty"` } type Application struct { Name string `json:"application"` Privileges []string `json:"privileges,omitempty"` Resources []string `json:"resources"` } type IndexTemplate struct { Name string `json:"-"` Create bool `json:"-"` Timeout string `json:"-"` ComposedOf []string `json:"composed_of"` DataStream *DataStreamSettings `json:"data_stream,omitempty"` IndexPatterns []string `json:"index_patterns"` Meta map[string]interface{} `json:"_meta,omitempty"` Priority *int `json:"priority,omitempty"` Template *Template `json:"template,omitempty"` Version *int `json:"version,omitempty"` } type DataStreamSettings struct { Hidden *bool `json:"hidden,omitempty"` AllowCustomRouting *bool `json:"allow_custom_routing,omitempty"` } type Template struct { Aliases map[string]IndexAlias `json:"aliases,omitempty"` Mappings map[string]interface{} `json:"mappings,omitempty"` Settings map[string]interface{} `json:"settings,omitempty"` Lifecycle *LifecycleSettings `json:"lifecycle,omitempty"` } type IndexTemplatesResponse struct { IndexTemplates []IndexTemplateResponse `json:"index_templates"` } type IndexTemplateResponse struct { Name string `json:"name"` IndexTemplate IndexTemplate `json:"index_template"` } type ComponentTemplate struct { Name string `json:"-"` Meta map[string]interface{} `json:"_meta,omitempty"` Template *Template `json:"template,omitempty"` Version *int `json:"version,omitempty"` } type ComponentTemplatesResponse struct { ComponentTemplates []ComponentTemplateResponse `json:"component_templates"` } type ComponentTemplateResponse struct { Name string `json:"name"` ComponentTemplate ComponentTemplate `json:"component_template"` } type PolicyDefinition struct { Policy Policy `json:"policy"` Modified string `json:"modified_date"` } type Policy struct { Name string `json:"-"` Metadata map[string]interface{} `json:"_meta,omitempty"` Phases map[string]Phase `json:"phases"` } type Phase struct { MinAge string `json:"min_age,omitempty"` Actions map[string]Action `json:"actions"` } type Action map[string]interface{} type SnapshotRepository struct { Name string `json:"-"` Type string `json:"type"` Settings map[string]interface{} `json:"settings"` Verify bool `json:"verify"` } type SnapshotPolicy struct { Id string `json:"-"` Config *SnapshotPolicyConfig `json:"config,omitempty"` Name string `json:"name"` Repository string `json:"repository"` Retention *SnapshortRetention `json:"retention,omitempty"` Schedule string `json:"schedule"` } type SnapshortRetention struct { ExpireAfter *string `json:"expire_after,omitempty"` MaxCount *int `json:"max_count,omitempty"` MinCount *int `json:"min_count,omitempty"` } type SnapshotPolicyConfig struct { ExpandWildcards *string `json:"expand_wildcards,omitempty"` IgnoreUnavailable *bool `json:"ignore_unavailable,omitempty"` IncludeGlobalState *bool `json:"include_global_state,omitempty"` Indices StringSliceOrCSV `json:"indices,omitempty"` FeatureStates []string `json:"feature_states,omitempty"` Metadata map[string]interface{} `json:"metadata,omitempty"` Partial *bool `json:"partial,omitempty"` } type StringSliceOrCSV []string var ErrInvalidStringSliceOrCSV = errors.New("expected array of strings, or a csv string") func (i *StringSliceOrCSV) UnmarshalJSON(data []byte) error { // Ignore null, like in the main JSON package. if string(data) == "null" || string(data) == `""` { return nil } // First try to parse as an array var sliceResult []string if err := json.Unmarshal(data, &sliceResult); err == nil { *i = StringSliceOrCSV(sliceResult) return nil } var stringResult string if err := json.Unmarshal(data, &stringResult); err == nil { *i = StringSliceOrCSV(strings.Split(stringResult, ",")) return nil } return ErrInvalidStringSliceOrCSV } type Index struct { Name string `json:"-"` Aliases map[string]IndexAlias `json:"aliases,omitempty"` Mappings map[string]interface{} `json:"mappings,omitempty"` Settings map[string]interface{} `json:"settings,omitempty"` } type PutIndexParams struct { WaitForActiveShards string MasterTimeout time.Duration Timeout time.Duration } type IndexAlias struct { Name string `json:"-"` Filter map[string]interface{} `json:"filter,omitempty"` IndexRouting string `json:"index_routing,omitempty"` IsHidden bool `json:"is_hidden,omitempty"` IsWriteIndex bool `json:"is_write_index,omitempty"` Routing string `json:"routing,omitempty"` SearchRouting string `json:"search_routing,omitempty"` } type LifecycleSettings struct { DataRetention string `json:"data_retention,omitempty"` Enabled bool `json:"enabled,omitempty"` Downsampling []Downsampling `json:"downsampling,omitempty"` } type Downsampling struct { After string `json:"after,omitempty"` FixedInterval string `json:"fixed_interval,omitempty"` } type DataStream struct { Name string `json:"name"` TimestampField TimestampField `json:"timestamp_field"` Indices []DataStreamIndex `json:"indices"` Generation uint64 `json:"generation"` Meta map[string]interface{} `json:"_meta"` Status string `json:"status"` Template string `json:"template"` IlmPolicy string `json:"ilm_policy"` Hidden bool `json:"hidden"` System bool `json:"system"` Replicated bool `json:"replicated"` } type DataStreamIndex struct { IndexName string `json:"index_name"` IndexUUID string `json:"index_uuid"` } type DataStreamLifecycle struct { Name string `json:"name"` Lifecycle LifecycleSettings `json:"lifecycle,omitempty"` } type TimestampField struct { Name string `json:"name"` } type LogstashPipeline struct { PipelineID string `json:"-"` Description string `json:"description,omitempty"` LastModified string `json:"last_modified"` Pipeline string `json:"pipeline"` PipelineMetadata map[string]interface{} `json:"pipeline_metadata"` PipelineSettings map[string]interface{} `json:"pipeline_settings"` Username string `json:"username"` } type Script struct { ID string `json:"-"` Language string `json:"lang"` Source string `json:"source"` Params map[string]interface{} `json:"params"` Context string `json:"-"` } type Watch struct { WatchID string `json:"-"` Status struct { State struct { Active bool `json:"active"` } `json:"state"` } `json:"status"` Body WatchBody `json:"watch"` } type PutWatch struct { WatchID string Active bool Body WatchBody } type WatchBody struct { Trigger map[string]interface{} `json:"trigger"` Input map[string]interface{} `json:"input"` Condition map[string]interface{} `json:"condition"` Actions map[string]interface{} `json:"actions"` Metadata map[string]interface{} `json:"metadata"` Transform map[string]interface{} `json:"transform,omitempty"` Throttle_period_in_millis int `json:"throttle_period_in_millis,omitempty"` }