internal/mode/advanced/elastic/elastic.go (47 lines of code) (raw):
package elastic
import (
"encoding/json"
"io"
"gitlab.com/gitlab-org/gitlab-elasticsearch-indexer/internal/mode/advanced/indexer"
)
const (
// Limiting to 10MiB lets us work on small AWS clusters, but unnecessarily
// increases round trips in larger or non-AWS clusters
DefaultMaxBulkSize = 10 * 1024 * 1024
DefaultBulkWorkers = 10
)
type Config struct {
IndexNameDefault string `json:"index_name"`
IndexNameCommits string `json:"index_name_commits"`
IndexNameWikis string `json:"index_name_wikis"`
ProjectID int64 `json:"-"`
GroupID int64 `json:"-"`
Permissions *indexer.ProjectPermissions `json:"-"`
PermissionsWiki *indexer.WikiPermissions `json:"-"`
URL []string `json:"url"`
AWS bool `json:"aws"`
Region string `json:"aws_region"`
AccessKey string `json:"aws_access_key"`
SecretKey string `json:"aws_secret_access_key"`
MaxBulkSize int `json:"max_bulk_size_bytes"`
BulkWorkers int `json:"max_bulk_concurrency"`
RequestTimeout int `json:"client_request_timeout"`
SearchCuration bool `json:"search_curation"`
TraversalIDs string `json:"traversal_ids"`
HashedRootNamespaceId int16 `json:"hashed_root_namespace_id"`
Archived string `json:"archived"`
SchemaVersionBlob uint16 `json:"schema_version_blob"`
SchemaVersionCommit uint16 `json:"schema_version_commit"`
SchemaVersionWiki uint16 `json:"schema_version_wiki"`
}
func ReadConfig(r io.Reader) (*Config, error) {
var out Config
if err := json.NewDecoder(r).Decode(&out); err != nil {
return nil, err
}
if out.MaxBulkSize == 0 {
out.MaxBulkSize = DefaultMaxBulkSize
}
if out.BulkWorkers == 0 {
out.BulkWorkers = DefaultBulkWorkers
}
return &out, nil
}