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"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
sdk "git.happydns.org/checker-sdk-go/checker"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ── HTML report ───────────────────────────────────────────────────────────────
|
// ── HTML report ───────────────────────────────────────────────────────────────
|
||||||
|
|
@ -287,9 +289,9 @@ li { margin-bottom: .15rem; }
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetHTMLReport implements sdk.CheckerHTMLReporter.
|
// 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
|
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)
|
return "", fmt.Errorf("failed to unmarshal matrix report: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,14 +27,14 @@ func (r *matrixRule) ValidateOptions(opts sdk.CheckerOptions) error {
|
||||||
return nil
|
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
|
var data MatrixFederationData
|
||||||
if err := obs.Get(ctx, ObservationKeyMatrix, &data); err != nil {
|
if err := obs.Get(ctx, ObservationKeyMatrix, &data); err != nil {
|
||||||
return sdk.CheckState{
|
return []sdk.CheckState{{
|
||||||
Status: sdk.StatusError,
|
Status: sdk.StatusError,
|
||||||
Message: fmt.Sprintf("Failed to get Matrix federation data: %v", err),
|
Message: fmt.Sprintf("Failed to get Matrix federation data: %v", err),
|
||||||
Code: "matrix_federation_error",
|
Code: "matrix_federation_error",
|
||||||
}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
domain, _ := opts["serviceDomain"].(string)
|
domain, _ := opts["serviceDomain"].(string)
|
||||||
|
|
@ -42,14 +42,14 @@ func (r *matrixRule) Evaluate(ctx context.Context, obs sdk.ObservationGetter, op
|
||||||
|
|
||||||
if data.FederationOK {
|
if data.FederationOK {
|
||||||
version := strings.TrimSpace(data.Version.Name + " " + data.Version.Version)
|
version := strings.TrimSpace(data.Version.Name + " " + data.Version.Version)
|
||||||
return sdk.CheckState{
|
return []sdk.CheckState{{
|
||||||
Status: sdk.StatusOK,
|
Status: sdk.StatusOK,
|
||||||
Message: fmt.Sprintf("Running %s", version),
|
Message: fmt.Sprintf("Running %s", version),
|
||||||
Code: "matrix_federation_ok",
|
Code: "matrix_federation_ok",
|
||||||
Meta: map[string]any{
|
Meta: map[string]any{
|
||||||
"version": version,
|
"version": version,
|
||||||
},
|
},
|
||||||
}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
var statusLine string
|
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)
|
statusLine = fmt.Sprintf("Federation broken. Check https://federationtester.matrix.org/#%s", domain)
|
||||||
}
|
}
|
||||||
|
|
||||||
return sdk.CheckState{
|
return []sdk.CheckState{{
|
||||||
Status: sdk.StatusCrit,
|
Status: sdk.StatusCrit,
|
||||||
Message: statusLine,
|
Message: statusLine,
|
||||||
Code: "matrix_federation_fail",
|
Code: "matrix_federation_fail",
|
||||||
}
|
}}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2
go.mod
2
go.mod
|
|
@ -2,4 +2,4 @@ module git.happydns.org/checker-matrix
|
||||||
|
|
||||||
go 1.25.0
|
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 v1.2.0 h1:v4MpKAz0W3PwP+bxx3pya8w893sVH5xTD1of1cc0TV8=
|
||||||
git.happydns.org/checker-sdk-go v0.0.1/go.mod h1:aNAcfYFfbhvH9kJhE0Njp5GX0dQbxdRB0rJ0KvSC5nI=
|
git.happydns.org/checker-sdk-go v1.2.0/go.mod h1:aNAcfYFfbhvH9kJhE0Njp5GX0dQbxdRB0rJ0KvSC5nI=
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue