Skip to content

Commit bbae546

Browse files
authored
optimize memory consumption (#51)
1 parent 4440da9 commit bbae546

3 files changed

Lines changed: 68 additions & 12 deletions

File tree

tools/tppdb/mongo.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package tppdb
22

33
import (
44
"context"
5+
"errors"
6+
"strings"
57

68
"github.com/botsman/tppVerifier/app/models"
79
"go.mongodb.org/mongo-driver/bson"
@@ -25,16 +27,29 @@ func setupMongoDb(ctx context.Context, connStr string) (*MongoDb, error) {
2527
if err != nil {
2628
return nil, err
2729
}
28-
db := client.Database(opts.Auth.AuthSource)
29-
if db == nil {
30-
db = client.Database("tppVerifier")
30+
dbName, err := extractDatabaseName(connStr)
31+
if err != nil {
32+
return nil, err
3133
}
34+
db := client.Database(dbName)
3235
return &MongoDb{
3336
Client: client,
3437
Database: db,
3538
}, nil
3639
}
3740

41+
func extractDatabaseName(connStr string) (string, error) {
42+
opts := options.Client().ApplyURI(connStr)
43+
if opts.Auth != nil && opts.Auth.AuthSource != "" {
44+
return opts.Auth.AuthSource, nil
45+
}
46+
connStrParts := strings.Split(connStr, "/")
47+
if len(connStrParts) < 2 {
48+
return "", errors.New("database name not found in connection string")
49+
}
50+
return connStrParts[len(connStrParts)-1], nil
51+
}
52+
3853
func (db *MongoDb) Disconnect(ctx context.Context) error {
3954
return db.Client.Disconnect(ctx)
4055
}

tools/tppdb/parse.go

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,17 @@ func downloadRegistry() (io.ReadCloser, error) {
322322
log.Fatalln("Error unmarshalling metadata", err)
323323
return nil, err
324324
}
325+
// If timestamp is not today, skip
326+
// "timestamp": "Tue Sep 30 08:00:50 UTC 2025"
327+
metadataTimestamp := metadata["timestamp"]
328+
timestamp, err := time.Parse("Mon Jan 2 15:04:05 MST 2006", metadataTimestamp)
329+
if err != nil {
330+
log.Printf("Error parsing metadata timestamp: %s\n", err)
331+
return nil, err
332+
}
333+
if timestamp.Year() != time.Now().Year() || timestamp.Month() != time.Now().Month() || timestamp.Day() != time.Now().Day() {
334+
return nil, errors.New("registry is not updated today, skipping")
335+
}
325336
registerUrl := metadata["golden_copy_path_context"] + metadata["latest_version_relative_zip_path"]
326337
registerReq, err := http.Get(registerUrl)
327338
if err != nil {
@@ -377,20 +388,39 @@ func unzipFile(f *zip.File) error {
377388
}
378389

379390
func parseRegistry() (<-chan models.TPP, error) {
380-
file, err := os.ReadFile(RegisterJsonName)
391+
file, err := os.Open(RegisterJsonName)
381392
if err != nil {
382393
return nil, err
383394
}
384395

385396
res := make(chan models.TPP)
386397
go func() {
387-
var registry [][]RawTPP
388-
err = json.Unmarshal(file, &registry)
389-
if err != nil {
390-
log.Fatal(err)
398+
defer file.Close()
399+
defer close(res)
400+
dec := json.NewDecoder(file)
401+
402+
// Expect the outer array
403+
t, err := dec.Token()
404+
if err != nil || t != json.Delim('[') {
405+
log.Printf("Expected outer array: %v", err)
406+
return
391407
}
392-
for _, tpps := range registry {
393-
for _, rawTpp := range tpps {
408+
409+
// Iterate over each inner array
410+
for dec.More() {
411+
// Expect inner array
412+
t, err := dec.Token()
413+
if err != nil || t != json.Delim('[') {
414+
log.Printf("Expected inner array: %v", err)
415+
return
416+
}
417+
// Iterate over RawTPP objects in inner array
418+
for dec.More() {
419+
var rawTpp RawTPP
420+
if err := dec.Decode(&rawTpp); err != nil {
421+
log.Printf("Error decoding RawTPP: %v", err)
422+
continue
423+
}
394424
if rawTpp.CA_OwnerID == "" || rawTpp.Code == "" {
395425
continue
396426
}
@@ -405,8 +435,14 @@ func parseRegistry() (<-chan models.TPP, error) {
405435
}
406436
res <- rawTpp.toTPP()
407437
}
438+
// End of inner array
439+
if t, err := dec.Token(); err != nil || t != json.Delim(']') {
440+
log.Printf("Expected end of inner array: %v", err)
441+
return
442+
}
408443
}
409-
close(res)
444+
// End of outer array
445+
_, _ = dec.Token()
410446
}()
411447
return res, nil
412448
}

tools/tppdb/run.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tppdb
22

33
import (
44
"context"
5+
"log"
56

67
"github.com/botsman/tppVerifier/app/models"
78
)
@@ -25,7 +26,11 @@ func Run(ctx context.Context, connStr string) error {
2526
return err
2627
}
2728

28-
getRegistry()
29+
err = getRegistry()
30+
if err != nil {
31+
log.Printf("Error getting registry: %s\n", err)
32+
return err
33+
}
2934
defer deleteRegistry()
3035

3136
tppChan, err := parseRegistry()

0 commit comments

Comments
 (0)