Skip to content

Commit e87272f

Browse files
author
Ken Erwin
committed
✨ Now generating tiledata.sjon as well, but with terrible efficiency
1 parent dcf6a32 commit e87272f

File tree

2 files changed

+94
-4
lines changed

2 files changed

+94
-4
lines changed

new-backend/internal/ingestor/ingestor.go

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,15 @@ type Ingestor struct {
7474

7575
func NewIngestor(logger *zap.Logger, sqlDB *sql.DB, apiKey string) *Ingestor {
7676
pubSub := NewPubSub()
77-
s3Syncer, err := NewS3Syncer(logger, "cache")
78-
if err != nil {
79-
logger.Error("Failed to create S3Syncer", zap.Error(err))
77+
var s3Syncer *S3Syncer
78+
79+
// Check if SYNC_TO_AWS environment variable is set
80+
if os.Getenv("SYNC_TO_AWS") == "true" {
81+
var err error
82+
s3Syncer, err = NewS3Syncer(logger, "cache")
83+
if err != nil {
84+
logger.Error("Failed to create S3Syncer", zap.Error(err))
85+
}
8086
}
8187

8288
ingestor := &Ingestor{
@@ -439,6 +445,14 @@ func (i *Ingestor) processTransaction(ctx context.Context, tx *EtherscanTransact
439445
if err != nil {
440446
return fmt.Errorf("failed to insert wrapping history: %w", err)
441447
}
448+
err = i.queries.UpdateTile(ctx, db.UpdateTileParams{
449+
ID: int32(location.Int64()),
450+
Owner: tx.From,
451+
Wrapped: wrapped == "true",
452+
})
453+
if err != nil {
454+
return fmt.Errorf("failed to update tile owner: %w", err)
455+
}
442456
}
443457
case "unwrap":
444458
i.logger.Info("wrap called",
@@ -465,6 +479,14 @@ func (i *Ingestor) processTransaction(ctx context.Context, tx *EtherscanTransact
465479
if err != nil {
466480
return fmt.Errorf("failed to insert wrapping history: %w", err)
467481
}
482+
err = i.queries.UpdateTile(ctx, db.UpdateTileParams{
483+
ID: int32(location.Int64()),
484+
Owner: tx.From,
485+
Wrapped: wrapped == "false",
486+
})
487+
if err != nil {
488+
return fmt.Errorf("failed to update tile owner: %w", err)
489+
}
468490
}
469491
case "transferFrom", "safeTransferFrom", "safeTransferFrom0":
470492
if err := i.processTransfer(ctx, args, tx, timeStamp.Int64(), blockNumber.Int64(), int32(transactionIndex)); err != nil {
@@ -633,9 +655,20 @@ func (i *Ingestor) processDataHistory(ctx context.Context) error {
633655
}
634656
utils.RenderFullMap(tiles, "cache/tilemap.png")
635657

658+
// get all tiles
659+
all_tiles, err := i.queries.ListTiles(ctx, db.ListTilesParams{
660+
Limit: int32(3970),
661+
Offset: 0,
662+
})
663+
664+
if err != nil {
665+
return fmt.Errorf("failed to get all tiles: %w", err)
666+
}
667+
GenerateTiledataJSON(all_tiles)
668+
636669
i.logger.Info("Finished processing data history", zap.Int("count", len(history)))
637670

638-
// Sync with S3 after processing
671+
// Sync with S3 after processing only if s3Syncer is initialized
639672
if i.s3Syncer != nil {
640673
err := i.s3Syncer.SyncWithS3(ctx)
641674
if err != nil {
@@ -764,6 +797,19 @@ func (i *Ingestor) processTileUpdate(ctx context.Context, location *big.Int, ima
764797
return fmt.Errorf("failed to insert data history: %w", err)
765798
}
766799

800+
// Update the tile in the database
801+
err := i.queries.UpdateTile(ctx, db.UpdateTileParams{
802+
ID: int32(location.Int64()),
803+
Price: priceEthStr,
804+
Url: url,
805+
Image: image,
806+
})
807+
if err != nil {
808+
i.logger.Error("Failed to update tile", zap.Error(err), zap.String("location", location.String()))
809+
os.Exit(1)
810+
return fmt.Errorf("failed to update tile: %w", err)
811+
}
812+
767813
// Signal that new data is available to render
768814
i.signalNewData()
769815

new-backend/internal/ingestor/metadata.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ingestor
33
import (
44
"encoding/json"
55
"fmt"
6+
"log"
67
"os"
78
"path/filepath"
89
"strings"
@@ -12,6 +13,8 @@ import (
1213
utils "pixelmap.io/backend/internal/utils"
1314
)
1415

16+
var logger = log.New(os.Stdout, "metadata", log.LstdFlags)
17+
1518
type MetadataPixelMapTile struct {
1619
ID int `json:"id"`
1720
Image string `json:"image"`
@@ -24,6 +27,47 @@ type MetadataPixelMapTile struct {
2427
HistoricalImages []PixelMapImage `json:"historical_images"`
2528
}
2629

30+
// GenerateTiledataJSON generates the tiledata.json file
31+
func GenerateTiledataJSON(tiles []db.Tile) error {
32+
33+
logger.Println("Generating tiledata.json")
34+
tiledataJSON := make([]map[string]interface{}, 3970)
35+
36+
for i := 0; i <= 3969; i++ {
37+
tile := tiles[i]
38+
if err := updateTileMetadata(tile, nil); err != nil {
39+
return fmt.Errorf("error updating tile metadata: %w", err)
40+
}
41+
42+
tiledataJSON[i] = map[string]interface{}{
43+
"id": tile.ID,
44+
"url": tile.Url,
45+
"image": tile.Image,
46+
"owner": tile.Owner,
47+
"price": tile.Price,
48+
"wrapped": tile.Wrapped,
49+
"openseaPrice": tile.OpenseaPrice,
50+
"lastUpdated": time.Date(2021, time.December, 13, 1, 1, 0, 0, time.UTC),
51+
"ens": tile.Ens,
52+
}
53+
}
54+
55+
jsonData, err := json.MarshalIndent(tiledataJSON, "", " ")
56+
if err != nil {
57+
return fmt.Errorf("error marshaling tiledata JSON: %w", err)
58+
}
59+
60+
if err := os.MkdirAll(filepath.Dir("cache/tiledata.json"), os.ModePerm); err != nil {
61+
return fmt.Errorf("error creating cache directory: %w", err)
62+
}
63+
64+
if err := os.WriteFile("cache/tiledata.json", jsonData, 0644); err != nil {
65+
return fmt.Errorf("error writing tiledata.json file: %w", err)
66+
}
67+
68+
return nil
69+
}
70+
2771
// updateTileMetadata updates the metadata for a given tile
2872
func updateTileMetadata(tile db.Tile, dataHistory []db.DataHistory) error {
2973
tileMetaData := map[string]interface{}{

0 commit comments

Comments
 (0)