-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
79 lines (69 loc) · 2.35 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
// © 2024 Vlad-Stefan Harbuz <[email protected]>
//
// SPDX-License-Identifier: Apache-2.0
package main
import (
"flag"
"html/template"
"log"
"net/http"
"strconv"
"strings"
"time"
)
const SHEET_ID = "1hzRN_ZJjlh4979HAp6wkhebXmlgXVX6i44tpQihJEdQ"
const SHEET_RANGE = "'Potential Members'!A2:C500"
const SHEET_REFRESH_N_SECONDS = 60 * 10 // 10 minutes
const (
PledgedYes = iota
PledgedMaybe
PledgedRefused
PledgedUnknown
)
type Member struct {
Name string
Url string
Pledged int
}
func getMembers() []Member {
cells := getSheetRange(SHEET_ID, SHEET_RANGE)
members := make([]Member, 0, len(cells))
for _, row := range cells {
pledgeStatus := PledgedUnknown
if len(row) >= 3 {
putativeStatus := strings.ToLower(row[2].(string))
if strings.Contains(putativeStatus, "yes") {
pledgeStatus = PledgedYes
} else if strings.Contains(putativeStatus, "maybe") {
pledgeStatus = PledgedMaybe
} else if strings.Contains(putativeStatus, "no") {
pledgeStatus = PledgedRefused
}
}
members = append(members, Member {
Name: row[0].(string),
Url: "",
Pledged: pledgeStatus,
})
}
return members
}
func main() {
port := flag.Int("port", 3003, "http port")
members := getMembers()
refreshTime := time.Now()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
timeSinceRefresh := time.Now().Sub(refreshTime)
if timeSinceRefresh.Seconds() >= SHEET_REFRESH_N_SECONDS {
members = getMembers()
refreshTime = time.Now()
}
tplIndex := template.Must(template.ParseFiles("templates/index.html"))
tplIndex.Execute(w, members)
})
log.Printf("Starting HTTP server on port %d", *port)
err := http.ListenAndServe(":"+strconv.Itoa(*port), nil)
if err != nil {
log.Fatal(err.Error())
}
}