Skip to content

Commit

Permalink
[scd] minimal implementation for the dss report handler
Browse files Browse the repository at this point in the history
  • Loading branch information
Shastick committed Mar 19, 2024
1 parent 123a501 commit 9382bf3
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 8 deletions.
7 changes: 4 additions & 3 deletions cmds/core-service/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,10 @@ func createSCDServer(ctx context.Context, logger *zap.Logger) (*scd.Server, erro
scdCron.Start()

return &scd.Server{
Store: scdStore,
Timeout: *timeout,
EnableHTTP: *enableHTTP,
Store: scdStore,
DssReportHandler: scd.JSONLoggingDssReportHandler{ReportLogger: logger},
Timeout: *timeout,
EnableHTTP: *enableHTTP,
}, nil
}

Expand Down
3 changes: 3 additions & 0 deletions pkg/logging/logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ func Configure(level string, format string) error {
// WithValuesFromContext augments logger with relevant fields from ctx and returns
// the resulting logger.
func WithValuesFromContext(ctx context.Context, logger *zap.Logger) *zap.Logger {
// TODO: WithValuesFromContext is used in multiple places that might assume this
// method does more than it actually does:
// given it was added in 2019 we may want to check?
// Naive implementation for now, meant to evolve over time.
return logger
}
36 changes: 36 additions & 0 deletions pkg/scd/dss_report_handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package scd

import (
"context"
"encoding/json"
"github.com/google/uuid"
restapi "github.com/interuss/dss/pkg/api/scdv1"
"github.com/interuss/dss/pkg/logging"
"github.com/interuss/stacktrace"
"go.uber.org/zap"
)

// JSONLoggingDssReportHandler a DssReportHandler that simply logs the received report as JSON.
type JSONLoggingDssReportHandler struct {
// ReportLogger is the logger to which the received reports will be logged.
ReportLogger *zap.Logger
}

// HandleDssReport logs the received report as a JSON string to a logger.
func (h JSONLoggingDssReportHandler) HandleDssReport(ctx context.Context, req *restapi.MakeDssReportRequest) (*restapi.ErrorReport, error) {
reportID, err := uuid.NewRandom()
if err != nil {
return nil, stacktrace.Propagate(err, "Failed to generate report ID")
}
rVal := req.Body
reportIDStr := reportID.String()
rVal.ReportId = &reportIDStr
// Serialize the report to a JSON string:
jsonReport, err := json.Marshal(req.Body)
if err != nil {
logging.WithValuesFromContext(ctx, logging.Logger).Error("Failed to serialize DSS Report", zap.Error(err))
return nil, stacktrace.Propagate(err, "Failed to serialize DSS Report")
}
h.ReportLogger.Info("Received DSS Report", zap.String("report", string(jsonReport)))
return rVal, nil
}
8 changes: 8 additions & 0 deletions pkg/scd/repos/repos.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package repos
import (
"context"
"github.com/golang/geo/s2"
restapi "github.com/interuss/dss/pkg/api/scdv1"
dssmodels "github.com/interuss/dss/pkg/models"
scdmodels "github.com/interuss/dss/pkg/scd/models"
)
Expand Down Expand Up @@ -80,7 +81,14 @@ type Constraint interface {
DeleteConstraint(ctx context.Context, id dssmodels.ID) error
}

// DssReport takes care of handling a DSS report.
type DssReport interface {
// HandleDssReport handles a DSS report request. Returns the error report passed in 'req' after having set its identifier.
HandleDssReport(ctx context.Context, req *restapi.MakeDssReportRequest) (*restapi.ErrorReport, error)
}

// Repository aggregates all SCD-specific repo interfaces.
// Note that 'DssReport' is not yet part of it, while we figure exactly how we want to handle DSS reports
type Repository interface {
OperationalIntent
Subscription
Expand Down
17 changes: 12 additions & 5 deletions pkg/scd/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package scd

import (
"context"
"github.com/interuss/dss/pkg/scd/repos"
"time"

"github.com/interuss/dss/pkg/api"
Expand Down Expand Up @@ -35,9 +36,10 @@ func makeSubscribersToNotify(subscriptions []*scdmodels.Subscription) []restapi.

// Server implements scdv1.Implementation.
type Server struct {
Store scdstore.Store
Timeout time.Duration
EnableHTTP bool
Store scdstore.Store
DssReportHandler repos.DssReport
Timeout time.Duration
EnableHTTP bool
}

// MakeDssReport creates an error report about a DSS.
Expand All @@ -54,8 +56,13 @@ func (a *Server) MakeDssReport(ctx context.Context, req *restapi.MakeDssReportRe
Message: dsserr.Handle(ctx, stacktrace.PropagateWithCode(req.BodyParseError, dsserr.BadRequest, "Malformed params"))}}
}

return restapi.MakeDssReportResponseSet{Response400: &restapi.ErrorResponse{
Message: dsserr.Handle(ctx, stacktrace.NewErrorWithCode(dsserr.BadRequest, "Not yet implemented"))}}
resp, err := a.DssReportHandler.HandleDssReport(ctx, req)
if err != nil {
return restapi.MakeDssReportResponseSet{Response400: &restapi.ErrorResponse{
Message: dsserr.Handle(ctx, stacktrace.PropagateWithCode(err, dsserr.BadRequest, "Failed to handle DSS Report"))}}
}

return restapi.MakeDssReportResponseSet{Response201: resp}
}

func setAuthError(ctx context.Context, authErr error, resp401, resp403 **restapi.ErrorResponse, resp500 **api.InternalServerErrorBody) {
Expand Down

0 comments on commit 9382bf3

Please sign in to comment.