-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
86 lines (70 loc) · 1.96 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
package main
import (
"flag"
"log"
"net/http"
"os"
"strconv"
"time"
"github.com/bossm8/gitlab-pages-exporter/exporter"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/robfig/cron"
_ "go.uber.org/automaxprocs"
)
var version string = "dev"
func main() {
v := flag.Bool("v", false, "Print version info")
flag.Parse()
if *v {
println(version)
os.Exit(0)
}
token := os.Getenv("GPE_GITLAB_ADMIN_READ_TOKEN")
if token == "" {
log.Fatal("ERROR: GPE_GITLAB_ADMIN_READ_TOKEN needs to be set")
}
apiUrl := os.Getenv("GPE_GITLAB_API_URL")
if apiUrl == "" {
log.Fatal("ERROR: GPE_GITLAB_API_URL needs to be set")
}
schedule := os.Getenv("GPE_CRON_SCHEDULE")
if schedule == "" {
log.Println("INFO: Setting GPE_CRON_SCHEDULE to default (0 0 2 * * *)")
schedule = "0 0 2 * * *"
}
setAllMetrics := false
setAllMetricsStr := os.Getenv("GPE_SET_ALL_PROJECT_METRICS")
if setAllMetricsStr != "" {
var err error
if setAllMetrics, err = strconv.ParseBool(setAllMetricsStr); err != nil {
log.Fatalf(
"ERROR: GPE_SET_ALL_PROJECT_METRICS must be valid boolean value, %s",
err,
)
}
}
sched, err := cron.Parse(schedule)
if err != nil {
log.Fatalf("ERROR: Could not parse cron schedule: %s", err)
}
exp := exporter.NewGitlabPagesExporter(apiUrl, token, setAllMetrics)
runScrape := func() {
next := sched.Next(time.Now())
exp.Run(next.Unix())
log.Printf("INFO: Next run scheduled in %.0f hours (%s)",
next.Sub(time.Now()).Hours(),
next.Local().Format("January 2, 2006 15:04:05"),
)
}
log.Println("INFO: Running initial scrape of GitLab pages information")
go runScrape()
c := cron.New()
if err = c.AddFunc(schedule, runScrape); err != nil {
log.Fatalf("ERROR: Could not start cron schedule: %s", err)
}
go c.Run()
log.Println("INFO: Starting metrics server at :2112")
log.Println("INFO: Metrics will be served under /metrics")
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}