Compare commits
3 commits
2bb91d33d4
...
e0302bd176
| Author | SHA1 | Date | |
|---|---|---|---|
| e0302bd176 | |||
| 8a84e28e50 | |||
| df3d29f484 |
5 changed files with 62 additions and 12 deletions
48
checker/interactive.go
Normal file
48
checker/interactive.go
Normal 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
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
2
go.mod
|
|
@ -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
4
go.sum
|
|
@ -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=
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue