Add Helm Chart (#454)

This commit is contained in:
Thomas Miceli
2025-04-06 00:51:38 +02:00
committed by GitHub
parent 2d8debecbe
commit 9e69677f58
31 changed files with 939 additions and 186 deletions

View File

@ -126,7 +126,7 @@ func Initialize(ctx *cli.Context) {
index.DepreactionIndexDirname()
if index.IndexEnabled() {
index.NewIndexer(index.IndexType())
go index.NewIndexer(index.IndexType())
}
}

View File

@ -22,16 +22,23 @@ func NewBleveIndexer(path string) *BleveIndexer {
return &BleveIndexer{path: path}
}
func (i *BleveIndexer) Init() {
func (i *BleveIndexer) Init() error {
errChan := make(chan error, 1)
go func() {
bleveIndex, err := i.open()
if err != nil {
log.Error().Err(err).Msg("Failed to open Bleve index")
i.Close()
errChan <- err
return
}
i.index = bleveIndex
log.Info().Msg("Bleve indexer initialized")
errChan <- nil
}()
return <-errChan
}
func (i *BleveIndexer) open() (bleve.Index, error) {

View File

@ -11,7 +11,7 @@ import (
var atomicIndexer atomic.Pointer[Indexer]
type Indexer interface {
Init()
Init() error
Close()
Add(gist *Gist) error
Remove(gistID uint) error
@ -64,7 +64,9 @@ func NewIndexer(idxType IndexerType) {
return
}
idx.Init()
if err := idx.Init(); err != nil {
return
}
atomicIndexer.Store(&idx)
}
@ -73,12 +75,12 @@ func Close() {
return
}
idx := *atomicIndexer.Load()
idx := atomicIndexer.Load()
if idx == nil {
return
}
idx.Close()
(*idx).Close()
atomicIndexer.Store(nil)
}
@ -87,12 +89,12 @@ func AddInIndex(gist *Gist) error {
return nil
}
idx := *atomicIndexer.Load()
idx := atomicIndexer.Load()
if idx == nil {
return fmt.Errorf("indexer is not initialized")
}
return idx.Add(gist)
return (*idx).Add(gist)
}
func RemoveFromIndex(gistID uint) error {
@ -100,12 +102,12 @@ func RemoveFromIndex(gistID uint) error {
return nil
}
idx := *atomicIndexer.Load()
idx := atomicIndexer.Load()
if idx == nil {
return fmt.Errorf("indexer is not initialized")
}
return idx.Remove(gistID)
return (*idx).Remove(gistID)
}
func SearchGists(query string, metadata SearchGistMetadata, userId uint, page int) ([]uint, uint64, map[string]int, error) {
@ -113,12 +115,12 @@ func SearchGists(query string, metadata SearchGistMetadata, userId uint, page in
return nil, 0, nil, nil
}
idx := *atomicIndexer.Load()
idx := atomicIndexer.Load()
if idx == nil {
return nil, 0, nil, fmt.Errorf("indexer is not initialized")
}
return idx.Search(query, metadata, userId, page)
return (*idx).Search(query, metadata, userId, page)
}
func DepreactionIndexDirname() {

View File

@ -25,29 +25,34 @@ func NewMeiliIndexer(host, apikey, indexName string) *MeiliIndexer {
}
}
func (i *MeiliIndexer) Init() {
func (i *MeiliIndexer) Init() error {
errChan := make(chan error, 1)
go func() {
meiliIndex, err := i.open()
if err != nil {
log.Error().Err(err).Msg("Failed to open Meilisearch index")
i.Close()
errChan <- err
return
}
i.index = meiliIndex
log.Info().Msg("Meilisearch indexer initialized")
errChan <- nil
}()
return <-errChan
}
func (i *MeiliIndexer) open() (meilisearch.IndexManager, error) {
client := meilisearch.New(i.host, meilisearch.WithAPIKey(i.apikey))
indexResult, err := client.GetIndex(i.indexName)
if err != nil {
return nil, err
}
i.client = meilisearch.New(i.host, meilisearch.WithAPIKey(i.apikey))
indexResult, err := i.client.GetIndex(i.indexName)
if indexResult != nil {
if indexResult != nil && err == nil {
return indexResult.IndexManager, nil
}
_, err = client.CreateIndex(&meilisearch.IndexConfig{
_, err = i.client.CreateIndex(&meilisearch.IndexConfig{
Uid: i.indexName,
PrimaryKey: "GistID",
})
@ -55,14 +60,14 @@ func (i *MeiliIndexer) open() (meilisearch.IndexManager, error) {
return nil, err
}
_, _ = client.Index(i.indexName).UpdateSettings(&meilisearch.Settings{
_, _ = i.client.Index(i.indexName).UpdateSettings(&meilisearch.Settings{
FilterableAttributes: []string{"GistID", "UserID", "Visibility", "Username", "Title", "Filenames", "Extensions", "Languages", "Topics"},
DisplayedAttributes: []string{"GistID"},
SearchableAttributes: []string{"Content", "Username", "Title", "Filenames", "Extensions", "Languages", "Topics"},
RankingRules: []string{"words"},
})
return client.Index(i.indexName), nil
return i.client.Index(i.indexName), nil
}
func (i *MeiliIndexer) Close() {