Compare commits

...

3 commits

Author SHA1 Message Date
e0302bd176 Add interactive form/report 2026-04-23 16:50:04 +07:00
8a84e28e50 Bump SDK + change Evaluate signature 2026-04-23 16:50:04 +07:00
df3d29f484 checker: adopt unified ReportContext reporter signature
Follow the checker-sdk-go interface consolidation: reporter methods
now take sdk.ReportContext and read the payload via ctx.Data() instead
of the raw json.RawMessage parameter. Backed by the same underlying
logic.
2026-04-23 16:49:59 +07:00
5 changed files with 62 additions and 12 deletions

48
checker/interactive.go Normal file
View file

@ -0,0 +1,48 @@
package checker
import (
"errors"
"net/http"
"strings"
sdk "git.happydns.org/checker-sdk-go/checker"
)
// RenderForm implements sdk.CheckerInteractive.
func (p *matrixProvider) RenderForm() []sdk.CheckerOptionField {
return []sdk.CheckerOptionField{
{
Id: "serviceDomain",
Type: "string",
Label: "Matrix domain",
Placeholder: "matrix.org",
Required: true,
},
{
Id: "federationTesterServer",
Type: "string",
Label: "Federation Tester Server",
Placeholder: "https://federationtester.matrix.org/api/report?server_name=%s",
Default: "https://federationtester.matrix.org/api/report?server_name=%s",
Description: "URL template of the federation tester API; %s is replaced by the domain.",
},
}
}
// ParseForm implements sdk.CheckerInteractive.
func (p *matrixProvider) ParseForm(r *http.Request) (sdk.CheckerOptions, error) {
domain := strings.TrimSpace(r.FormValue("serviceDomain"))
if domain == "" {
return nil, errors.New("Matrix domain is required")
}
opts := sdk.CheckerOptions{
"serviceDomain": domain,
}
if tester := strings.TrimSpace(r.FormValue("federationTesterServer")); tester != "" {
opts["federationTesterServer"] = tester
}
return opts, nil
}

View file

@ -5,6 +5,8 @@ import (
"fmt"
"html/template"
"strings"
sdk "git.happydns.org/checker-sdk-go/checker"
)
// ── HTML report ───────────────────────────────────────────────────────────────
@ -287,9 +289,9 @@ li { margin-bottom: .15rem; }
)
// GetHTMLReport implements sdk.CheckerHTMLReporter.
func (p *matrixProvider) GetHTMLReport(raw json.RawMessage) (string, error) {
func (p *matrixProvider) GetHTMLReport(ctx sdk.ReportContext) (string, error) {
var r MatrixFederationData
if err := json.Unmarshal(raw, &r); err != nil {
if err := json.Unmarshal(ctx.Data(), &r); err != nil {
return "", fmt.Errorf("failed to unmarshal matrix report: %w", err)
}

View file

@ -27,14 +27,14 @@ func (r *matrixRule) ValidateOptions(opts sdk.CheckerOptions) error {
return nil
}
func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, opts sdk.CheckerOptions) sdk.CheckState {
func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, opts sdk.CheckerOptions) []sdk.CheckState {
var data MatrixFederationData
if err := obs.Get(ctx, ObservationKeyMatrix, &data); err != nil {
return sdk.CheckState{
return []sdk.CheckState{{
Status: sdk.StatusError,
Message: fmt.Sprintf("Failed to get Matrix federation data: %v", err),
Code: "matrix_federation_error",
}
}}
}
domain, _ := opts["serviceDomain"].(string)
@ -42,14 +42,14 @@ func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, op
if data.FederationOK {
version := strings.TrimSpace(data.Version.Name + " " + data.Version.Version)
return sdk.CheckState{
return []sdk.CheckState{{
Status: sdk.StatusOK,
Message: fmt.Sprintf("Running %s", version),
Code: "matrix_federation_ok",
Meta: map[string]any{
"version": version,
},
}
}}
}
var statusLine string
@ -73,9 +73,9 @@ func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, op
statusLine = fmt.Sprintf("Federation broken. Check https://federationtester.matrix.org/#%s", domain)
}
return sdk.CheckState{
return []sdk.CheckState{{
Status: sdk.StatusCrit,
Message: statusLine,
Code: "matrix_federation_fail",
}
}}
}

2
go.mod
View file

@ -2,4 +2,4 @@ module git.happydns.org/checker-matrix
go 1.25.0
require git.happydns.org/checker-sdk-go v0.0.1
require git.happydns.org/checker-sdk-go v1.2.0

4
go.sum
View file

@ -1,2 +1,2 @@
git.happydns.org/checker-sdk-go v0.0.1 h1:4RxCJr73HWKxjOyU/6NJMO8lXJmH0gMLA68EzTqLbQI=
git.happydns.org/checker-sdk-go v0.0.1/go.mod h1:aNAcfYFfbhvH9kJhE0Njp5GX0dQbxdRB0rJ0KvSC5nI=
git.happydns.org/checker-sdk-go v1.2.0 h1:v4MpKAz0W3PwP+bxx3pya8w893sVH5xTD1of1cc0TV8=
git.happydns.org/checker-sdk-go v1.2.0/go.mod h1:aNAcfYFfbhvH9kJhE0Njp5GX0dQbxdRB0rJ0KvSC5nI=