move update into data.go

This commit is contained in:
Özgür Kesim 2023-12-27 13:20:51 +01:00
parent f41cbf1481
commit 61c174dd2b
Signed by: oec
GPG Key ID: F136A7F922D018D7
2 changed files with 46 additions and 21 deletions

43
data.go
View File

@ -39,12 +39,12 @@ type Data struct {
token string token string
num int num int
projectId int projectId int
filterId int
minimumVersion string minimumVersion string
tmpl *template.Template tmpl *template.Template
ctx context.Context ctx context.Context
Issues Issues Issues Issues
Projects Projects
Timestamp time.Time Timestamp time.Time
Freq time.Duration Freq time.Duration
Lasterror error Lasterror error
@ -70,9 +70,29 @@ func NewData(ctx context.Context, url, token string, num int) *Data {
return data return data
} }
const statusFilter = `status%5B%5D=10&status%5B%5D=20&status%5B%5D=30&status%5B%5D=40&status%5B%5D=50&severity%5B%5D=20`
var fields = []string{"id",
"description",
"summary",
"category",
"target_version",
"status",
"reporter",
"handler",
"resolution",
"priority",
"severity",
"created_at",
"updated_at",
"relationships",
"tags",
}
func (d *Data) update() { func (d *Data) update() {
url := fmt.Sprintf("%s?project_id=%dfilter_id=%d&page_size=%d", url := fmt.Sprintf("%s/issues?project_id=%d&page_size=%d&%s&select=%s",
d.url, d.projectId, d.filterId, d.num) d.url, d.projectId, d.num, statusFilter,
strings.Join(fields, ","))
req, e := http.NewRequestWithContext(d.ctx, "GET", url, nil) req, e := http.NewRequestWithContext(d.ctx, "GET", url, nil)
if nil != e { if nil != e {
d.mux.Lock() d.mux.Lock()
@ -115,6 +135,23 @@ func (d *Data) update() {
} }
} }
d.Issues = issues d.Issues = issues
fmt.Println("got", len(issues), "issues")
}
func (d *Data) Loop() {
d.update()
go func() {
var ticker = time.NewTicker(d.Freq)
for range ticker.C {
select {
case <-d.ctx.Done():
return
default:
fmt.Println("updating data")
d.update()
}
}
}()
} }
func (d *Data) printJSON(w io.Writer) { func (d *Data) printJSON(w io.Writer) {

24
main.go
View File

@ -31,12 +31,13 @@ import (
) )
var ( var (
fl_url = flag.String("url", "https://bugs.gnunet.org/api/rest/issues", "URL to the issues") fl_url = flag.String("url", "https://bugs.gnunet.org/api/rest", "URL to the issues")
fl_token = flag.String("token", os.Getenv("MANTIS_API_TOKEN"), "API-Token") fl_token = flag.String("token", os.Getenv("MANTIS_API_TOKEN"), "API-Token")
fl_port = flag.String("port", ":8080", "[ip]:port to serve") fl_port = flag.String("port", ":8080", "[ip]:port to serve")
fl_num = flag.Int("num", 100, "number of issues to retrieve at once") fl_num = flag.Int("num", 250, "number of issues to retrieve at once")
fl_min = flag.String("min", "0.9.3", "minimum version we care for") fl_min = flag.String("min", "0.9.3", "minimum version we care for")
fl_freq = flag.Duration("fr", time.Minute, "update frequency") fl_freq = flag.Duration("fr", time.Minute, "update frequency")
fl_proj = flag.Int("project", 23, "project id to use")
) )
func main() { func main() {
@ -45,24 +46,11 @@ func main() {
var ctx = context.Background() var ctx = context.Background()
var data = NewData(ctx, *fl_url, *fl_token, *fl_num) var data = NewData(ctx, *fl_url, *fl_token, *fl_num)
data.filterId = 230 data.projectId = *fl_proj
data.projectId = 23
data.minimumVersion = *fl_min data.minimumVersion = *fl_min
data.Freq = *fl_freq data.Freq = *fl_freq
data.update() data.Loop()
go func() {
var ticker = time.NewTicker(*fl_freq)
for range ticker.C {
select {
case <-ctx.Done():
return
default:
fmt.Println("updating data")
data.update()
}
}
}()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
log.Println("got request for table") log.Println("got request for table")