lapi detailed metrics: API spec + models (#3100)

* lapi detailed metrics: API spec + models

* models+db: split hubstate by item type
This commit is contained in:
mmetc 2024-07-02 22:49:47 +02:00 committed by GitHub
parent b1cf83975e
commit 4635d04b22
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 1962 additions and 10 deletions

View file

@ -48,7 +48,7 @@ type Machine struct {
// Featureflags holds the value of the "featureflags" field.
Featureflags string `json:"featureflags,omitempty"`
// Hubstate holds the value of the "hubstate" field.
Hubstate map[string]schema.ItemState `json:"hubstate,omitempty"`
Hubstate map[string][]schema.ItemState `json:"hubstate,omitempty"`
// Datasources holds the value of the "datasources" field.
Datasources map[string]int64 `json:"datasources,omitempty"`
// Edges holds the relations/edges for other nodes in the graph.

View file

@ -195,7 +195,7 @@ func (mc *MachineCreate) SetNillableFeatureflags(s *string) *MachineCreate {
}
// SetHubstate sets the "hubstate" field.
func (mc *MachineCreate) SetHubstate(ms map[string]schema.ItemState) *MachineCreate {
func (mc *MachineCreate) SetHubstate(ms map[string][]schema.ItemState) *MachineCreate {
mc.mutation.SetHubstate(ms)
return mc
}

View file

@ -233,7 +233,7 @@ func (mu *MachineUpdate) ClearFeatureflags() *MachineUpdate {
}
// SetHubstate sets the "hubstate" field.
func (mu *MachineUpdate) SetHubstate(ms map[string]schema.ItemState) *MachineUpdate {
func (mu *MachineUpdate) SetHubstate(ms map[string][]schema.ItemState) *MachineUpdate {
mu.mutation.SetHubstate(ms)
return mu
}
@ -692,7 +692,7 @@ func (muo *MachineUpdateOne) ClearFeatureflags() *MachineUpdateOne {
}
// SetHubstate sets the "hubstate" field.
func (muo *MachineUpdateOne) SetHubstate(ms map[string]schema.ItemState) *MachineUpdateOne {
func (muo *MachineUpdateOne) SetHubstate(ms map[string][]schema.ItemState) *MachineUpdateOne {
muo.mutation.SetHubstate(ms)
return muo
}

View file

@ -6542,7 +6542,7 @@ type MachineMutation struct {
osname *string
osversion *string
featureflags *string
hubstate *map[string]schema.ItemState
hubstate *map[string][]schema.ItemState
datasources *map[string]int64
clearedFields map[string]struct{}
alerts map[int]struct{}
@ -7247,12 +7247,12 @@ func (m *MachineMutation) ResetFeatureflags() {
}
// SetHubstate sets the "hubstate" field.
func (m *MachineMutation) SetHubstate(ms map[string]schema.ItemState) {
func (m *MachineMutation) SetHubstate(ms map[string][]schema.ItemState) {
m.hubstate = &ms
}
// Hubstate returns the value of the "hubstate" field in the mutation.
func (m *MachineMutation) Hubstate() (r map[string]schema.ItemState, exists bool) {
func (m *MachineMutation) Hubstate() (r map[string][]schema.ItemState, exists bool) {
v := m.hubstate
if v == nil {
return
@ -7263,7 +7263,7 @@ func (m *MachineMutation) Hubstate() (r map[string]schema.ItemState, exists bool
// OldHubstate returns the old "hubstate" field's value of the Machine entity.
// If the Machine object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *MachineMutation) OldHubstate(ctx context.Context) (v map[string]schema.ItemState, err error) {
func (m *MachineMutation) OldHubstate(ctx context.Context) (v map[string][]schema.ItemState, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldHubstate is only allowed on UpdateOne operations")
}
@ -7670,7 +7670,7 @@ func (m *MachineMutation) SetField(name string, value ent.Value) error {
m.SetFeatureflags(v)
return nil
case machine.FieldHubstate:
v, ok := value.(map[string]schema.ItemState)
v, ok := value.(map[string][]schema.ItemState)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}

View file

@ -46,7 +46,7 @@ func (Machine) Fields() []ent.Field {
field.String("osname").Optional(),
field.String("osversion").Optional(),
field.String("featureflags").Optional(),
field.JSON("hubstate", map[string]ItemState{}).Optional(),
field.JSON("hubstate", map[string][]ItemState{}).Optional(),
field.JSON("datasources", map[string]int64{}).Optional(),
}
}

234
pkg/models/all_metrics.go Normal file
View file

@ -0,0 +1,234 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"strconv"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// AllMetrics AllMetrics
//
// swagger:model AllMetrics
type AllMetrics struct {
// lapi
Lapi *LapiMetrics `json:"lapi,omitempty"`
// log processors metrics
LogProcessors []*LogProcessorsMetrics `json:"log_processors"`
// remediation components metrics
RemediationComponents []*RemediationComponentsMetrics `json:"remediation_components"`
}
// Validate validates this all metrics
func (m *AllMetrics) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateLapi(formats); err != nil {
res = append(res, err)
}
if err := m.validateLogProcessors(formats); err != nil {
res = append(res, err)
}
if err := m.validateRemediationComponents(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *AllMetrics) validateLapi(formats strfmt.Registry) error {
if swag.IsZero(m.Lapi) { // not required
return nil
}
if m.Lapi != nil {
if err := m.Lapi.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("lapi")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("lapi")
}
return err
}
}
return nil
}
func (m *AllMetrics) validateLogProcessors(formats strfmt.Registry) error {
if swag.IsZero(m.LogProcessors) { // not required
return nil
}
for i := 0; i < len(m.LogProcessors); i++ {
if swag.IsZero(m.LogProcessors[i]) { // not required
continue
}
if m.LogProcessors[i] != nil {
if err := m.LogProcessors[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("log_processors" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("log_processors" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *AllMetrics) validateRemediationComponents(formats strfmt.Registry) error {
if swag.IsZero(m.RemediationComponents) { // not required
return nil
}
for i := 0; i < len(m.RemediationComponents); i++ {
if swag.IsZero(m.RemediationComponents[i]) { // not required
continue
}
if m.RemediationComponents[i] != nil {
if err := m.RemediationComponents[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("remediation_components" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("remediation_components" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
// ContextValidate validate this all metrics based on the context it is used
func (m *AllMetrics) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
if err := m.contextValidateLapi(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateLogProcessors(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateRemediationComponents(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *AllMetrics) contextValidateLapi(ctx context.Context, formats strfmt.Registry) error {
if m.Lapi != nil {
if swag.IsZero(m.Lapi) { // not required
return nil
}
if err := m.Lapi.ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("lapi")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("lapi")
}
return err
}
}
return nil
}
func (m *AllMetrics) contextValidateLogProcessors(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.LogProcessors); i++ {
if m.LogProcessors[i] != nil {
if swag.IsZero(m.LogProcessors[i]) { // not required
return nil
}
if err := m.LogProcessors[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("log_processors" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("log_processors" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *AllMetrics) contextValidateRemediationComponents(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.RemediationComponents); i++ {
if m.RemediationComponents[i] != nil {
if swag.IsZero(m.RemediationComponents[i]) { // not required
return nil
}
if err := m.RemediationComponents[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("remediation_components" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("remediation_components" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
// MarshalBinary interface implementation
func (m *AllMetrics) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *AllMetrics) UnmarshalBinary(b []byte) error {
var res AllMetrics
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

210
pkg/models/base_metrics.go Normal file
View file

@ -0,0 +1,210 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"strconv"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// BaseMetrics BaseMetrics
//
// swagger:model BaseMetrics
type BaseMetrics struct {
// feature flags (expected to be empty for remediation components)
FeatureFlags []string `json:"feature_flags"`
// metrics details
Metrics []*DetailedMetrics `json:"metrics"`
// os
Os *OSversion `json:"os,omitempty"`
// UTC timestamp of the startup of the software
// Required: true
UtcStartupTimestamp *int64 `json:"utc_startup_timestamp"`
// version of the remediation component
// Required: true
Version *string `json:"version"`
}
// Validate validates this base metrics
func (m *BaseMetrics) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateMetrics(formats); err != nil {
res = append(res, err)
}
if err := m.validateOs(formats); err != nil {
res = append(res, err)
}
if err := m.validateUtcStartupTimestamp(formats); err != nil {
res = append(res, err)
}
if err := m.validateVersion(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *BaseMetrics) validateMetrics(formats strfmt.Registry) error {
if swag.IsZero(m.Metrics) { // not required
return nil
}
for i := 0; i < len(m.Metrics); i++ {
if swag.IsZero(m.Metrics[i]) { // not required
continue
}
if m.Metrics[i] != nil {
if err := m.Metrics[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("metrics" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("metrics" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *BaseMetrics) validateOs(formats strfmt.Registry) error {
if swag.IsZero(m.Os) { // not required
return nil
}
if m.Os != nil {
if err := m.Os.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("os")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("os")
}
return err
}
}
return nil
}
func (m *BaseMetrics) validateUtcStartupTimestamp(formats strfmt.Registry) error {
if err := validate.Required("utc_startup_timestamp", "body", m.UtcStartupTimestamp); err != nil {
return err
}
return nil
}
func (m *BaseMetrics) validateVersion(formats strfmt.Registry) error {
if err := validate.Required("version", "body", m.Version); err != nil {
return err
}
return nil
}
// ContextValidate validate this base metrics based on the context it is used
func (m *BaseMetrics) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
if err := m.contextValidateMetrics(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateOs(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *BaseMetrics) contextValidateMetrics(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.Metrics); i++ {
if m.Metrics[i] != nil {
if swag.IsZero(m.Metrics[i]) { // not required
return nil
}
if err := m.Metrics[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("metrics" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("metrics" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *BaseMetrics) contextValidateOs(ctx context.Context, formats strfmt.Registry) error {
if m.Os != nil {
if swag.IsZero(m.Os) { // not required
return nil
}
if err := m.Os.ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("os")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("os")
}
return err
}
}
return nil
}
// MarshalBinary interface implementation
func (m *BaseMetrics) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *BaseMetrics) UnmarshalBinary(b []byte) error {
var res BaseMetrics
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View file

@ -0,0 +1,27 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
)
// ConsoleOptions ConsoleOptions
//
// swagger:model ConsoleOptions
type ConsoleOptions []string
// Validate validates this console options
func (m ConsoleOptions) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this console options based on context it is used
func (m ConsoleOptions) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}

View file

@ -0,0 +1,173 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"strconv"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// DetailedMetrics DetailedMetrics
//
// swagger:model DetailedMetrics
type DetailedMetrics struct {
// items
// Required: true
Items []*MetricsDetailItem `json:"items"`
// meta
// Required: true
Meta *MetricsMeta `json:"meta"`
}
// Validate validates this detailed metrics
func (m *DetailedMetrics) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateItems(formats); err != nil {
res = append(res, err)
}
if err := m.validateMeta(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *DetailedMetrics) validateItems(formats strfmt.Registry) error {
if err := validate.Required("items", "body", m.Items); err != nil {
return err
}
for i := 0; i < len(m.Items); i++ {
if swag.IsZero(m.Items[i]) { // not required
continue
}
if m.Items[i] != nil {
if err := m.Items[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("items" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("items" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *DetailedMetrics) validateMeta(formats strfmt.Registry) error {
if err := validate.Required("meta", "body", m.Meta); err != nil {
return err
}
if m.Meta != nil {
if err := m.Meta.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("meta")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("meta")
}
return err
}
}
return nil
}
// ContextValidate validate this detailed metrics based on the context it is used
func (m *DetailedMetrics) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
if err := m.contextValidateItems(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateMeta(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *DetailedMetrics) contextValidateItems(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.Items); i++ {
if m.Items[i] != nil {
if swag.IsZero(m.Items[i]) { // not required
return nil
}
if err := m.Items[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("items" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("items" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *DetailedMetrics) contextValidateMeta(ctx context.Context, formats strfmt.Registry) error {
if m.Meta != nil {
if err := m.Meta.ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("meta")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("meta")
}
return err
}
}
return nil
}
// MarshalBinary interface implementation
func (m *DetailedMetrics) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *DetailedMetrics) UnmarshalBinary(b []byte) error {
var res DetailedMetrics
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

56
pkg/models/hub_item.go Normal file
View file

@ -0,0 +1,56 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// HubItem HubItem
//
// swagger:model HubItem
type HubItem struct {
// name of the hub item
Name string `json:"name,omitempty"`
// status of the hub item (official, custom, tainted, etc.)
Status string `json:"status,omitempty"`
// version of the hub item
Version string `json:"version,omitempty"`
}
// Validate validates this hub item
func (m *HubItem) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this hub item based on context it is used
func (m *HubItem) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *HubItem) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *HubItem) UnmarshalBinary(b []byte) error {
var res HubItem
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

83
pkg/models/hub_items.go Normal file
View file

@ -0,0 +1,83 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"strconv"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// HubItems HubItems
//
// swagger:model HubItems
type HubItems map[string][]HubItem
// Validate validates this hub items
func (m HubItems) Validate(formats strfmt.Registry) error {
var res []error
for k := range m {
if err := validate.Required(k, "body", m[k]); err != nil {
return err
}
for i := 0; i < len(m[k]); i++ {
if err := m[k][i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName(k + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName(k + "." + strconv.Itoa(i))
}
return err
}
}
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// ContextValidate validate this hub items based on the context it is used
func (m HubItems) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
for k := range m {
for i := 0; i < len(m[k]); i++ {
if swag.IsZero(m[k][i]) { // not required
return nil
}
if err := m[k][i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName(k + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName(k + "." + strconv.Itoa(i))
}
return err
}
}
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

157
pkg/models/lapi_metrics.go Normal file
View file

@ -0,0 +1,157 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// LapiMetrics LapiMetrics
//
// swagger:model LapiMetrics
type LapiMetrics struct {
BaseMetrics
// console options
ConsoleOptions ConsoleOptions `json:"console_options,omitempty"`
}
// UnmarshalJSON unmarshals this object from a JSON structure
func (m *LapiMetrics) UnmarshalJSON(raw []byte) error {
// AO0
var aO0 BaseMetrics
if err := swag.ReadJSON(raw, &aO0); err != nil {
return err
}
m.BaseMetrics = aO0
// AO1
var dataAO1 struct {
ConsoleOptions ConsoleOptions `json:"console_options,omitempty"`
}
if err := swag.ReadJSON(raw, &dataAO1); err != nil {
return err
}
m.ConsoleOptions = dataAO1.ConsoleOptions
return nil
}
// MarshalJSON marshals this object to a JSON structure
func (m LapiMetrics) MarshalJSON() ([]byte, error) {
_parts := make([][]byte, 0, 2)
aO0, err := swag.WriteJSON(m.BaseMetrics)
if err != nil {
return nil, err
}
_parts = append(_parts, aO0)
var dataAO1 struct {
ConsoleOptions ConsoleOptions `json:"console_options,omitempty"`
}
dataAO1.ConsoleOptions = m.ConsoleOptions
jsonDataAO1, errAO1 := swag.WriteJSON(dataAO1)
if errAO1 != nil {
return nil, errAO1
}
_parts = append(_parts, jsonDataAO1)
return swag.ConcatJSON(_parts...), nil
}
// Validate validates this lapi metrics
func (m *LapiMetrics) Validate(formats strfmt.Registry) error {
var res []error
// validation for a type composition with BaseMetrics
if err := m.BaseMetrics.Validate(formats); err != nil {
res = append(res, err)
}
if err := m.validateConsoleOptions(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *LapiMetrics) validateConsoleOptions(formats strfmt.Registry) error {
if swag.IsZero(m.ConsoleOptions) { // not required
return nil
}
if err := m.ConsoleOptions.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("console_options")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("console_options")
}
return err
}
return nil
}
// ContextValidate validate this lapi metrics based on the context it is used
func (m *LapiMetrics) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
// validation for a type composition with BaseMetrics
if err := m.BaseMetrics.ContextValidate(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateConsoleOptions(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *LapiMetrics) contextValidateConsoleOptions(ctx context.Context, formats strfmt.Registry) error {
if err := m.ConsoleOptions.ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("console_options")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("console_options")
}
return err
}
return nil
}
// MarshalBinary interface implementation
func (m *LapiMetrics) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *LapiMetrics) UnmarshalBinary(b []byte) error {
var res LapiMetrics
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View file

@ -684,6 +684,36 @@ paths:
$ref: "#/definitions/ErrorResponse"
security:
- JWTAuthorizer: []
/usage-metrics:
post:
description: Post usage metrics from a LP or a bouncer
summary: Send usage metrics
tags:
- Remediation component
- watchers
operationId: usage-metrics
produces:
- application/json
parameters:
- name: body
in: body
required: true
schema:
$ref: '#/definitions/AllMetrics'
description: 'All metrics'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/SuccessResponse'
headers: {}
'400':
description: "400 response"
schema:
$ref: "#/definitions/ErrorResponse"
security:
- APIKeyAuthorizer: []
- JWTAuthorizer: []
definitions:
WatcherRegistrationRequest:
title: WatcherRegistrationRequest
@ -994,6 +1024,186 @@ definitions:
type: string
value:
type: string
RemediationComponentsMetrics:
title: RemediationComponentsMetrics
type: object
allOf:
- $ref: '#/definitions/BaseMetrics'
- properties:
type:
type: string
description: type of the remediation component
name:
type: string
description: name of the remediation component
last_pull:
type: integer
description: last pull date
LogProcessorsMetrics:
title: LogProcessorsMetrics
type: object
allOf:
- $ref: '#/definitions/BaseMetrics'
- properties:
hub_items:
$ref: '#/definitions/HubItems'
datasources:
type: object
description: Number of datasources per type
additionalProperties:
type: integer
name:
type: string
description: name of the log processor
last_push:
type: integer
description: last push date
last_update:
type: integer
description: last update date
required:
- hub_items
- datasources
LapiMetrics:
title: LapiMetrics
type: object
allOf:
- $ref: '#/definitions/BaseMetrics'
- properties:
console_options:
$ref: '#/definitions/ConsoleOptions'
AllMetrics:
title: AllMetrics
type: object
properties:
remediation_components:
type: array
items:
$ref: '#/definitions/RemediationComponentsMetrics'
description: remediation components metrics
log_processors:
type: array
items:
$ref: '#/definitions/LogProcessorsMetrics'
description: log processors metrics
lapi:
$ref: '#/definitions/LapiMetrics'
BaseMetrics:
title: BaseMetrics
type: object
properties:
version:
type: string
description: version of the remediation component
os:
$ref: '#/definitions/OSversion'
metrics:
type: array
items:
$ref: '#/definitions/DetailedMetrics'
description: metrics details
feature_flags:
type: array
items:
type: string
description: feature flags (expected to be empty for remediation components)
utc_startup_timestamp:
type: integer
description: UTC timestamp of the startup of the software
required:
- version
- utc_startup_timestamp
OSversion:
title: OSversion
type: object
properties:
name:
type: string
description: name of the OS
version:
type: string
description: version of the OS
required:
- name
- version
DetailedMetrics:
type: object
title: DetailedMetrics
properties:
items:
type: array
items:
$ref: '#/definitions/MetricsDetailItem'
meta:
$ref: '#/definitions/MetricsMeta'
required:
- meta
- items
MetricsDetailItem:
title: MetricsDetailItem
type: object
properties:
name:
type: string
description: name of the metric
value:
type: number
description: value of the metric
unit:
type: string
description: unit of the metric
labels:
$ref: '#/definitions/MetricsLabels'
description: labels of the metric
required:
- name
- value
- unit
MetricsMeta:
title: MetricsMeta
type: object
properties:
window_size_seconds:
type: integer
description: Size, in seconds, of the window used to compute the metric
utc_now_timestamp:
type: integer
description: UTC timestamp of the current time
required:
- window_size_seconds
- utc_now_timestamp
MetricsLabels:
title: MetricsLabels
type: object
additionalProperties:
type: string
description: label of the metric
ConsoleOptions:
title: ConsoleOptions
type: array
items:
type: string
description: enabled console options
HubItems:
title: HubItems
type: object
additionalProperties:
type: array
items:
$ref: '#/definitions/HubItem'
HubItem:
title: HubItem
type: object
properties:
name:
type: string
description: name of the hub item
version:
type: string
description: version of the hub item
status:
type: string
description: status of the hub item (official, custom, tainted, etc.)
ErrorResponse:
type: "object"
required:
@ -1007,6 +1217,16 @@ definitions:
description: "more detail on individual errors"
title: "error response"
description: "error response return by the API"
SuccessResponse:
type: "object"
required:
- "message"
properties:
message:
type: "string"
description: "message"
title: "success response"
description: "success response return by the API"
tags:
- name: Remediation component
description: 'Operations about decisions : bans, captcha, rate-limit etc.'

View file

@ -0,0 +1,219 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// LogProcessorsMetrics LogProcessorsMetrics
//
// swagger:model LogProcessorsMetrics
type LogProcessorsMetrics struct {
BaseMetrics
// Number of datasources per type
// Required: true
Datasources map[string]int64 `json:"datasources"`
// hub items
// Required: true
HubItems HubItems `json:"hub_items"`
// last push date
LastPush int64 `json:"last_push,omitempty"`
// last update date
LastUpdate int64 `json:"last_update,omitempty"`
// name of the log processor
Name string `json:"name,omitempty"`
}
// UnmarshalJSON unmarshals this object from a JSON structure
func (m *LogProcessorsMetrics) UnmarshalJSON(raw []byte) error {
// AO0
var aO0 BaseMetrics
if err := swag.ReadJSON(raw, &aO0); err != nil {
return err
}
m.BaseMetrics = aO0
// AO1
var dataAO1 struct {
Datasources map[string]int64 `json:"datasources"`
HubItems HubItems `json:"hub_items"`
LastPush int64 `json:"last_push,omitempty"`
LastUpdate int64 `json:"last_update,omitempty"`
Name string `json:"name,omitempty"`
}
if err := swag.ReadJSON(raw, &dataAO1); err != nil {
return err
}
m.Datasources = dataAO1.Datasources
m.HubItems = dataAO1.HubItems
m.LastPush = dataAO1.LastPush
m.LastUpdate = dataAO1.LastUpdate
m.Name = dataAO1.Name
return nil
}
// MarshalJSON marshals this object to a JSON structure
func (m LogProcessorsMetrics) MarshalJSON() ([]byte, error) {
_parts := make([][]byte, 0, 2)
aO0, err := swag.WriteJSON(m.BaseMetrics)
if err != nil {
return nil, err
}
_parts = append(_parts, aO0)
var dataAO1 struct {
Datasources map[string]int64 `json:"datasources"`
HubItems HubItems `json:"hub_items"`
LastPush int64 `json:"last_push,omitempty"`
LastUpdate int64 `json:"last_update,omitempty"`
Name string `json:"name,omitempty"`
}
dataAO1.Datasources = m.Datasources
dataAO1.HubItems = m.HubItems
dataAO1.LastPush = m.LastPush
dataAO1.LastUpdate = m.LastUpdate
dataAO1.Name = m.Name
jsonDataAO1, errAO1 := swag.WriteJSON(dataAO1)
if errAO1 != nil {
return nil, errAO1
}
_parts = append(_parts, jsonDataAO1)
return swag.ConcatJSON(_parts...), nil
}
// Validate validates this log processors metrics
func (m *LogProcessorsMetrics) Validate(formats strfmt.Registry) error {
var res []error
// validation for a type composition with BaseMetrics
if err := m.BaseMetrics.Validate(formats); err != nil {
res = append(res, err)
}
if err := m.validateDatasources(formats); err != nil {
res = append(res, err)
}
if err := m.validateHubItems(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *LogProcessorsMetrics) validateDatasources(formats strfmt.Registry) error {
if err := validate.Required("datasources", "body", m.Datasources); err != nil {
return err
}
return nil
}
func (m *LogProcessorsMetrics) validateHubItems(formats strfmt.Registry) error {
if err := validate.Required("hub_items", "body", m.HubItems); err != nil {
return err
}
if m.HubItems != nil {
if err := m.HubItems.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("hub_items")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("hub_items")
}
return err
}
}
return nil
}
// ContextValidate validate this log processors metrics based on the context it is used
func (m *LogProcessorsMetrics) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
// validation for a type composition with BaseMetrics
if err := m.BaseMetrics.ContextValidate(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateHubItems(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *LogProcessorsMetrics) contextValidateHubItems(ctx context.Context, formats strfmt.Registry) error {
if err := m.HubItems.ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("hub_items")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("hub_items")
}
return err
}
return nil
}
// MarshalBinary interface implementation
func (m *LogProcessorsMetrics) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *LogProcessorsMetrics) UnmarshalBinary(b []byte) error {
var res LogProcessorsMetrics
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View file

@ -0,0 +1,158 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// MetricsDetailItem MetricsDetailItem
//
// swagger:model MetricsDetailItem
type MetricsDetailItem struct {
// labels of the metric
Labels MetricsLabels `json:"labels,omitempty"`
// name of the metric
// Required: true
Name *string `json:"name"`
// unit of the metric
// Required: true
Unit *string `json:"unit"`
// value of the metric
// Required: true
Value *float64 `json:"value"`
}
// Validate validates this metrics detail item
func (m *MetricsDetailItem) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateLabels(formats); err != nil {
res = append(res, err)
}
if err := m.validateName(formats); err != nil {
res = append(res, err)
}
if err := m.validateUnit(formats); err != nil {
res = append(res, err)
}
if err := m.validateValue(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *MetricsDetailItem) validateLabels(formats strfmt.Registry) error {
if swag.IsZero(m.Labels) { // not required
return nil
}
if m.Labels != nil {
if err := m.Labels.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("labels")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("labels")
}
return err
}
}
return nil
}
func (m *MetricsDetailItem) validateName(formats strfmt.Registry) error {
if err := validate.Required("name", "body", m.Name); err != nil {
return err
}
return nil
}
func (m *MetricsDetailItem) validateUnit(formats strfmt.Registry) error {
if err := validate.Required("unit", "body", m.Unit); err != nil {
return err
}
return nil
}
func (m *MetricsDetailItem) validateValue(formats strfmt.Registry) error {
if err := validate.Required("value", "body", m.Value); err != nil {
return err
}
return nil
}
// ContextValidate validate this metrics detail item based on the context it is used
func (m *MetricsDetailItem) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
if err := m.contextValidateLabels(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *MetricsDetailItem) contextValidateLabels(ctx context.Context, formats strfmt.Registry) error {
if swag.IsZero(m.Labels) { // not required
return nil
}
if err := m.Labels.ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("labels")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("labels")
}
return err
}
return nil
}
// MarshalBinary interface implementation
func (m *MetricsDetailItem) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *MetricsDetailItem) UnmarshalBinary(b []byte) error {
var res MetricsDetailItem
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View file

@ -0,0 +1,27 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
)
// MetricsLabels MetricsLabels
//
// swagger:model MetricsLabels
type MetricsLabels map[string]string
// Validate validates this metrics labels
func (m MetricsLabels) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this metrics labels based on context it is used
func (m MetricsLabels) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}

View file

@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// MetricsMeta MetricsMeta
//
// swagger:model MetricsMeta
type MetricsMeta struct {
// UTC timestamp of the current time
// Required: true
UtcNowTimestamp *int64 `json:"utc_now_timestamp"`
// Size, in seconds, of the window used to compute the metric
// Required: true
WindowSizeSeconds *int64 `json:"window_size_seconds"`
}
// Validate validates this metrics meta
func (m *MetricsMeta) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateUtcNowTimestamp(formats); err != nil {
res = append(res, err)
}
if err := m.validateWindowSizeSeconds(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *MetricsMeta) validateUtcNowTimestamp(formats strfmt.Registry) error {
if err := validate.Required("utc_now_timestamp", "body", m.UtcNowTimestamp); err != nil {
return err
}
return nil
}
func (m *MetricsMeta) validateWindowSizeSeconds(formats strfmt.Registry) error {
if err := validate.Required("window_size_seconds", "body", m.WindowSizeSeconds); err != nil {
return err
}
return nil
}
// ContextValidate validates this metrics meta based on context it is used
func (m *MetricsMeta) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *MetricsMeta) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *MetricsMeta) UnmarshalBinary(b []byte) error {
var res MetricsMeta
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

88
pkg/models/o_sversion.go Normal file
View file

@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// OSversion OSversion
//
// swagger:model OSversion
type OSversion struct {
// name of the OS
// Required: true
Name *string `json:"name"`
// version of the OS
// Required: true
Version *string `json:"version"`
}
// Validate validates this o sversion
func (m *OSversion) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateName(formats); err != nil {
res = append(res, err)
}
if err := m.validateVersion(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *OSversion) validateName(formats strfmt.Registry) error {
if err := validate.Required("name", "body", m.Name); err != nil {
return err
}
return nil
}
func (m *OSversion) validateVersion(formats strfmt.Registry) error {
if err := validate.Required("version", "body", m.Version); err != nil {
return err
}
return nil
}
// ContextValidate validates this o sversion based on context it is used
func (m *OSversion) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *OSversion) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *OSversion) UnmarshalBinary(b []byte) error {
var res OSversion
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View file

@ -0,0 +1,139 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// RemediationComponentsMetrics RemediationComponentsMetrics
//
// swagger:model RemediationComponentsMetrics
type RemediationComponentsMetrics struct {
BaseMetrics
// last pull date
LastPull int64 `json:"last_pull,omitempty"`
// name of the remediation component
Name string `json:"name,omitempty"`
// type of the remediation component
Type string `json:"type,omitempty"`
}
// UnmarshalJSON unmarshals this object from a JSON structure
func (m *RemediationComponentsMetrics) UnmarshalJSON(raw []byte) error {
// AO0
var aO0 BaseMetrics
if err := swag.ReadJSON(raw, &aO0); err != nil {
return err
}
m.BaseMetrics = aO0
// AO1
var dataAO1 struct {
LastPull int64 `json:"last_pull,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
}
if err := swag.ReadJSON(raw, &dataAO1); err != nil {
return err
}
m.LastPull = dataAO1.LastPull
m.Name = dataAO1.Name
m.Type = dataAO1.Type
return nil
}
// MarshalJSON marshals this object to a JSON structure
func (m RemediationComponentsMetrics) MarshalJSON() ([]byte, error) {
_parts := make([][]byte, 0, 2)
aO0, err := swag.WriteJSON(m.BaseMetrics)
if err != nil {
return nil, err
}
_parts = append(_parts, aO0)
var dataAO1 struct {
LastPull int64 `json:"last_pull,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
}
dataAO1.LastPull = m.LastPull
dataAO1.Name = m.Name
dataAO1.Type = m.Type
jsonDataAO1, errAO1 := swag.WriteJSON(dataAO1)
if errAO1 != nil {
return nil, errAO1
}
_parts = append(_parts, jsonDataAO1)
return swag.ConcatJSON(_parts...), nil
}
// Validate validates this remediation components metrics
func (m *RemediationComponentsMetrics) Validate(formats strfmt.Registry) error {
var res []error
// validation for a type composition with BaseMetrics
if err := m.BaseMetrics.Validate(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// ContextValidate validate this remediation components metrics based on the context it is used
func (m *RemediationComponentsMetrics) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
// validation for a type composition with BaseMetrics
if err := m.BaseMetrics.ContextValidate(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// MarshalBinary interface implementation
func (m *RemediationComponentsMetrics) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *RemediationComponentsMetrics) UnmarshalBinary(b []byte) error {
var res RemediationComponentsMetrics
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View file

@ -0,0 +1,73 @@
// Code generated by go-swagger; DO NOT EDIT.
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// SuccessResponse success response
//
// success response return by the API
//
// swagger:model SuccessResponse
type SuccessResponse struct {
// message
// Required: true
Message *string `json:"message"`
}
// Validate validates this success response
func (m *SuccessResponse) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateMessage(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *SuccessResponse) validateMessage(formats strfmt.Registry) error {
if err := validate.Required("message", "body", m.Message); err != nil {
return err
}
return nil
}
// ContextValidate validates this success response based on context it is used
func (m *SuccessResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *SuccessResponse) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *SuccessResponse) UnmarshalBinary(b []byte) error {
var res SuccessResponse
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}