Skip to content
2 changes: 1 addition & 1 deletion services/dashboard/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ func Run(cleanup cleanupper.Cleanupper) error {
jwks := auth.NewJWKSHttpClient(AUTH_JWKS_URL)
router.Use(
middleware.Logger,
middleware.Recoverer,
auth.ForwardRequestAuthentication(),
auth.Authenticate(jwks),
auth.Protect(),
Expand Down Expand Up @@ -107,7 +108,6 @@ func Run(cleanup cleanupper.Cleanupper) error {
))
csrfWrappedHandler := nosurf.New(router)
csrfWrappedHandler.SetFailureHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Printf("nosurf.Reason(r): %v\n", nosurf.Reason(r))
layout.WithSnackbarError(w, "CSRF Token was invalid, try reloading the page")
//nolint
w.Write([]byte("A CSRF error occured. Reload the previous page and try again"))
Expand Down
26 changes: 13 additions & 13 deletions services/dashboard/routes/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,22 +75,22 @@ func (h *TracesPageHandler) listPartial() http.HandlerFunc {

func formatSince(t time.Time) string {
d := time.Since(t)
if d.Hours() > 24 {
switch {
case d.Hours() > 24:
return "More than a day ago"
}
if int(d.Hours()) > 1 {
return fmt.Sprintf("About %d hours ago", int(d.Hours()))
}
if int(d.Hours()) > 0 {
case int(d.Hours()) >= 1:
if int(d.Hours()) == 1 {
return "About 1 hour ago"
}
return fmt.Sprintf("About %d hours ago", int(d.Hours()))
}
if int(d.Minutes()) > 1 {
case int(d.Minutes()) >= 1:
if int(d.Minutes()) == 1 {
return "About 1 minute ago"
}
return fmt.Sprintf("About %d minutes ago", int(d.Minutes()))
default:
return fmt.Sprintf("About %d seconds ago", int(d.Seconds()))
}
if int(d.Minutes()) > 0 {
return fmt.Sprintf("About %d minute ago", int(d.Minutes()))
}
return fmt.Sprintf("About %d seconds ago", int(d.Seconds()))
}

func (h *TracesPageHandler) createViewData(ctx context.Context, traces []api.Trace) ([]views.Trace, error) {
Expand Down Expand Up @@ -138,7 +138,7 @@ func (h *TracesPageHandler) createViewData(ctx context.Context, traces []api.Tra
viewModels[i].Steps = append(viewModels[i].Steps, step)

// update last worker with duration
if j > 0 {
if j > 0 && j < len(trace.WorkerTimes) {
viewModels[i].Steps[j-1].Label = trace.WorkerTimes[j].Sub(trace.WorkerTimes[j-1]).String()
}

Expand Down
37 changes: 28 additions & 9 deletions services/dashboard/routes/overview.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,15 @@
w.Header().Set("hx-push-url", views.U("/overview?%s", r.URL.Query().Encode()))
w.Header().Set("hx-trigger-after-settle", "newDeviceList")
views.WriteRenderFilters(w, sg, true)
views.WriteRenderDeviceTable(w, res.Data, getCursor(res.Links.GetNext()))
nextPage := ""
if cursor := getCursor(res.Links.GetNext()); cursor != "" {
if sg != nil {
nextPage = views.U("/overview/devices/table?sensor_group=%d&cursor=%s", sg.GetId(), cursor)
} else {
nextPage = views.U("/overview/devices/table?cursor=%s", cursor)
}
}
views.WriteRenderDeviceTable(w, res.Data, nextPage)
}
}

Expand All @@ -112,7 +120,11 @@
w.Header().Set("hx-push-url", views.U("/overview?%s", r.URL.Query().Encode()))
w.Header().Set("hx-trigger-after-settle", "newDeviceList")
views.WriteRenderFilters(w, nil, true)
views.WriteRenderDeviceTable(w, res.Data, getCursor(res.Links.GetNext()))
nextPage := ""
if cursor := getCursor(res.Links.GetNext()); cursor != "" {
nextPage = views.U("/overview/devices/table?cursor=%s", cursor)
}
views.WriteRenderDeviceTable(w, res.Data, nextPage)
}
}

Expand All @@ -137,8 +149,12 @@
}

nextCursor := ""
if res.Links.GetNext() != "" {
nextCursor = views.U("/overview/devices/table?cursor=%s", getCursor(res.Links.GetNext()))
if cursor := getCursor(res.Links.GetNext()); cursor != "" {
if sg := r.URL.Query().Get("sensor_group"); sg != "" {
nextCursor = views.U("/overview/devices/table?sensor_group=%s&cursor=%s", sg, cursor)
} else {
nextCursor = views.U("/overview/devices/table?cursor=%s", cursor)
}
}
views.WriteRenderDeviceTableRows(w, res.Data, nextCursor)
}
Expand Down Expand Up @@ -187,10 +203,11 @@
}
page.Devices = res.Data

if res.Links.GetNext() != "" {
u, err := url.Parse(res.Links.GetNext())
if err == nil {
page.DevicesNextPage = views.U("/overview/devices/table?cursor=%s", u.Query().Get("cursor"))
if cursor := getCursor(res.Links.GetNext()); cursor != "" {
if page.SensorGroup != nil {
page.DevicesNextPage = views.U("/overview/devices/table?sensor_group=%d&cursor=%s", page.SensorGroup.GetId(), cursor)
} else {
page.DevicesNextPage = views.U("/overview/devices/table?cursor=%s", cursor)
}
}

Expand Down Expand Up @@ -271,7 +288,7 @@
wsCTX = context.WithValue(wsCTX, api.ContextAccessToken, r.Context().Value(api.ContextAccessToken))
go func(ctx context.Context) {
defer cancel()
defer ws.Close()

Check failure on line 291 in services/dashboard/routes/overview.go

View workflow job for this annotation

GitHub Actions / Run Go Linters

Error return value of `ws.Close` is not checked (errcheck)
var nextCursor string
for {
// Start fetching pages of devices and stream them to the client
Expand All @@ -290,12 +307,12 @@
log.Printf("cannot open writer for ws: %v\n", err)
return
}
defer writer.Close()
frame := fmt.Sprintf(`{"device_id": %d, "device_code": "%s", "coordinates": [%f,%f]}`, dev.Id, dev.Code, dev.GetLatitude(), dev.GetLongitude())
if _, err := writer.Write([]byte(frame)); err != nil {
log.Printf("Failed to write to websocket: %v\n", err)
return
}
writer.Close()

Check failure on line 315 in services/dashboard/routes/overview.go

View workflow job for this annotation

GitHub Actions / Run Go Linters

Error return value of `writer.Close` is not checked (errcheck)
}
nextCursor = getCursor(res.Links.GetNext())
if nextCursor == "" {
Expand Down Expand Up @@ -369,10 +386,12 @@
start, err := time.Parse(time.RFC3339, r.URL.Query().Get("start"))
if err != nil {
web.HTTPError(w, web.NewError(http.StatusBadRequest, "Start parameter is not ISO8601/RFC3339", ""))
return
}
end, err := time.Parse(time.RFC3339, r.URL.Query().Get("end"))
if err != nil {
web.HTTPError(w, web.NewError(http.StatusBadRequest, "End parameter is not ISO8601/RFC3339", ""))
return
}

ws, err := upgrader.Upgrade(w, r, nil)
Expand All @@ -388,7 +407,7 @@
defer cancel()

var nextCursor string
defer ws.Close()

Check failure on line 410 in services/dashboard/routes/overview.go

View workflow job for this annotation

GitHub Actions / Run Go Linters

Error return value of `ws.Close` is not checked (errcheck)
for {
// Stop if the context is canceled
select {
Expand Down
38 changes: 10 additions & 28 deletions services/dashboard/routes/pipelines.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,34 +240,18 @@ func (h *PipelinePageHandler) updatePipeline(next http.Handler) http.Handler {

_, resp, err := h.coreClient.PipelinesApi.UpdatePipeline(r.Context(), pipelineId).UpdatePipelineRequest(updateDto).Execute()
if err != nil {
responseBody, err := io.ReadAll(resp.Body)
if err != nil {
log.Printf("in createPipeline, err reading response body: %s\n", err)
} else {
log.Printf("in createPipeline, err: %s\n", string(responseBody))
}
layout.SnackbarSomethingWentWrong(w)
return
}

// TODO: API returns status created instead of found for some reason
if resp.StatusCode != http.StatusCreated {
if resp.StatusCode == http.StatusInternalServerError {
responseBody, err := io.ReadAll(resp.Body)
if err != nil {
log.Printf("in createPipeline, err reading response body: %s\n", err)
} else {
log.Printf("in createPipeline, err: %s\n", string(responseBody))
}
layout.SnackbarSomethingWentWrong(w)
} else {
var apierror *web.APIError
if errors.As(err, &apierror) {
layout.WithSnackbarError(w, apierror.Message)
w.WriteHeader(apierror.HTTPStatus)
return
if resp != nil && resp.Body != nil {
if body, readErr := io.ReadAll(resp.Body); readErr == nil {
log.Printf("in updatePipeline, err: %s\n", string(body))
}
}
var apiErr *web.APIError
if errors.As(err, &apiErr) {
layout.WithSnackbarError(w, apiErr.Message)
w.WriteHeader(apiErr.HTTPStatus)
return
}
layout.SnackbarSomethingWentWrong(w)
return
}

Expand Down Expand Up @@ -491,8 +475,6 @@ func (h *PipelinePageHandler) getWorkersForSteps(r *http.Request, steps []string
workers := res.GetData()
workers = append(workers, createPlaceholderWorkers(missingWorkers)...)

fmt.Printf("workers: %v\n", workers)
fmt.Printf("steps: %v\n", steps)
if len(workers) != len(steps) {
return nil, fmt.Errorf("some pipeline workers not found")
}
Expand Down
13 changes: 8 additions & 5 deletions services/dashboard/routes/workers.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ func (h *WorkerPageHandler) listWorkers() http.HandlerFunc {
page.WorkersNextPage = views.U("/workers/table?cursor=%s", getCursor(res.Links.GetNext()))
}

fmt.Println("Cursor", res.Links.GetNext())
if isHX(r) {
page.WriteBody(w)
return
Expand All @@ -67,7 +66,6 @@ func (h *WorkerPageHandler) listWorkers() http.HandlerFunc {

func (h *WorkerPageHandler) workersTable() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
fmt.Println("get table")
req := h.workersClient.WorkersApi.ListWorkers(r.Context())
if r.URL.Query().Has("cursor") {
req = req.Cursor(r.URL.Query().Get("cursor"))
Expand Down Expand Up @@ -129,9 +127,8 @@ func (h *WorkerPageHandler) updateWorker() http.HandlerFunc {
if name := r.FormValue("name"); name != "" {
dto.Name = &name
}
if desc := r.FormValue("description"); desc != "" {
dto.Description = &desc
}
desc := r.FormValue("description")
dto.Description = &desc
switch r.FormValue("state") {
case "on":
dto.SetState("enabled")
Expand Down Expand Up @@ -181,6 +178,12 @@ func (h *WorkerPageHandler) createWorker() http.HandlerFunc {
dto.SetName(r.FormValue("name"))
dto.SetUserCode(r.FormValue("userCode"))
dto.SetDescription(r.FormValue("description"))
switch r.FormValue("state") {
case "on":
dto.SetState("enabled")
default:
dto.SetState("disabled")
}

_, _, err := h.workersClient.WorkersApi.CreateWorker(r.Context()).CreateUserWorkerRequest(dto).Execute()
if err != nil {
Expand Down
4 changes: 3 additions & 1 deletion services/dashboard/views/pipelineEditPage.qtpl
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@
</div>
</div>
</template>
<div
{% if p.Pipeline != nil %}
<div
class="bg-white border rounded-md lg:col-span-3 xl:col-span-3"
>
<header class="flex border-b py-2 px-4 text-sm text-slate-700">
Expand All @@ -94,6 +95,7 @@
<div>
</div>
</div>
{% endif %}
</div>
{% endfunc %}

Expand Down
Loading
Loading