From e2dd8925e1ad6552220affb37226501e74e8bf30 Mon Sep 17 00:00:00 2001 From: Vlad Vitan Date: Wed, 7 Aug 2024 09:53:49 +0200 Subject: [PATCH] dr: Add the end device provisioning info to the bleve index --- pkg/devicerepository/store/bleve/init.go | 58 ++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/pkg/devicerepository/store/bleve/init.go b/pkg/devicerepository/store/bleve/init.go index 6a19ec4ed7..dc042eaf18 100644 --- a/pkg/devicerepository/store/bleve/init.go +++ b/pkg/devicerepository/store/bleve/init.go @@ -35,10 +35,11 @@ import ( ) const ( - indexPath = "index.bleve" - brandDocumentType = "brand" - modelDocumentType = "model" - profileDocumentType = "profile" + indexPath = "index.bleve" + brandDocumentType = "brand" + modelDocumentType = "model" + profileDocumentType = "profile" + indexableEndDeviceProvisioningInfoDocumentType = "endDeviceProvisioningInfo" ) type indexableBrand struct { @@ -71,6 +72,13 @@ type indexableProfile struct { Type string // Index document type, always profileDocumentType } +type indexableEndDeviceProvisioningInfo struct { + EndDeviceProvisioningInfo *ttnpb.EndDeviceProvisioningInfo + + VendorID, VendorProfileID string + Type string // endDeviceProvisioningInfoType +} + func newIndex(path string, overwrite bool, keywords ...string) (bleve.Index, error) { mapping := bleve.NewIndexMapping() if st, err := os.Stat(path); err == nil && st.IsDir() && overwrite { @@ -203,11 +211,53 @@ func (c Config) Initialize(ctx context.Context, lorawanDevicesPath string, overw } } + // Add the end device provisioning info to the index. + for _, model := range models.Models { + profiles, err := s.GetEndDeviceProfiles(store.GetEndDeviceProfilesRequest{ + ModelID: model.ModelId, + }) + if err != nil && !errors.IsNotFound(err) { + return err + } + + for _, profile := range profiles.Profiles { + vendorID := strconv.Itoa(int(brand.LoraAllianceVendorId)) + vendorProfileID := strconv.Itoa(int(profile.VendorProfileID)) + + template, err := s.GetTemplate(&ttnpb.GetTemplateRequest{ + EndDeviceProfileIds: &ttnpb.GetTemplateRequest_EndDeviceProfileIdentifiers{ + VendorId: brand.LoraAllianceVendorId, + VendorProfileId: profile.VendorProfileID, + }, + }, profile) + if err != nil { + return err + } + + edpi := indexableEndDeviceProvisioningInfo{ + VendorID: vendorID, + VendorProfileID: vendorProfileID, + + Type: indexableEndDeviceProvisioningInfoDocumentType, + EndDeviceProvisioningInfo: &ttnpb.EndDeviceProvisioningInfo{ + EndDeviceModel: model, + EndDeviceTemplate: template, + }, + } + + if err := batch.Index(fmt.Sprintf("%s:%s", vendorID, vendorProfileID), edpi); err != nil { + return err + } + } + } + log.FromContext(ctx).WithField("brand_id", brand.BrandId).Debug("Adding brand to index") if err := index.Batch(batch); err != nil { return err } + } + return nil }