/
main.go
101 lines (88 loc) · 2.23 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"encoding/json"
"os"
"time"
log "github.com/Sirupsen/logrus"
que "github.com/bgentry/que-go"
"github.com/jackc/pgx"
sync "github.com/svdberg/syncmysport-runkeeper/sync"
shared "github.com/svdberg/syncmysport-runkeeper/syncmysport-shared"
)
//CONFIG
var (
DbConnectionString string
)
//for queuing
var (
qc *que.Client
pgxpool *pgx.ConnPool
)
func main() {
//Load config vars
var err error
DbConnectionString = os.Getenv("CLEARDB_DATABASE_URL")
dbURL := os.Getenv("DATABASE_URL")
log.Printf("Starting SyncMySport-trigger with config: MysqlDBString: %s, PostgresDBString: %s",
DbConnectionString, dbURL)
success := false
i := 0
for i < 10 && !success {
pgxpool, qc, err = shared.Setup(dbURL)
if err != nil {
if i == 4 {
log.WithField("DATABASE_URL", dbURL).Fatal("Unable to setup queue / database")
} else {
log.Printf("Waiting 1 second for retry. I = %d", i)
time.Sleep(1000 * time.Millisecond)
i++
}
} else {
success = true
}
}
defer pgxpool.Close()
startSync()
}
// queueIndexRequest into the que as an encoded JSON object
func queueSyncTask(job sync.SyncTask) error {
enc, err := json.Marshal(job)
if err != nil {
return err
}
j := que.Job{
Type: shared.SyncTaskJob,
Args: enc,
}
return qc.Enqueue(&j)
}
/*
* The Core functionality of this application.
* - Get RK Activities since timestamp
* - Get STV Activities since timestamp
* - compare and calc difference
* - store in STV
* - update timestamp for record
*/
func startSync() {
repo := sync.CreateSyncDbRepo(DbConnectionString)
err := repo.CreateTableIfNotExist()
if err != nil {
log.Fatalf("Error checking or creating the Sync database table: %s", err)
}
allSyncs, err := repo.RetrieveAllSyncTasks()
log.Printf("Retrieved %d sync tasks", len(allSyncs))
if err != nil {
//retrieval failed, we log and return
log.Print("ERROR: error retrieving Sync Tasks, db down?")
return
}
for _, syncer := range allSyncs {
//que SyncTask for worker
log.Printf("Now syncing for task: %s, %s, %s", syncer.StravaToken, syncer.RunkeeperToken, time.Unix(int64(syncer.LastSeenTimestamp), 0))
err := queueSyncTask(syncer)
if err != nil {
log.Fatalf("Error enqueuing job for sync: %s", err)
}
}
}