changeset 58:6c7151126a0b

logging and refactor
author drewp@bigasterisk.com
date Thu, 05 Sep 2024 17:01:23 -0700
parents 24f662799710
children 1f8e66cb0108
files calsync/convert/convert.go calsync/event_sync.go calsync/gcalclient/gcalclient.go calsync/gcalclient/listevents.go calsync/gcalclient/service.go calsync/mongoclient/cals_collection.go calsync/mongoclient/events_collection.go calsync/mongoclienttypes/mongoclienttypes.go
diffstat 8 files changed, 117 insertions(+), 121 deletions(-) [+]
line wrap: on
line diff
--- a/calsync/convert/convert.go	Thu Sep 05 15:03:05 2024 -0700
+++ b/calsync/convert/convert.go	Thu Sep 05 17:01:23 2024 -0700
@@ -6,11 +6,12 @@
 
 	"bigasterisk.com/go/gcalendarwatch/gcalclient"
 	"bigasterisk.com/go/gcalendarwatch/mongoclient"
+	M "bigasterisk.com/go/gcalendarwatch/mongoclienttypes"
 	"google.golang.org/api/calendar/v3"
 )
 
-func MongoCalFromGoogleCal(cal *calendar.CalendarListEntry) mongoclient.MongoCal {
-	return mongoclient.MongoCal{
+func MongoCalFromGoogleCal(cal *calendar.CalendarListEntry) M.MongoCal {
+	return M.MongoCal{
 		Url:         gcalclient.MakeCalUrl(cal.Id),
 		GoogleId:    cal.Id,
 		Summary:     cal.Summary,
@@ -18,15 +19,7 @@
 	}
 }
 
-func MongoEventFromGoogleEvent2(
-	ev *gcalclient.CalendarEvent,
-	now time.Time,
-) mongoclient.MongoEvent {
-	return mongoEventFromGoogleEvent(ev, now)
-
-}
-
-func mongoEventFromGoogleEvent(ev *gcalclient.CalendarEvent, now time.Time) mongoclient.MongoEvent {
+func MongoEventFromGoogleEvent(ev *gcalclient.CalendarEvent, now time.Time) mongoclient.MongoEvent {
 	return mongoclient.MongoEvent{
 		LastUpdated:        now,
 		Url:                ev.EventUrl,
--- a/calsync/event_sync.go	Thu Sep 05 15:03:05 2024 -0700
+++ b/calsync/event_sync.go	Thu Sep 05 17:01:23 2024 -0700
@@ -7,6 +7,7 @@
 	"bigasterisk.com/go/gcalendarwatch/convert"
 	"bigasterisk.com/go/gcalendarwatch/gcalclient"
 	"bigasterisk.com/go/gcalendarwatch/mongoclient"
+	M "bigasterisk.com/go/gcalendarwatch/mongoclienttypes"
 )
 
 // Each calendar syncs like this:
@@ -41,13 +42,12 @@
 type calEventsReader struct {
 	mc        *mongoclient.MongoClient
 	gc        *gcalclient.GCalClient
-	cal       mongoclient.MongoCal
-	t1        time.Time
-	t2        time.Time
+	cal       M.MongoCal
+	t1, t2    time.Time
 	syncToken string
 }
 
-func newCalEventsReader(mc *mongoclient.MongoClient, gc *gcalclient.GCalClient, cal mongoclient.MongoCal, t1 time.Time, t2 time.Time) *calEventsReader {
+func newCalEventsReader(mc *mongoclient.MongoClient, gc *gcalclient.GCalClient, cal M.MongoCal, t1, t2 time.Time) *calEventsReader {
 	return &calEventsReader{mc, gc, cal, t1, t2, ""}
 }
 
@@ -75,21 +75,20 @@
 		return err
 	}
 	for _, ev := range events {
-		r.mc.UpsertOneEvent(convert.MongoEventFromGoogleEvent2(&ev, time.Now() /*todo*/))
+		r.mc.UpsertOneEvent(convert.MongoEventFromGoogleEvent(&ev, time.Now() /*todo*/))
 	}
 
 	return r.mc.DeleteEventsUpdatedBefore(r.cal, r.t1)
 }
 
 func (r *calEventsReader) sync() error {
-	mongoclient.LogWithCal(r.cal, "syncing with", r.syncToken)
 	events, nextSyncToken, err := r.gc.ListEventUpdates(r.cal, r.syncToken)
 	if err != nil {
 		return err
 	}
 	r.syncToken = nextSyncToken
 	for _, ev := range events {
-		r.mc.UpsertOneEvent(convert.MongoEventFromGoogleEvent2(&ev, time.Now() /*todo*/))
+		r.mc.UpsertOneEvent(convert.MongoEventFromGoogleEvent(&ev, time.Now() /*todo*/))
 	}
 
 	return nil
--- a/calsync/gcalclient/gcalclient.go	Thu Sep 05 15:03:05 2024 -0700
+++ b/calsync/gcalclient/gcalclient.go	Thu Sep 05 17:01:23 2024 -0700
@@ -12,9 +12,7 @@
 	"log"
 	"net/url"
 	"strings"
-	"time"
 
-	"bigasterisk.com/go/gcalendarwatch/mongoclient"
 	"google.golang.org/api/calendar/v3"
 )
 
@@ -41,7 +39,7 @@
 }
 
 func New(ctx context.Context) (*GCalClient, error) {
-	err, srv := newService(ctx)
+	srv, err := newService(ctx)
 	if err != nil {
 		log.Fatalf("Unable to retrieve Calendar client: %v", err)
 	}
@@ -59,7 +57,7 @@
 		return nil, err
 	}
 
-	// do not submit
+	// todo: do not submit
 	debugFilterCals(list)
 
 	return list.Items, nil
@@ -76,85 +74,9 @@
 	list.Items = ret
 }
 
-
 func shortDebugHash(pageToken string) string {
 	if pageToken == "" {
 		return "(empty)"
 	}
 	return fmt.Sprintf("%x", md5.Sum([]byte(pageToken)))
 }
-
-func (gc *GCalClient) ListEventsInRange(cal mongoclient.MongoCal, t1, t2 time.Time) (
-	events []CalendarEvent, nextSyncToken string, err error) {
-	mongoclient.LogWithCal(cal, "ListEventsInRange", t1, "to", t2)
-
-	call := func(pageToken string) *calendar.EventsListCall {
-		return rangedEventsCall(gc.srv, cal.GoogleId, t1, t2, pageToken)
-	}
-	events, nextSyncToken, err = readEventsPages(cal, call)
-	if err != nil {
-		return nil, "", err
-	}
-
-	return events, nextSyncToken, nil
-}
-
-func (gc *GCalClient) ListEventUpdates(cal mongoclient.MongoCal, syncToken string) (
-	events []CalendarEvent, nextSyncToken string, err error) {
-	mongoclient.LogWithCal(cal, "ListEventUpdates", syncToken)
-
-	call := func(pageToken string) *calendar.EventsListCall {
-		return syncEventsCall(gc.srv, cal.GoogleId, syncToken, pageToken)
-	}
-	events, nextSyncToken, err = readEventsPages(cal, call)
-	if err != nil {
-		return nil, "", err
-	}
-
-	return events, nextSyncToken, nil
-}
-
-func readEventsPages(cal mongoclient.MongoCal, call func(string) *calendar.EventsListCall) (
-	events []CalendarEvent, syncToken string, err error) {
-
-	events = make([]CalendarEvent, 0)
-	err = nil
-
-	pageToken := ""
-	for {
-		mongoclient.LogWithCal(cal, "getting another page", shortDebugHash(pageToken))
-		pageResult, err2 := call(pageToken).Do()
-		if err2 != nil {
-			log.Fatal(err2)
-			return nil, "", err2
-		}
-
-		// Placement is important! This must run even if the result set is empty.
-		syncToken = pageResult.NextSyncToken
-
-		mongoclient.LogWithCal(cal, "got page with", len(pageResult.Items), "events")
-		if len(pageResult.Items) == 0 {
-			break
-		}
-
-		for _, ev := range pageResult.Items {
-			if ev.Status == "cancelled" {
-				log.Fatal("todo")
-			}
-			events = append(events, CalendarEvent{
-				Event:       ev,
-				CalendarUrl: cal.Url,
-				EventUrl:    MakeEventUrl(cal.Url, ev.Id),
-			})
-		}
-
-
-
-		if pageResult.NextPageToken == "" {
-			break
-		}
-		pageToken = pageResult.NextPageToken
-	}
-	mongoclient.LogWithCal(cal, "total events read: ", len(events), "with syncToken", syncToken)
-	return events, syncToken, nil
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calsync/gcalclient/listevents.go	Thu Sep 05 17:01:23 2024 -0700
@@ -0,0 +1,80 @@
+package gcalclient
+
+import (
+	"log"
+	"time"
+
+	M "bigasterisk.com/go/gcalendarwatch/mongoclienttypes"
+	"google.golang.org/api/calendar/v3"
+)
+
+func (gc *GCalClient) ListEventsInRange(cal M.MongoCal, t1, t2 time.Time) (
+	events []CalendarEvent, nextSyncToken string, err error) {
+	log.Println(M.Prefix(cal), "ListEventsInRange", t1, "to", t2)
+
+	call := func(pageToken string) *calendar.EventsListCall {
+		return rangedEventsCall(gc.srv, cal.GoogleId, t1, t2, pageToken)
+	}
+	events, nextSyncToken, err = readEventsPages(cal, call)
+	if err != nil {
+		return nil, "", err
+	}
+
+	return events, nextSyncToken, nil
+}
+
+func (gc *GCalClient) ListEventUpdates(cal M.MongoCal, syncToken string) (
+	events []CalendarEvent, nextSyncToken string, err error) {
+	log.Println(M.Prefix(cal), "ListEventUpdates", syncToken)
+
+	call := func(pageToken string) *calendar.EventsListCall {
+		return syncEventsCall(gc.srv, cal.GoogleId, syncToken, pageToken)
+	}
+	events, nextSyncToken, err = readEventsPages(cal, call)
+	if err != nil {
+		return nil, "", err
+	}
+
+	return events, nextSyncToken, nil
+}
+
+func readEventsPages(cal M.MongoCal, call func(string) *calendar.EventsListCall) (
+	events []CalendarEvent, syncToken string, err error) {
+
+	events = make([]CalendarEvent, 0)
+
+	pageToken := ""
+	for {
+		log.Println(M.Prefix(cal), "getting another page", shortDebugHash(pageToken))
+		pageResult, err := call(pageToken).Do()
+		if err != nil {
+			return nil, "", err
+		}
+
+		// Placement is important! This must run even if the result set is empty.
+		syncToken = pageResult.NextSyncToken
+
+		log.Println(M.Prefix(cal), "got page with", len(pageResult.Items), "events")
+		if len(pageResult.Items) == 0 {
+			break
+		}
+
+		for _, ev := range pageResult.Items {
+			if ev.Status == "cancelled" {
+				log.Fatal("todo")
+			}
+			events = append(events, CalendarEvent{
+				Event:       ev,
+				CalendarUrl: cal.Url,
+				EventUrl:    MakeEventUrl(cal.Url, ev.Id),
+			})
+		}
+
+		if pageResult.NextPageToken == "" {
+			break
+		}
+		pageToken = pageResult.NextPageToken
+	}
+	log.Println(M.Prefix(cal), "total events read: ", len(events), "with syncToken", syncToken)
+	return events, syncToken, nil
+}
--- a/calsync/gcalclient/service.go	Thu Sep 05 15:03:05 2024 -0700
+++ b/calsync/gcalclient/service.go	Thu Sep 05 17:01:23 2024 -0700
@@ -69,7 +69,7 @@
 	json.NewEncoder(f).Encode(token)
 }
 
-func newService(ctx context.Context) (error, *calendar.Service) {
+func newService(ctx context.Context) (*calendar.Service, error) {
 	b, err := os.ReadFile("./credentials.json")
 	if err != nil {
 		log.Fatalf("Unable to read client secret file: %v", err)
@@ -82,6 +82,5 @@
 	}
 	client := getClient(config)
 
-	srv, err := calendar.NewService(ctx, option.WithHTTPClient(client))
-	return err, srv
+	return calendar.NewService(ctx, option.WithHTTPClient(client))
 }
--- a/calsync/mongoclient/cals_collection.go	Thu Sep 05 15:03:05 2024 -0700
+++ b/calsync/mongoclient/cals_collection.go	Thu Sep 05 17:01:23 2024 -0700
@@ -3,28 +3,21 @@
 import (
 	"log"
 
+	M "bigasterisk.com/go/gcalendarwatch/mongoclienttypes"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/mongo/options"
 )
 
-// docs in calsCollection
-type MongoCal struct {
-	Url         string `bson:"_id"` // bigasterisk.com/...
-	GoogleId    string `bson:"googleId"`
-	Summary     string `bson:"summary"`
-	Description string `bson:"description"`
-}
-
-func (c *MongoClient) GetAllCals() ([]MongoCal, error) {
+func (c *MongoClient) GetAllCals() ([]M.MongoCal, error) {
 	cur, err := c.calsCollection.Find(c.ctx, bson.D{})
 	if err != nil {
 		return nil, err
 	}
 	defer cur.Close(c.ctx)
 
-	var cals []MongoCal
+	var cals []M.MongoCal
 	for cur.Next(c.ctx) {
-		var cal MongoCal
+		var cal M.MongoCal
 		if err := cur.Decode(&cal); err != nil {
 			return nil, err
 		}
@@ -33,11 +26,10 @@
 	return cals, nil
 }
 
-func (c *MongoClient) UpsertOneCal(cal MongoCal) error {
+func (c *MongoClient) UpsertOneCal(cal M.MongoCal) error {
 	filter := bson.M{"_id": cal.Url}
 	update := bson.M{"$set": cal}
-	_, err := c.calsCollection.UpdateOne(c.ctx, filter, update,
-		options.Update().SetUpsert(true))
+	_, err := c.calsCollection.UpdateOne(c.ctx, filter, update, options.Update().SetUpsert(true))
 	if err != nil {
 		return err
 	}
--- a/calsync/mongoclient/events_collection.go	Thu Sep 05 15:03:05 2024 -0700
+++ b/calsync/mongoclient/events_collection.go	Thu Sep 05 17:01:23 2024 -0700
@@ -4,14 +4,11 @@
 	"log"
 	"time"
 
+	M "bigasterisk.com/go/gcalendarwatch/mongoclienttypes"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/mongo/options"
 )
 
-func LogWithCal(cal MongoCal, msg ...interface{}) {
-	log.Println("cal:", (cal.GoogleId+"........")[:8], msg)
-}
-
 func (c *MongoClient) UpsertOneEvent(ev MongoEvent) error {
 	filter := bson.M{"_id": ev.Url}
 	setFields := ev
@@ -23,14 +20,14 @@
 	return nil
 }
 
-func (c *MongoClient) DeleteEventsUpdatedBefore(cal MongoCal, t time.Time) error {
+func (c *MongoClient) DeleteEventsUpdatedBefore(cal M.MongoCal, t time.Time) error {
 	res, err := c.eventsCollection.DeleteMany(
 		c.ctx,
 		bson.M{"calendarUrl": cal.Url,
 			"lastUpdated": bson.M{"$lt": t}})
-	LogWithCal(cal, "deleted", res.DeletedCount, "events updated before", t)
 	if err != nil {
 		return err
 	}
+	log.Println(M.Prefix(cal), "deleted", res.DeletedCount, "events updated before", t)
 	return nil
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calsync/mongoclienttypes/mongoclienttypes.go	Thu Sep 05 17:01:23 2024 -0700
@@ -0,0 +1,14 @@
+package mongoclienttypes
+
+// Docs in calsCollection.
+type MongoCal struct {
+	Url         string `bson:"_id"` // bigasterisk.com/...
+	GoogleId    string `bson:"googleId"`
+	Summary     string `bson:"summary"`
+	Description string `bson:"description"`
+}
+
+// For logging.
+func Prefix(cal MongoCal) string {
+	return "<cal " + (cal.GoogleId + "........")[:8] + ">"
+}