/
main.go
72 lines (60 loc) · 1.79 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
package main
import (
"database/sql"
"flag"
"fmt"
"log"
"net/http"
"os"
"time"
"github.com/boltdb/bolt"
)
func main() {
freq := flag.Duration("freq", 15*time.Minute, "Query frequency")
dbpath := flag.String("db", "koharecords.db", "Path to db file, will be created if not existing")
httpAddr := flag.String("http", ":8009", "HTTP serve address")
initalImport := flag.Bool("initial-import", false, "Perform inital import of all availability data via SPARQL")
fusekiEndpoint := flag.String("sparql", "http://fuseki:3030/ds/sparql", "Fuseki SPARQL endpoint")
sendUpdates := flag.Bool("update", false, "Send changes in availability to services")
servicesEndpoint := flag.String("services", "http://services:8005/publication/", "Services availablity endpoint")
flag.Parse()
dsn := fmt.Sprintf("%s:%s@tcp(koha_mysql:3306)/koha_%s",
os.Getenv("KOHA_ADMINUSER"),
os.Getenv("KOHA_ADMINPASS"),
os.Getenv("KOHA_INSTANCE"))
mysql, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
newDB := false
if _, err := os.Stat(*dbpath); os.IsNotExist(err) {
newDB = true
}
db, err := bolt.Open(*dbpath, 0666, nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
c := newCollector(db, mysql, *freq)
c.services = *servicesEndpoint
c.fuseki = *fusekiEndpoint
c.sendUpdates = *sendUpdates
c.initialImport = *initalImport
if err := c.setup(); err != nil {
log.Fatal(err)
}
if newDB {
log.Printf("Initialized new DB: %q", *dbpath)
} else {
stats := c.stats()
log.Printf("Found %d records in DB %q, last updated=%v",
stats.NumRecords,
*dbpath,
stats.LastUpdated.Format(time.RFC3339))
}
c.waitForMySQL()
log.Println("Starting collector")
go c.run()
log.Printf("Starting HTTP server listeing at %v", *httpAddr)
log.Fatal(http.ListenAndServe(*httpAddr, newServer(db)))
}