MCPcopy Index your code
hub / github.com/perkeep/perkeep / newHandlerFromConfig

Function newHandlerFromConfig

pkg/search/handler.go:142–192  ·  view source on GitHub ↗
(ld blobserver.Loader, conf jsonconfig.Obj)

Source from the content-addressed store, hash-verified

140}
141
142func newHandlerFromConfig(ld blobserver.Loader, conf jsonconfig.Obj) (http.Handler, error) {
143 indexPrefix := conf.RequiredString("index") // TODO: add optional help tips here?
144 ownerCfg := conf.RequiredObject("owner")
145 ownerId := ownerCfg.RequiredString("identity")
146 ownerSecring := ownerCfg.RequiredString("secringFile")
147
148 devBlockStartupPrefix := conf.OptionalString("devBlockStartupOn", "")
149 slurpToMemory := conf.OptionalBool("slurpToMemory", false)
150 if err := conf.Validate(); err != nil {
151 return nil, err
152 }
153
154 if devBlockStartupPrefix != "" {
155 _, err := ld.GetHandler(devBlockStartupPrefix)
156 if err != nil {
157 return nil, fmt.Errorf("search handler references bogus devBlockStartupOn handler %s: %v", devBlockStartupPrefix, err)
158 }
159 }
160
161 indexHandler, err := ld.GetHandler(indexPrefix)
162 if err != nil {
163 return nil, fmt.Errorf("search config references unknown handler %q", indexPrefix)
164 }
165 indexer, ok := indexHandler.(index.Interface)
166 if !ok {
167 return nil, fmt.Errorf("search config references invalid indexer %q (actually a %T)", indexPrefix, indexHandler)
168 }
169
170 owner, err := newOwner(serverconfig.Owner{
171 Identity: ownerId,
172 SecringFile: ownerSecring,
173 })
174 if err != nil {
175 return nil, fmt.Errorf("could not create Owner %v", err)
176 }
177 h := NewHandler(indexer, owner)
178
179 if slurpToMemory {
180 ii := indexer.(*index.Index)
181 ii.Lock()
182 corpus, err := ii.KeepInMemory()
183 if err != nil {
184 ii.Unlock()
185 return nil, fmt.Errorf("error slurping index to memory: %v", err)
186 }
187 h.SetCorpus(corpus)
188 ii.Unlock()
189 }
190
191 return h, nil
192}
193
194func newOwner(ownerCfg serverconfig.Owner) (*index.Owner, error) {
195 entity, err := jsonsign.EntityFromSecring(ownerCfg.Identity, ownerCfg.SecringFile)

Callers

nothing calls this directly

Calls 7

SetCorpusMethod · 0.95
newOwnerFunction · 0.85
LockMethod · 0.80
KeepInMemoryMethod · 0.80
UnlockMethod · 0.80
NewHandlerFunction · 0.70
GetHandlerMethod · 0.65

Tested by

no test coverage detected