Compare commits

..

No commits in common. "475fc7c257733d04e99dfc5dea8006c234b46d7f" and "fcdfae85e3643ce76bfdf6114d960034a04f241a" have entirely different histories.

6 changed files with 35 additions and 93 deletions

View File

@ -30,21 +30,17 @@ the commandline.
```
Usage of taler-dashboard:
-fr duration
update frequency (default 1m0s)
Usage of ./taler-dashboard:
-min string
minimum version we care for (default "0.9.3")
-num int
number of issues to retrieve at once (default 250)
number of issues to retrieve at once (default 100)
-port string
[ip]:port to serve (default ":8080")
-project int
project id to use (default 23)
-token string
API-Token (default "")
-url string
URL to the issues (default "https://bugs.gnunet.org/api/rest")
URL to the issues (default "https://bugs.gnunet.org/api/rest/issues")
```
**Note**: We assume that this service runs behind a reverse-proxy which deals

43
data.go
View File

@ -39,12 +39,12 @@ type Data struct {
token string
num int
projectId int
filterId int
minimumVersion string
tmpl *template.Template
ctx context.Context
Issues Issues
Projects Projects
Timestamp time.Time
Freq time.Duration
Lasterror error
@ -70,29 +70,9 @@ func NewData(ctx context.Context, url, token string, num int) *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() {
url := fmt.Sprintf("%s/issues?project_id=%d&page_size=%d&%s&select=%s",
d.url, d.projectId, d.num, statusFilter,
strings.Join(fields, ","))
url := fmt.Sprintf("%s?project_id=%dfilter_id=%d&page_size=%d",
d.url, d.projectId, d.filterId, d.num)
req, e := http.NewRequestWithContext(d.ctx, "GET", url, nil)
if nil != e {
d.mux.Lock()
@ -135,23 +115,6 @@ func (d *Data) update() {
}
}
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) {

View File

@ -2,17 +2,14 @@
<head><title>GNU Taler Dashboard</title></head>
<style>
body {
margin-left:1%;
margin-right:1%;
margin-left:15%;
margin-right:15%;
font-family:sans-serif;
}
h3 {
margin-left: -10%;
color: brown;
}
details {
margin-left: 10%;
margin-right: 10%;
}
pre {
max-width: 100%;
overflow: scroll;
@ -21,10 +18,12 @@ pre {
</style>
<body>
<h1>GNU Taler Dashboard</h1>
<h2><a href="/">Table view</a> | List View </h2>
Data from {{ .Timestamp.Format "02 Jan 06 15:04 MST"}}, updateting every {{ .Freq }} (no auto-refresh)
<a href="/">Table view</a>
<h2>List View</h2>
Data from {{ .Timestamp.Format "02 Jan 06 15:04 MST"}}, updating every {{.Freq}}
{{ with .Lasterror }}, Last error: {{ . }} {{end}}
<!-- p>
{{ $issues := .Issues }}
{{ range $issues.Tags }}

24
main.go
View File

@ -31,13 +31,12 @@ import (
)
var (
fl_url = flag.String("url", "https://bugs.gnunet.org/api/rest", "URL to the issues")
fl_url = flag.String("url", "https://bugs.gnunet.org/api/rest/issues", "URL to the issues")
fl_token = flag.String("token", os.Getenv("MANTIS_API_TOKEN"), "API-Token")
fl_port = flag.String("port", ":8080", "[ip]:port to serve")
fl_num = flag.Int("num", 250, "number of issues to retrieve at once")
fl_num = flag.Int("num", 100, "number of issues to retrieve at once")
fl_min = flag.String("min", "0.9.3", "minimum version we care for")
fl_freq = flag.Duration("fr", time.Minute, "update frequency")
fl_proj = flag.Int("project", 23, "project id to use")
fl_freq = flag.Duration("fr", time.Minute, "update frequency")
)
func main() {
@ -46,11 +45,24 @@ func main() {
var ctx = context.Background()
var data = NewData(ctx, *fl_url, *fl_token, *fl_num)
data.projectId = *fl_proj
data.filterId = 230
data.projectId = 23
data.minimumVersion = *fl_min
data.Freq = *fl_freq
data.Loop()
data.update()
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) {
log.Println("got request for table")

View File

@ -1,7 +1,5 @@
package main
import "time"
/*
This file is part of taler-dashboard
Copyright (C) 2023 Özgür Kesim
@ -21,31 +19,3 @@ import "time"
@author Özgür Kesim <oec-taler@kesim.org>
*/
type Projects []Project
type Project struct {
Id int
Name string
Description string
Status KeyVal
ViewState KeyVal `json:"view_state"`
Enabled bool
InheritGlobal bool `json:"inherit_global"`
AccessLevel KeyVal `json:"AccessLevel"`
Versions []Version
Categories []Category
// CustomFields []any `json:"custom_fields"`
}
type Version struct {
KeyVal
Released bool
Obsolete bool
Timestamp time.Time
}
type Category struct {
KeyVal
Project KeyVal
}

View File

@ -1,3 +1,4 @@
<html>
<head><title>GNU Taler Dashboard</title></head>
<style>
@ -46,8 +47,9 @@ details {
</style>
<body>
<h1>GNU Taler Dashboard</h1>
<h2>Table view | <a href="/list">List View</a></h2>
Data from {{ .Timestamp.Format "02 Jan 06 15:04 MST"}}, updateting every {{ .Freq }} (no auto-refresh)
<a href="/list">List view</a>
<h2>Table View</h2>
Data from {{ .Timestamp.Format "02 Jan 06 15:04 MST"}}, updateting every {{ .Freq }}
{{ with .Lasterror }}, Last error: {{ . }} {{end}}
{{ $issues := .Issues }}